-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
335 lines (264 loc) · 45.2 KB
/
index.html
File metadata and controls
335 lines (264 loc) · 45.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
<!DOCTYPE html><html lang="zh-CN" data-theme="light"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"><title>Gruge's Blog</title><meta name="author" content="Gruge"><meta name="copyright" content="Gruge"><meta name="format-detection" content="telephone=no"><meta name="theme-color" content="#ffffff"><meta property="og:type" content="website">
<meta property="og:title" content="Gruge's Blog">
<meta property="og:url" content="http://example.com/index.html">
<meta property="og:site_name" content="Gruge's Blog">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://s3.bmp.ovh/imgs/2022/02/463b631c6a0f63ec.jpg">
<meta property="article:author" content="Gruge">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="https://s3.bmp.ovh/imgs/2022/02/463b631c6a0f63ec.jpg"><link rel="shortcut icon" href="/img/favicon.png"><link rel="canonical" href="http://example.com/"><link rel="preconnect" href="//cdn.jsdelivr.net"><link rel="preconnect" href="//busuanzi.ibruce.info"><link rel="stylesheet" href="/css/index.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6/css/all.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.css" media="print" onload="this.media='all'"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.css" media="print" onload="this.media='all'"><script>const GLOBAL_CONFIG = {
root: '/',
algolia: undefined,
localSearch: {"path":"search.xml","languages":{"hits_empty":"找不到您查询的内容:${query}"}},
translate: undefined,
noticeOutdate: undefined,
highlight: {"plugin":"highlighjs","highlightCopy":true,"highlightLang":true,"highlightHeightLimit":false},
copy: {
success: '复制成功',
error: '复制错误',
noSupport: '浏览器不支持'
},
relativeDate: {
homepage: false,
post: false
},
runtime: '',
date_suffix: {
just: '刚刚',
min: '分钟前',
hour: '小时前',
day: '天前',
month: '个月前'
},
copyright: undefined,
lightbox: 'fancybox',
Snackbar: {"chs_to_cht":"你已切换为繁体","cht_to_chs":"你已切换为简体","day_to_night":"你已切换为深色模式","night_to_day":"你已切换为浅色模式","bgLight":"#49b1f5","bgDark":"#1f1f1f","position":"top-right"},
source: {
justifiedGallery: {
js: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.js',
css: 'https://cdn.jsdelivr.net/npm/flickr-justified-gallery@2/dist/fjGallery.min.css'
}
},
isPhotoFigcaption: false,
islazyload: true,
isAnchor: false
}</script><script id="config-diff">var GLOBAL_CONFIG_SITE = {
title: 'Gruge\'s Blog',
isPost: false,
isHome: true,
isHighlightShrink: false,
isToc: false,
postUpdate: '2022-08-05 16:10:31'
}</script><noscript><style type="text/css">
#nav {
opacity: 1
}
.justified-gallery img {
opacity: 1
}
#recent-posts time,
#post-meta time {
display: inline !important
}
</style></noscript><script>(win=>{
win.saveToLocal = {
set: function setWithExpiry(key, value, ttl) {
if (ttl === 0) return
const now = new Date()
const expiryDay = ttl * 86400000
const item = {
value: value,
expiry: now.getTime() + expiryDay,
}
localStorage.setItem(key, JSON.stringify(item))
},
get: function getWithExpiry(key) {
const itemStr = localStorage.getItem(key)
if (!itemStr) {
return undefined
}
const item = JSON.parse(itemStr)
const now = new Date()
if (now.getTime() > item.expiry) {
localStorage.removeItem(key)
return undefined
}
return item.value
}
}
win.getScript = url => new Promise((resolve, reject) => {
const script = document.createElement('script')
script.src = url
script.async = true
script.onerror = reject
script.onload = script.onreadystatechange = function() {
const loadState = this.readyState
if (loadState && loadState !== 'loaded' && loadState !== 'complete') return
script.onload = script.onreadystatechange = null
resolve()
}
document.head.appendChild(script)
})
win.activateDarkMode = function () {
document.documentElement.setAttribute('data-theme', 'dark')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#0d0d0d')
}
}
win.activateLightMode = function () {
document.documentElement.setAttribute('data-theme', 'light')
if (document.querySelector('meta[name="theme-color"]') !== null) {
document.querySelector('meta[name="theme-color"]').setAttribute('content', '#ffffff')
}
}
const t = saveToLocal.get('theme')
if (t === 'dark') activateDarkMode()
else if (t === 'light') activateLightMode()
const asideStatus = saveToLocal.get('aside-status')
if (asideStatus !== undefined) {
if (asideStatus === 'hide') {
document.documentElement.classList.add('hide-aside')
} else {
document.documentElement.classList.remove('hide-aside')
}
}
const detectApple = () => {
if(/iPad|iPhone|iPod|Macintosh/.test(navigator.userAgent)){
document.documentElement.classList.add('apple')
}
}
detectApple()
})(window)</script><link rel="stylesheet" href="/css/modify.css"><meta name="generator" content="Hexo 5.4.1"></head><body><div id="loading-box"><div class="loading-left-bg"></div><div class="loading-right-bg"></div><div class="spinner-box"><div class="configure-border-1"><div class="configure-core"></div></div><div class="configure-border-2"><div class="configure-core"></div></div><div class="loading-word">加载中...</div></div></div><div id="web_bg"></div><div id="sidebar"><div id="menu-mask"></div><div id="sidebar-menus"><div class="avatar-img is-center"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/463b631c6a0f63ec.jpg" onerror="onerror=null;src='/img/friend_404.gif'" alt="avatar"></div><div class="site-data is-center"><div class="data-item"><a href="/archives/"><div class="headline">文章</div><div class="length-num">18</div></a></div><div class="data-item"><a href="/tags/"><div class="headline">标签</div><div class="length-num">42</div></a></div><div class="data-item"><a href="/categories/"><div class="headline">分类</div><div class="length-num">7</div></a></div></div><hr><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fa fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fa fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fa fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/messageboard/"><i class="fa-fw fa fa-coffee"></i><span> 留言板</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fa fa-link"></i><span> 友链</span></a></div></div></div></div><div class="page" id="body-wrap"><header class="full_page" id="page-header" style="background-image: url('https://s1.ax1x.com/2022/04/21/L63aDS.jpg')"><nav id="nav"><span id="blog_name"><a id="site-name" href="/">Gruge's Blog</a></span><div id="menus"><div id="search-button"><a class="site-page social-icon search"><i class="fas fa-search fa-fw"></i><span> 搜索</span></a></div><div class="menus_items"><div class="menus_item"><a class="site-page" href="/"><i class="fa-fw fa fa-home"></i><span> 首页</span></a></div><div class="menus_item"><a class="site-page" href="/archives/"><i class="fa-fw fa fa-archive"></i><span> 时间轴</span></a></div><div class="menus_item"><a class="site-page" href="/tags/"><i class="fa-fw fa fa-tags"></i><span> 标签</span></a></div><div class="menus_item"><a class="site-page" href="/categories/"><i class="fa-fw fa fa-folder-open"></i><span> 分类</span></a></div><div class="menus_item"><a class="site-page" href="/messageboard/"><i class="fa-fw fa fa-coffee"></i><span> 留言板</span></a></div><div class="menus_item"><a class="site-page" href="/link/"><i class="fa-fw fa fa-link"></i><span> 友链</span></a></div></div><div id="toggle-menu"><a class="site-page"><i class="fas fa-bars fa-fw"></i></a></div></div></nav><div id="site-info"><h1 id="site-title">Gruge's Blog</h1><div id="site-subtitle"><span id="subtitle"></span></div></div><div id="scroll-down"><i class="fas fa-angle-down scroll-down-effects"></i></div></header><main class="layout" id="content-inner"><div class="recent-posts" id="recent-posts"><div class="recent-post-item"><div class="post_cover left"><a href="/2022/08/05/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%AE%9E%E9%AA%8C/" title="数字图像处理实验"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="数字图像处理实验"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/08/05/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%AE%9E%E9%AA%8C/" title="数字图像处理实验">数字图像处理实验</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-08-05T07:52:11.000Z" title="发表于 2022-08-05 15:52:11">2022-08-05</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%9F%BA%E7%A1%80/">数字图像处理基础</a></span></div><div class="content">数字图像处理的基础将彩色图转换为灰度图代码:
1234RGB = imread('D:\reports\test.jpg')subplot(121),imshow(RGB)gray = rgb2gray(RGB)subplot(122),imshow(gray)
转换的结果是:
将灰度图转为为索引图代码:
123456RGB = imread('D:\reports\test.jpg')subplot(221),imshow(RGB)gray = rgb2gray(RGB)subplot(222),imshow(gray)[X,map] = gray2ind(gray,8)subplot(223),imshow(X,map)
结果:
结论:变为索引值之后图像变得非常的不自然了,图中的显色有分块的现象,特别是在水中的那部分,这是为什么呢?将函数中索引值8增大,这个值越大发现图像之中的颜色表示就更加的自然(最后那幅图的索引值是64的)
索引值:图像颜色映射的个数,也表示图像的灰度级数
将索引图转化为真彩色的图代码:
12345678RGB ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/05/04/DASCTF2022-FATE/" title="DASCTF2022-FATE"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DASCTF2022-FATE"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/05/04/DASCTF2022-FATE/" title="DASCTF2022-FATE">DASCTF2022-FATE</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-05-04T09:44:12.000Z" title="发表于 2022-05-04 17:44:12">2022-05-04</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">CrackMeMFC的逆向分析CracckMe,写题的时候在网上搜到了逆向分析CrackMe 这篇文章,通过OD+IDA的方式定位到关键代码处,然后进行解密的操作。
知识点: MD5 Sha1 Hashcat Wincrpt
定位关键函数OD来定位关键代码和提取数据,因为这个程序有反调试,而OD之中有插件,能够很好的反反调试而提取相关的数据。
IDA能够很好的反编译相应的代码,搞清楚函数的逻辑。
搜索MessageBoxA,因为当输入flag和key之后,输入错误会弹出弹窗,而MessageBoxA 有可能是表示弹窗的函数位置
(Ctrl+G)跟踪表达式【TextA/W】 就找到引用这个函数的地址,看到这个地址之后,发现它的下方就是“Wrong!!!“字符串,就找到对应输出Wrong的这个函数的位置,
定位到输出wrong!!!的代码处
并且在它的下面就是输出successful的代码处
在ida之中能更加容易的分析代码,所以通过这两个输出wrong和Success的地址,在ida之中定位到这两个函数,并且通过他们向上就找(交叉引用的方法)到对输入的key和flag进行验证的函 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/04/25/starCTF2022-Simple-NaCl/" title="starCTF2022_Simple+NaCl"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="starCTF2022_Simple+NaCl"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/04/25/starCTF2022-Simple-NaCl/" title="starCTF2022_Simple+NaCl">starCTF2022_Simple+NaCl</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-25T12:10:56.000Z" title="发表于 2022-04-25 20:10:56">2022-04-25</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">Simple_File_System这道题当时卡在这里就是不知道存放的数据在哪里,结果后来发现就是在image.flag文件之中(被自己蠢哭了!!!!)
数据提取将程序运行一遍,将加密之后的文本的内容写入一个文件之中,再将这个文件放入010之中,提取前5个字节的内容,也就是 *CTF{ 加密之后的结果,然后再将image.flag文件放入ida之中,搜素这5个字节,将这段数据提取出来,这段数据就是flag加密之后的结果了,分析加密过程,逆得结果
解密过程分析代码就能找到对flag文件加密的关键代码
异或的对象 0xDEEDBEEF
解密脚本12345678910111213src = [0x00,0xD2,0xFC,0xD8,0xA2,0xDA,0xBA,0x9E,0x9C,0x26,0xF8,0xF6,0xB4,0xCE,0x3C,0xCC,0x96,0x88,0x98,0x34,0x82,0xDE,0x80,0x36,0x8A,0xD8,0xC0,0xF0,0x38,0xAE,0x40]for i in range(len(src)): src[i] = ((src[i] ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/04/21/DASCTF-Login/" title="DASCTF_Login"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DASCTF_Login"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/04/21/DASCTF-Login/" title="DASCTF_Login">DASCTF_Login</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-21T06:04:38.000Z" title="发表于 2022-04-21 14:04:38">2022-04-21</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">Login这道题里面给了两个文件,一个作为了客户端,一个作为服务器,两个程序之间相互传输数据,对登录的token、password以及verify这三个数进行了验证。
验证的主逻辑是在check程序之中,这里有三中加密(RSA、Hill、AES),这次的AES进行了魔改,解密的脚本不得不自己来码代码!!
两个程序的交互提供了两个文件,一个文佳时客户端界面,一个时服务器界面,要实现两个页面的交互
打开的是两个程序,一个程序作为的是客户端(login),一个作为的是服务器(check)
在这两个程序之中找到start函数,然后打开第一个参数,就是main函数
login程序:
和服务器进行一系列的交互
一个while循环向服务器发送和接受消息
其中的if语句会根据接受到的参数,来做出特定的反应
连接服务器:
客户端和服务器间的交互:
if语句发送数据:
客户端:
连接客户端:
进入main函数之中,和客户端进行交互,验证三个数据
rsa解密大素数:
113123058934861171416713230498081453101147538789122070079961388 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/04/15/HFCTF2022-theShellcode/" title="HFCTF2022_theShellcode"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="HFCTF2022_theShellcode"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/04/15/HFCTF2022-theShellcode/" title="HFCTF2022_theShellcode">HFCTF2022_theShellcode</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-15T14:35:25.000Z" title="发表于 2022-04-15 22:35:25">2022-04-15</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">the_shellcode用ida载入之后,显然这个地方被加壳了,这里是Themida壳
定位到OPE这是是使用插件直接反反调试
sharpOD安装sharpOD,设置其中的配置:主要时要勾上图中标注的那个选项(这个可以去程序中的反调试)
按f9就能够运行起程序,就能够运行起程序了
OPE定位并且下硬件断点按E打开可执行模块窗口
可执行模块窗口:(快捷键:Alt+E)列出了当前被调试进程加载的所有可执行模块。它也显示了很多有用的信息,比如模块大小、入口地址、模块版本、以及可执行文件路径等。
打开该模块我们看到时一堆乱码,在这里我们需要去掉模块分析(汇编窗口,右键 -> 分析 -> 从模块中删除分析)
通过查找程序执行时输出的字符串 “please input the shellcode:” 定位到程序的正真入口的地方
右键->Search for -> All referenced text strings
通过上面的字符串表我们就到达了程序的入口处了 push ebp的位置,我们就直接在这个地方下断点(方便之后直接定位到程序的入口)
这 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/04/13/starCTF/" title="starCTF2021"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="starCTF2021"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/04/13/starCTF/" title="starCTF2021">starCTF2021</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-13T01:20:26.000Z" title="发表于 2022-04-13 09:20:26">2022-04-13</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">StarCTF2021自己的程序分析能力还要加强啊!!!!chacha20的解密不知道问题出在哪里??? qemu-riscv64也没能配置好环境,调试不了程序,所以 Favourite Architecture flag0 只解了一半,希望有大佬能指导指导咋搞啊???
Stram这是一个rust编写的elf文件
程序流程分析找到main函数,进入第一个函数之中
读取输入数据打开flag文件,读取其中的数据
对输入的加密过程这里的加密过程调用了rustcrypto_api
init_chacha: 利用输入生成随机数种子
refill_wide:流密钥加密的过程
因为密钥的生成和输入显然是有关系的,这样的流密钥加密我们并不能够直接解密,所以使用爆破的方法
加密结果的输出加密的结果会被写入到一个名为output的文件之中
所以该程序的输入,我们可以通过写入flag文件输入;该程序输出的获取,我们可以通过读取ouput文件得知
python和程序的交互(subprocess模块)subprocess模块
subprocess.Popen 类:创建并返回一个子进程,并在这个进 ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/04/05/2022DASCTF-X-SU-StarGate/" title="2022DASCTF_X_SU_StarGate"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="2022DASCTF_X_SU_StarGate"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/04/05/2022DASCTF-X-SU-StarGate/" title="2022DASCTF_X_SU_StarGate">2022DASCTF_X_SU_StarGate</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-04-05T14:46:18.000Z" title="发表于 2022-04-05 22:46:18">2022-04-05</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">StarGate这道题因为自己各种基础知识不牢固的原因写了很久,细节上的知识需要自己不断地积累,也觉得自己写代码太烂了!!!太菜了!!!
使用nc连接靶机,返回得到文件的base64加密内容
提取出这个base64加密的内容,放入在线网站之中bse64解密,得到的是一个elf文件
将这个elf文件放入ida之中,通过字符串定位到关键的代码位置
分析流程(欧拉路径问题)题目之中给了提示 “寻找欧拉路径”
对于一个给定的图,怎样判断是否存在着一个恰好包含了所有的边,并且没有重复的路径?这就是一笔画问题。用图论的术语来说,就是判断这个图是否是一个能够遍历完所有的边而没有重复。这样的图现称为欧拉图。这时遍历的路径称作欧拉路径(一个环或者一条链),如果路径闭合(一个圈),则称为欧拉回路
通过catflag这个字符串定位到一个相关联的函数
if语句之中的判断条件是判断走过了所有的路径,每个变量参数代表的是某路径是否走过的标志位
查看字符串表,图中红色方框中的字符串就能够定位到一个函数之中,每个函数之中的逻辑都一样
字符串定位到的函数:每次输入一个字符串,相当于到达某一个对应的函数,跳 ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/03/29/%E9%99%87%E5%8E%9F%E6%88%98%E7%96%AB2021%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%A4%A7%E8%B5%9B/" title="陇原战疫2021网络安全大赛"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="陇原战疫2021网络安全大赛"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/03/29/%E9%99%87%E5%8E%9F%E6%88%98%E7%96%AB2021%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%A4%A7%E8%B5%9B/" title="陇原战疫2021网络安全大赛">陇原战疫2021网络安全大赛</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-03-29T05:20:37.000Z" title="发表于 2022-03-29 13:20:37">2022-03-29</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">陇原战”疫”2021网络安全大赛最后还加了一道周末打的DASCTF比赛的re题目
findmeRC4加密
定位加密函数在main函数之中是主逻辑
通过里面比较的函数定位到对应的位置,发现是引用了strcmp这个函数
可以看到这个函数可能被另外一个函数改动了,定位到这个函数,这一看到这个函数把strcmp指引到了另外一个函数
RC4算法S盒的生成
它的S盒是利用用户输入的密钥生成S盒
利用密钥流进行加密的操作
RC4加密的函数
S盒的生成S盒的生成的函数:sub_40164C((int)v9, (int)v7, v4);
对输入进行加密的函数:sub_401767((int)v8, (int)v6, v10);
所以将内存之中需要解密的数据dump出来
密文需要解密的对象是:
1[0xb7,0x52,0x85,0xc1,0x90,0xe9,0x07,0xb8,0xe4,0x1a,0xc3,0xbd,0x1d,0x8e,0x85,0x46,0x00,0x21,0x44,0xaf,0xef,0x70,0x32,0xb5,0x11,0xc6]
密钥密钥是引用该函数输入的参数: ...</div></div></div><div class="recent-post-item"><div class="post_cover left"><a href="/2022/03/20/DASCTF-Oct/" title="DASCTF_Oct"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DASCTF_Oct"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/03/20/DASCTF-Oct/" title="DASCTF_Oct">DASCTF_Oct</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-03-20T01:53:18.000Z" title="发表于 2022-03-20 09:53:18">2022-03-20</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%A4%8D%E7%8E%B0/">复现</a></span></div><div class="content">DASCTF_Oct_re这两道题中都有加密的知识点,第一道题的SM4的解密在最后一步仍然有问题,希望大佬能够指点指点(●’◡’●)
马猴烧酒知识点:
魔改SM4
魔改base64
用ida6将文件载入其中
定位到相应的代码的位置,这段代码开始的位置就有一段flag{this_is_fake_flag}的flag
密钥的生成第一个函数是获取时间戳,第二个函数是对时间戳base64的变表加密,第三个异或运算得到密钥
获取时间戳使用0x61624B82 演变得到一串数组
脚本:
12345678910111213141516key = 0x61624B82a13 = 0a14 = 0while key: a13 = key%10 key = key//10 a14 = 87 if a13<=9: a14 = 48 print(chr(a13+a14),end='') obj = '0181383361'for i in range(len(obj)): print(obj[l ...</div></div></div><div class="recent-post-item"><div class="post_cover right"><a href="/2022/03/17/frida-d3mug%E5%A4%8D%E7%8E%B0/" title="frida+d3mug复现"><img class="post_bg" src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="frida+d3mug复现"></a></div><div class="recent-post-info"><a class="article-title" href="/2022/03/17/frida-d3mug%E5%A4%8D%E7%8E%B0/" title="frida+d3mug复现">frida+d3mug复现</a><div class="article-meta-wrap"><span class="post-meta-date"><i class="far fa-calendar-alt"></i><span class="article-meta-label">发表于</span><time datetime="2022-03-17T04:21:15.000Z" title="发表于 2022-03-17 12:21:15">2022-03-17</time></span><span class="article-meta"><span class="article-meta-separator">|</span><i class="fas fa-inbox"></i><a class="article-meta__categories" href="/categories/%E5%AE%89%E5%8D%93%E9%80%86%E5%90%91/">安卓逆向</a></span></div><div class="content">FRIDA-API使用篇frida中有五种对象,分别是Java、Interceptor、NativePointer、NativeFunction、NativeCallback对象
这些都是在编写frida脚本的时候会用到的对象以及对应的函数。
frida知识更多的学习,可以查看这些文章
Java对象无论是想对so层亦或java层进行拦截,都必须编写Java.perform,java对象是很重要的
附加调用Java.performJava.perform(fn)主要用于当前线程附加到Java VM并且调用fn方法。该API是非常重要的
示例:
1234567891011121314151617unction frida_Java() { //运行当前js脚本时会对当前线程附加到Java VM虚拟机,并且执行function方法 Java.perform(function () { //判断是否Java VM正常运行 if(Java.available) { //如不意外会直接输出 h ...</div></div></div><nav id="pagination"><div class="pagination"><span class="page-number current">1</span><a class="page-number" href="/page/2/#content-inner">2</a><a class="extend next" rel="next" href="/page/2/#content-inner"><i class="fas fa-chevron-right fa-fw"></i></a></div></nav></div><div class="aside-content" id="aside-content"><div class="card-widget card-info"><div class="is-center"><div class="avatar-img"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/463b631c6a0f63ec.jpg" onerror="this.onerror=null;this.src='/img/friend_404.gif'" alt="avatar"></div><div class="author-info__name">Gruge</div><div class="author-info__description"></div></div><div class="card-info-data is-center"><div class="card-info-data-item"><a href="/archives/"><div class="headline">文章</div><div class="length-num">18</div></a></div><div class="card-info-data-item"><a href="/tags/"><div class="headline">标签</div><div class="length-num">42</div></a></div><div class="card-info-data-item"><a href="/categories/"><div class="headline">分类</div><div class="length-num">7</div></a></div></div><a id="card-info-btn" target="_blank" rel="noopener" href="https://github.com/xxxxxx"><i class="fab fa-github"></i><span>Follow Me</span></a></div><div class="card-widget card-announcement"><div class="item-headline"><i class="fas fa-bullhorn fa-shake"></i><span>公告</span></div><div class="announcement_content">This is my Blog</div></div><div class="sticky_layout"><div class="card-widget card-recent-post"><div class="item-headline"><i class="fas fa-history"></i><span>最新文章</span></div><div class="aside-list"><div class="aside-list-item"><a class="thumbnail" href="/2022/08/05/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%AE%9E%E9%AA%8C/" title="数字图像处理实验"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="数字图像处理实验"></a><div class="content"><a class="title" href="/2022/08/05/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%AE%9E%E9%AA%8C/" title="数字图像处理实验">数字图像处理实验</a><time datetime="2022-08-05T07:52:11.000Z" title="发表于 2022-08-05 15:52:11">2022-08-05</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/05/04/DASCTF2022-FATE/" title="DASCTF2022-FATE"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DASCTF2022-FATE"></a><div class="content"><a class="title" href="/2022/05/04/DASCTF2022-FATE/" title="DASCTF2022-FATE">DASCTF2022-FATE</a><time datetime="2022-05-04T09:44:12.000Z" title="发表于 2022-05-04 17:44:12">2022-05-04</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/04/25/starCTF2022-Simple-NaCl/" title="starCTF2022_Simple+NaCl"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="starCTF2022_Simple+NaCl"></a><div class="content"><a class="title" href="/2022/04/25/starCTF2022-Simple-NaCl/" title="starCTF2022_Simple+NaCl">starCTF2022_Simple+NaCl</a><time datetime="2022-04-25T12:10:56.000Z" title="发表于 2022-04-25 20:10:56">2022-04-25</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/04/21/DASCTF-Login/" title="DASCTF_Login"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="DASCTF_Login"></a><div class="content"><a class="title" href="/2022/04/21/DASCTF-Login/" title="DASCTF_Login">DASCTF_Login</a><time datetime="2022-04-21T06:04:38.000Z" title="发表于 2022-04-21 14:04:38">2022-04-21</time></div></div><div class="aside-list-item"><a class="thumbnail" href="/2022/04/15/HFCTF2022-theShellcode/" title="HFCTF2022_theShellcode"><img src= "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-lazy-src="https://s3.bmp.ovh/imgs/2022/02/ca6f47126f533a59.jpg" onerror="this.onerror=null;this.src='/img/404.jpg'" alt="HFCTF2022_theShellcode"></a><div class="content"><a class="title" href="/2022/04/15/HFCTF2022-theShellcode/" title="HFCTF2022_theShellcode">HFCTF2022_theShellcode</a><time datetime="2022-04-15T14:35:25.000Z" title="发表于 2022-04-15 22:35:25">2022-04-15</time></div></div></div></div><div class="card-widget card-categories"><div class="item-headline">
<i class="fas fa-folder-open"></i>
<span>分类</span>
</div>
<ul class="card-category-list" id="aside-cat-list">
<li class="card-category-list-item "><a class="card-category-list-link" href="/categories/re/"><span class="card-category-list-name">re</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%8A%A0%E5%AF%86%E8%A7%A3%E5%AF%86/"><span class="card-category-list-name">加密解密</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%A4%8D%E7%8E%B0/"><span class="card-category-list-name">复现</span><span class="card-category-list-count">10</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E5%AE%89%E5%8D%93%E9%80%86%E5%90%91/"><span class="card-category-list-name">安卓逆向</span><span class="card-category-list-count">2</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%9F%BA%E7%A1%80/"><span class="card-category-list-name">数字图像处理基础</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E6%B7%B7%E6%B7%86/"><span class="card-category-list-name">混淆</span><span class="card-category-list-count">1</span></a></li><li class="card-category-list-item "><a class="card-category-list-link" href="/categories/%E9%A2%98%E5%9E%8B/"><span class="card-category-list-name">题型</span><span class="card-category-list-count">1</span></a></li>
</ul></div><div class="card-widget card-tags"><div class="item-headline"><i class="fas fa-tags"></i><span>标签</span></div><div class="card-tag-cloud"><a href="/tags/AES/" style="font-size: 1.1em; color: #999">AES</a> <a href="/tags/AES%E8%A7%A3%E5%AF%86/" style="font-size: 1.1em; color: #999">AES解密</a> <a href="/tags/APK%E5%8A%A0%E5%9B%BA/" style="font-size: 1.1em; color: #999">APK加固</a> <a href="/tags/APK%E8%84%B1%E5%A3%B3-blackdex/" style="font-size: 1.1em; color: #999">APK脱壳(blackdex)</a> <a href="/tags/ARM/" style="font-size: 1.1em; color: #999">ARM</a> <a href="/tags/Ghidra%E5%8F%8D%E7%BC%96%E8%AF%91/" style="font-size: 1.1em; color: #999">Ghidra反编译</a> <a href="/tags/RC4/" style="font-size: 1.1em; color: #999">RC4</a> <a href="/tags/RSA/" style="font-size: 1.1em; color: #999">RSA</a> <a href="/tags/RSA%E4%BD%8E%E8%A7%A3%E5%AF%86%E6%8C%87%E6%95%B0%E6%94%BB%E5%87%BB/" style="font-size: 1.1em; color: #999">RSA低解密指数攻击</a> <a href="/tags/SHA1/" style="font-size: 1.1em; color: #999">SHA1</a> <a href="/tags/SM4%E8%A7%A3%E5%AF%86/" style="font-size: 1.1em; color: #999">SM4解密</a> <a href="/tags/TEA/" style="font-size: 1.1em; color: #999">TEA</a> <a href="/tags/Themida%E8%84%B1%E5%A3%B3/" style="font-size: 1.1em; color: #999">Themida脱壳</a> <a href="/tags/Wincrpt%E8%A7%A3%E5%AF%86AES/" style="font-size: 1.1em; color: #999">Wincrpt解密AES</a> <a href="/tags/base91%E8%A7%A3%E5%AF%86/" style="font-size: 1.1em; color: #999">base91解密</a> <a href="/tags/binToHex/" style="font-size: 1.1em; color: #999">binToHex</a> <a href="/tags/chacha20/" style="font-size: 1.1em; color: #999">chacha20</a> <a href="/tags/frida/" style="font-size: 1.1em; color: #999">frida</a> <a href="/tags/hill%E8%A7%A3%E5%AF%86/" style="font-size: 1.1em; color: #999">hill解密</a> <a href="/tags/idaPython/" style="font-size: 1.1em; color: #999">idaPython</a> <a href="/tags/idapython/" style="font-size: 1.1em; color: #999">idapython</a> <a href="/tags/md5/" style="font-size: 1.1em; color: #999">md5</a> <a href="/tags/pyc%E6%96%87%E4%BB%B6%E5%8F%8D%E7%BC%96%E8%AF%91-pycdc%E5%B7%A5%E5%85%B7/" style="font-size: 1.1em; color: #999">pyc文件反编译(pycdc工具)</a> <a href="/tags/pyc%E6%96%87%E4%BB%B6%E8%A7%A3%E5%8C%85-pyinstxtractor/" style="font-size: 1.1em; color: #999">pyc文件解包(pyinstxtractor)</a> <a href="/tags/pyz%E6%96%87%E4%BB%B6%E8%A7%A3%E5%AF%86/" style="font-size: 1.1em; color: #999">pyz文件解密</a> <a href="/tags/qemu-riscv64/" style="font-size: 1.1em; color: #999">qemu-riscv64</a> <a href="/tags/sharpOD%E5%8F%8D%E8%B0%83%E8%AF%95/" style="font-size: 1.1em; color: #999">sharpOD反调试</a> <a href="/tags/so%E6%96%87%E4%BB%B6/" style="font-size: 1.1em; color: #999">so文件</a> <a href="/tags/subprocess%E6%A8%A1%E5%9D%97/" style="font-size: 1.1em; color: #999">subprocess模块</a> <a href="/tags/susctf/" style="font-size: 1.1em; color: #999">susctf</a> <a href="/tags/wasm/" style="font-size: 1.1em; color: #999">wasm</a> <a href="/tags/xtea/" style="font-size: 1.1em; color: #999">xtea</a> <a href="/tags/%E4%BF%AE%E5%A4%8DIAT%E8%A1%A8-Scylla/" style="font-size: 1.1em; color: #999">修复IAT表(Scylla)</a> <a href="/tags/%E5%A4%8D%E7%8E%B0/" style="font-size: 1.5em; color: #99a9bf">复现</a> <a href="/tags/%E6%95%B0%E5%AD%97%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%E5%9F%BA%E7%A1%80%E5%AE%9E%E9%AA%8C/" style="font-size: 1.1em; color: #999">数字图像处理基础实验</a> <a href="/tags/%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F/" style="font-size: 1.1em; color: #999">文件系统</a> <a href="/tags/%E6%A0%88%E6%BA%A2%E5%87%BA/" style="font-size: 1.1em; color: #999">栈溢出</a> <a href="/tags/%E6%AC%A7%E6%8B%89%E8%B7%AF%E5%BE%84/" style="font-size: 1.1em; color: #999">欧拉路径</a> <a href="/tags/%E7%AD%BE%E5%90%8D%E6%96%87%E4%BB%B6/" style="font-size: 1.1em; color: #999">签名文件</a> <a href="/tags/%E7%BA%BF%E6%80%A7%E6%96%B9%E7%A8%8B%E6%B1%82%E8%A7%A3/" style="font-size: 1.1em; color: #999">线性方程求解</a></div></div><div class="card-widget card-archives"><div class="item-headline"><i class="fas fa-archive"></i><span>归档</span></div><ul class="card-archive-list"><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/08/"><span class="card-archive-list-date">八月 2022</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/05/"><span class="card-archive-list-date">五月 2022</span><span class="card-archive-list-count">1</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/04/"><span class="card-archive-list-date">四月 2022</span><span class="card-archive-list-count">5</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/03/"><span class="card-archive-list-date">三月 2022</span><span class="card-archive-list-count">8</span></a></li><li class="card-archive-list-item"><a class="card-archive-list-link" href="/archives/2022/02/"><span class="card-archive-list-date">二月 2022</span><span class="card-archive-list-count">3</span></a></li></ul></div><div class="card-widget card-webinfo"><div class="item-headline"><i class="fas fa-chart-line"></i><span>网站资讯</span></div><div class="webinfo"><div class="webinfo-item"><div class="item-name">文章数目 :</div><div class="item-count">18</div></div><div class="webinfo-item"><div class="item-name">本站访客数 :</div><div class="item-count" id="busuanzi_value_site_uv"></div></div><div class="webinfo-item"><div class="item-name">本站总访问量 :</div><div class="item-count" id="busuanzi_value_site_pv"></div></div><div class="webinfo-item"><div class="item-name">最后更新时间 :</div><div class="item-count" id="last-push-date" data-lastpushdate="2022-08-05T08:10:31.400Z"></div></div></div></div></div></div></main><footer id="footer" style="background: transparent"><div id="footer-wrap"><div class="copyright">©2022 By Gruge</div><div class="framework-info"><span>框架 </span><a target="_blank" rel="noopener" href="https://hexo.io">Hexo</a><span class="footer-separator">|</span><span>主题 </span><a target="_blank" rel="noopener" href="https://github.com/jerryc127/hexo-theme-butterfly">Butterfly</a></div></div></footer></div><div id="rightside"><div id="rightside-config-hide"><button id="darkmode" type="button" title="浅色和深色模式转换"><i class="fas fa-adjust"></i></button><button id="hide-aside-btn" type="button" title="单栏和双栏切换"><i class="fas fa-arrows-alt-h"></i></button></div><div id="rightside-config-show"><button id="rightside_config" type="button" title="设置"><i class="fas fa-cog fa-spin"></i></button><button id="go-up" type="button" title="回到顶部"><i class="fas fa-arrow-up"></i></button></div></div><div id="local-search"><div class="search-dialog"><nav class="search-nav"><span class="search-dialog-title">本地搜索</span><span id="loading-status"></span><button class="search-close-button"><i class="fas fa-times"></i></button></nav><div class="is-center" id="loading-database"><i class="fas fa-spinner fa-pulse"></i><span> 数据库加载中</span></div><div class="search-wrap"><div id="local-search-input"><div class="local-search-box"><input class="local-search-box--input" placeholder="搜索文章" type="text"></div></div><hr><div id="local-search-results"></div></div></div><div id="search-mask"></div></div><div><script src="/js/utils.js"></script><script src="/js/main.js"></script><script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui/dist/fancybox.umd.js"></script><script src="https://cdn.jsdelivr.net/npm/vanilla-lazyload/dist/lazyload.iife.min.js"></script><script src="https://cdn.jsdelivr.net/npm/node-snackbar/dist/snackbar.min.js"></script><script src="/js/search/local-search.js"></script><script>var preloader = {
endLoading: () => {
document.body.style.overflow = 'auto';
document.getElementById('loading-box').classList.add("loaded")
},
initLoading: () => {
document.body.style.overflow = '';
document.getElementById('loading-box').classList.remove("loaded")
}
}
window.addEventListener('load',preloader.endLoading())</script><div class="js-pjax"><script>function subtitleType () {
if (true) {
window.typed = new Typed("#subtitle", {
strings: ["今日事,今日毕","Nevre put off till tomorrow what you can do today"],
startDelay: 300,
typeSpeed: 150,
loop: true,
backSpeed: 50
})
} else {
document.getElementById("subtitle").innerHTML = '今日事,今日毕'
}
}
if (true) {
if (typeof Typed === 'function') {
subtitleType()
} else {
getScript('https://cdn.jsdelivr.net/npm/typed.js/lib/typed.min.js').then(subtitleType)
}
} else {
subtitleType()
}</script></div><script id="canvas_nest" defer="defer" color="0,0,255" opacity="0.7" zindex="-1" count="99" mobile="false" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/canvas-nest.min.js"></script><script id="click-heart" src="https://cdn.jsdelivr.net/npm/butterfly-extsrc@1/dist/click-heart.min.js" async="async" mobile="false"></script><script async="" data-pjax="" src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script></div></body></html>