-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsearch.xml
5325 lines (5095 loc) · 609 KB
/
search.xml
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
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>802.11 协议分析</title>
<url>/2018/05/11/80211/</url>
<content><![CDATA[]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>计算机网络</tag>
</tags>
</entry>
<entry>
<title>关于 PowerShell</title>
<url>/2018/07/16/about-powershell/</url>
<content><![CDATA[<p>PowerShell 是微软用来取代 CMD 的一个强大的 Shell。</p>
<h2 id="版本"><a href="#版本" class="headerlink" title="版本"></a>版本</h2><p>在不同版本的 Windows 中已经内置了不同版本的 PowerShell,常见情况如下:</p>
<ul>
<li>Windows XP SP2 / Server 2003 SP1:PowerShell 1.0</li>
<li>Windows 7 / Server 2008:PowerShell 2.0,此版本包含了 PowerShell ISE,即 Integrated Scripting Environment(集成的脚本环境),更方便的编写 PowerShell 脚本。</li>
<li>Windows 8 / Server 2012:PowerShell 3.0,从此版本开始,PowerShell 被集成进了 WMF 中,即 Windows Management Framework(Windows 管理框架)。</li>
<li>Windows 8.1 / Server 2012 R2:PowerShell 4.0</li>
<li>Windows 10:PowerShell 5.0,此版本的 WMF 包含了 PowerShellGet,可用于在线下载、安装模块。</li>
</ul>
<span id="more"></span>
<h2 id="优势及劣势"><a href="#优势及劣势" class="headerlink" title="优势及劣势"></a>优势及劣势</h2><p>PowerShell 相较于 CMD 的优势是不言而喻的,相较于 Unix 中的 Shell,它的优势主要体现在两方面:面向对象特性以及与 .NET 的深度结合。</p>
<p>劣势当然也有,相较于 CMD,至今为止它的启动速度仍然较慢,相较于 Unix 中的 Shell,它的生态环境还欠火候,可以期待未来有更多的人关注到 PowerShell。</p>
<h2 id="Cmdlets-与-pipeline"><a href="#Cmdlets-与-pipeline" class="headerlink" title="Cmdlets 与 pipeline"></a>Cmdlets 与 pipeline</h2><p>Cmdlets 与 pipeline 是 PowerShell 中的两个核心概念,</p>
<h2 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h2><p>PowerShell 中的大多数常用命令都有对应于 Linux 中相关命令的别名,比如 <code>ls</code>、<code>mv</code>、<code>ps</code>、<code>cat</code>、<code>kill</code>、<code>wget</code>、<code>clear</code> 等,下面介绍的命令为 PowerShell 所不同于 Linux 中的命令。</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 查看PowerShell版本信息</span></span><br><span class="line">Get-Host</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看帮助信息</span></span><br><span class="line"><span class="built_in">help</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看所有已经设置的别名</span></span><br><span class="line">Get-Alias</span><br><span class="line"></span><br><span class="line"><span class="comment"># 从powershellgallery.com下载安装第三方模块</span></span><br><span class="line">Install-Module</span><br><span class="line"></span><br><span class="line"><span class="comment"># 导入模块,安装的模块需要先导入才能使用</span></span><br><span class="line">Import-Module</span><br><span class="line"></span><br><span class="line"><span class="comment"># 卸载模块</span></span><br><span class="line">Uninstall-Module</span><br><span class="line"></span><br><span class="line"><span class="comment"># 更新模块</span></span><br><span class="line">Update-Module</span><br><span class="line"></span><br><span class="line"><span class="comment"># 列出已安装模块</span></span><br><span class="line">Get-InstalledModule</span><br><span class="line"></span><br><span class="line"><span class="comment"># 查看PowerShellGet模块有哪些命令</span></span><br><span class="line">Get-Command -Module PowerShellGet</span><br><span class="line"></span><br><span class="line"><span class="comment"># 升级帮助手册</span></span><br><span class="line">Update-Help</span><br></pre></td></tr></table></figure>
<h2 id="常用模块"><a href="#常用模块" class="headerlink" title="常用模块"></a>常用模块</h2><ul>
<li><a href="https://github.com/dahlbyk/posh-git">posh-git</a>:PowerShell 中的 Git 增强模块</li>
<li><a href="https://github.com/matt9ucci/DockerCompletion">DockerCompletion</a>:PowerShell 中的 Docker 命令补全</li>
<li><a href="https://github.com/webmd-health-services/Carbon">Carbon</a>:一系列有用的工具集</li>
<li><a href="https://github.com/lzybkr/PSReadLine">PSReadline</a>:一个增强的命令行编辑模块</li>
<li><a href="https://github.com/JulianChow94/Windows-screenFetch">windows-screenfetch</a>:Windows 下的 screenfetch 模块</li>
</ul>
<h2 id="Microsoft-PowerShell-profile-ps1"><a href="#Microsoft-PowerShell-profile-ps1" class="headerlink" title="Microsoft.PowerShell_profile.ps1"></a>Microsoft.PowerShell_profile.ps1</h2><p>和一般的 Linux 中的 Shell 一样,PowerShell 也有一个配置文件,即 <code>Microsoft.PowerShell_profile.ps1</code>,当 PowerShell 运行时会默认加载此配置文件中的设置。一般而言,用户级别的配置文件位于 <code>%HOMEPATH%\Documents\WindowsPowerShell</code> 下,当然,你也可以使用 <code>echo $profile</code>命令查看具体的位置。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Windows</tag>
</tags>
</entry>
<entry>
<title>关于代理那些事</title>
<url>/2018/07/26/about-proxy/</url>
<content><![CDATA[<h2 id="正向连接与反向连接"><a href="#正向连接与反向连接" class="headerlink" title="正向连接与反向连接"></a>正向连接与反向连接</h2><p><strong>正向连接</strong>即黑客主动连接受害者,这种情况下要求受害者有公网IP,常用于对服务器的渗透;<strong>反向连接</strong>即受害者主动连接黑客,这种情况下要求黑客有公网IP,常用于对个人的渗透。</p>
<h2 id="正向代理与反向代理"><a href="#正向代理与反向代理" class="headerlink" title="正向代理与反向代理"></a>正向代理与反向代理</h2><p>在英语中,<strong>Proxy</strong>表示<strong>服务器代理</strong>这种动作,而<strong>Agent</strong>表示<strong>代理服务器</strong>这种物质,显然,我们这里讨论的是Proxy这种动作,而非代理服务器本身。<br>不论正向还是反向,代理都是基于这样一个事实:即A与B的通信要经过C的转发,这里的C就是Agent,为了方便讨论,我们将A视为客户端,将B视为服务器端。<br><strong>正向代理</strong>(Forward Proxy):也就是常说的代理,代理服务器偏向于客户端,服务器端只能得到代理服务器的IP地址,隐藏了客户端的IP地址。常用于科学上网工具。<br><strong>反向代理</strong>(Reverse Proxy):代理服务器偏向于服务器端,客户端只能得到代理服务器的IP地址,隐藏了服务器端的IP地址。常用于网站镜像等。</p>
<span id="more"></span>
<h2 id="端口转发与端口映射"><a href="#端口转发与端口映射" class="headerlink" title="端口转发与端口映射"></a>端口转发与端口映射</h2><p>传统意义上,我们认为<strong>端口转发</strong>(Port Forwarding)与<strong>端口映射</strong>(Port Mapping)表达同样的内容。顾名思义,端口转发指的是将某个IP的某个端口转发到另一个IP的另一个端口,这样,可以通过访问后者以达到访问前者的目的。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>渗透</tag>
</tags>
</entry>
<entry>
<title>关于 Windows 的代理设置</title>
<url>/2019/07/29/about-the-proxy-settings-for-windows/</url>
<content><![CDATA[<p>Windows 的<strong>系统代理</strong>使用的其实是 <strong>IE 的代理设置</strong>,此外,对于<strong>绝大多数</strong>的应用程序而言,它们默认使用的也是 IE 的代理设置,比如,Chrome、Firefox、Microsoft Store 等。因此,如果想让绝大多数的应用程序使用代理,一个简单的方法是直接设置 IE 的代理(即系统代理)。不过,对于一小部分没有使用 IE 代理设置的应用程序,比如 Android Studio 等,你可能需要单独设置它们的代理(一般在软件的设置项中)。</p>
<p>值得注意的是,同为应用程序的 <strong>Shell</strong>(包括<strong>命令提示符</strong>和 <strong>PowerShell</strong>)就没有使用 IE 的代理设置,它们各自有自己的代理设置。具体而言,要为命令提示符设置代理,可使用如下两条命令:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">set</span> HTTP_PROXY=http://user:[email protected]:port</span><br><span class="line"><span class="built_in">set</span> HTTPS_PROXY=https://user:[email protected]:port</span><br></pre></td></tr></table></figure>
<p>而要为 PowerShell 设置代理则要使用<a href="todo">这个脚本</a>。</p>
<p>对于 Shell 中运行的程序,有一部分使用的是 IE 的代理设置,比如 <code>pip</code>、<code>npm</code> 等,另一部分则使用的是 Shell 的代理设置,比如 <code>curl</code>、<code>gem</code> 等。</p>
<p>此外,有一些程序的代理设置相对比较复杂,比如 <a href="/2018/08/31/git/" title="Git小记">git</a>、<a href="/2018/08/31/docker/" title="Docker 入坑指南">docker</a> 等,详见它们各自的介绍文章。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Windows</tag>
</tags>
</entry>
<entry>
<title>ADB小记</title>
<url>/2019/07/29/adb/</url>
<content><![CDATA[<h2 id="相关问题"><a href="#相关问题" class="headerlink" title="相关问题"></a>相关问题</h2><h3 id="error-device-still-connecting"><a href="#error-device-still-connecting" class="headerlink" title="error: device still connecting"></a>error: device still connecting</h3><p>输入<code>adb shell</code>时显示<code>error: device still connecting</code>,一般可通过:关闭<strong>开发者模式</strong>然后重新打开<strong>开发者模式</strong>,接着开启<strong>USB调试</strong>并重新和电脑配对,即可解决。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Android</tag>
</tags>
</entry>
<entry>
<title>高级搜索技巧</title>
<url>/2018/11/20/advanced-search-tips/</url>
<content><![CDATA[]]></content>
<categories>
<category>CheatSheet</category>
</categories>
</entry>
<entry>
<title>安装 Kali Linux 后要做的 10 件事</title>
<url>/2019/02/25/after-kali/</url>
<content><![CDATA[<p>本文翻译自 <a href="https://null-byte.wonderhowto.com/how-to/top-10-things-do-after-installing-kali-linux-0186450/">https://null-byte.wonderhowto.com/how-to/top-10-things-do-after-installing-kali-linux-0186450/</a> ,正文如下:</p>
<p>默认情况下,对于完成日常的渗透测试,<a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-getting-started-with-kali-your-new-hacking-system-0151631/">Kali Linux</a> 可能没有你所需的一切。但通过一些提示,技巧和应用程序,我们可以像专业的白帽子一样快速开始使用 Kali。</p>
<p>大多数 Linux 发行版都是高度可定制的。这使得个性化你的渗透测试发行版有点令人生畏。只需几个命令,我们就可以自动执行任务,安装我们喜欢的软件,创建其他用户帐户,正确配置匿名软件,以及优化我们与终端的互动。我们可以采取一些措施来改善与操作系统的交互。</p>
<span id="more"></span>
<div class="video-container"><iframe src="https://www.youtube.com/embed/8VL0K0rFgxw" frameborder="0" loading="lazy" allowfullscreen></iframe></div>
<h2 id="1、安装-Git"><a href="#1、安装-Git" class="headerlink" title="1、安装 Git"></a>1、安装 Git</h2><p><a href="https://git-scm.com/">Git</a> 是一个开源软件版本控制应用程序。它可以用于协作共享和编辑代码,但在 Null Byte 中通常被引用作为复制(或“<a href="https://www.git-scm.com/docs/git-clone">克隆</a>”)GitHub 上的代码存储库的主要工具。Git 是渗透测试人员必备的工具,他们希望将自己的工具集扩展到默认 Kali 存储库中可用的工具集之外。</p>
<p>可以使用下面的 <a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-linux-basics-for-aspiring-hacker-part-5-installing-new-software-0147591/">apt-get</a> 命令安装 Git。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-get install git</span><br></pre></td></tr></table></figure>
<h2 id="2、配置-Bash-别名"><a href="#2、配置-Bash-别名" class="headerlink" title="2、配置 Bash 别名"></a>2、配置 Bash 别名</h2><p>Bash 别名非常适合创建自定义命令行快捷方式。例如,我们可以重新分配 <a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-linux-basics-for-aspiring-hacker-part-2-creating-directories-files-0147234/">ls</a> 命令以自动使用我们最喜欢的参数。下面是正常 <strong>ls</strong> 输出的示例。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">ls</span></span><br><span class="line"></span><br><span class="line"> androidbins.txt folder-pictures.png smtp.cracked text-x-generic.png</span><br><span class="line"> bogus_gmail.creds folder.png smtp.list Windows-10</span><br><span class="line"> dumpzilla-b3075d1960874ce82ea76a5be9f58602afb61c39 package-x-generic.png text-x-generic.ico <span class="string">'Windows 10 Icons'</span></span><br></pre></td></tr></table></figure>
<p>在创建 <strong>ls</strong> 别名后再次输出的示例。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">ls</span></span><br><span class="line"></span><br><span class="line">total 220K</span><br><span class="line">-rw------- 1 root root 15K Aug 24 2015 folder-pictures.png</span><br><span class="line">-rw------- 1 root root 8.7K Aug 24 2015 folder.png</span><br><span class="line">-rw------- 1 root root 11K Aug 24 2015 package-x-generic.png</span><br><span class="line">-rw------- 1 root root 5.5K Sep 3 2015 text-x-generic.png</span><br><span class="line">drwxr-xr-x 12 root root 4.0K May 31 00:44 <span class="string">'Windows 10 Icons'</span>/</span><br><span class="line">drwxr-xr-x 18 root root 4.0K May 31 00:44 Windows-10/</span><br><span class="line">-rwxr-x--- 1 root root 103K May 31 00:49 text-x-generic.ico*</span><br><span class="line">drwxr-xr-x 5 root root 4.0K Jun 11 21:57 dumpzilla-b3075d1960874ce82ea76a5be9f58602afb61c39/</span><br><span class="line">-rw-r--r-- 1 root root 52 Jul 5 18:13 bogus_gmail.creds</span><br><span class="line">-rw-r--r-- 1 root root 15K Jul 5 18:28 smtp.list</span><br><span class="line">-rw-r--r-- 1 root root 181 Jul 5 18:43 smtp.cracked</span><br><span class="line">-rw-r--r-- 1 root root 23K Jul 23 18:18 androidbins.txt</span><br><span class="line">drwxr-xr-x 5 root root 4.0K Jul 23 19:22 ./</span><br><span class="line">drwxr-xr-x 23 root root 4.0K Aug 9 04:25 ../</span><br></pre></td></tr></table></figure>
<p>我们得到了更详细的输出。<strong>ls</strong> 命令现在自动使用 <strong>-l</strong>,**-a<strong>,</strong>-t<strong>,</strong>-h** 和 <strong>-r</strong> 参数。所有这些参数都将指示 <strong>ls</strong> 使用列表(**-l<strong>)格式,列出所有(</strong>-a<strong>)文件 —— 包括隐藏文件 —— 并以人类可读(</strong>-h**)的格式打印文件大小(例如,1K,234M,5G)。</p>
<p>我的别名还将按修改时间(**-t<strong>)对输出进行排序,并反转(</strong>-r**)列表的顺序,以便最近修改的文件出现在终端的底部。这个参数集合是我个人的 <strong>ls</strong> 偏好,但你的可能会有所不同。</p>
<p>要创建别名,请使用 <strong>nano</strong> 或你喜欢的文本编辑器打开 <code>/root/.bash_aliases</code>。添加以下行以创建别名。</p>
<ul>
<li>不要错过:<a href="https://null-byte.wonderhowto.com/how-to/intro-vim-unix-text-editor-every-hacker-should-be-familiar-with-0174674/">Vim 简介,每个黑客都应该知道的 Unix 文本编辑器</a></li>
</ul>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">alias</span> <span class="built_in">ls</span>=<span class="string">'ls --color=always -rthla'</span></span><br></pre></td></tr></table></figure>
<p>我们还可以进一步向 <code>.bash_aliases</code> 文件添加更复杂的函数。下面是一个简单的函数示例,旨在使 Kali 保持最新状态。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="keyword">function</span> apt-updater {</span><br><span class="line"> apt-get update &&</span><br><span class="line"> apt-get dist-upgrade -Vy &&</span><br><span class="line"> apt-get autoremove -y &&</span><br><span class="line"> apt-get autoclean &&</span><br><span class="line"> apt-get clean &&</span><br><span class="line"> reboot</span><br><span class="line"> }</span><br></pre></td></tr></table></figure>
<p>保存对 <code>.bash_aliases</code> 文件所做的更改后,打开一个新终端以使更改生效。运行新创建的 <strong>apt-updater</strong> 函数将调用一系列 <strong>apt-get</strong> 命令,这些命令将自动更新和维护你的系统。如果先前的命令失败,& 符号(**&&**)确保该函数不会继续执行以下命令。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-updater</span><br></pre></td></tr></table></figure>
<p>有关 Bash 别名的更多信息,请查看 Kody 的“<a href="https://null-byte.wonderhowto.com/how-to/mac-for-hackers-set-up-macos-system-for-wi-fi-packet-capturing-0186354/">为 Wi-Fi 数据包捕获设置 MacOS 系统</a>”一文。</p>
<h2 id="3、创建一个新的低权限用户"><a href="#3、创建一个新的低权限用户" class="headerlink" title="3、创建一个新的低权限用户"></a>3、创建一个新的低权限用户</h2><p>许多应用程序(如 Chromium 浏览器和 Tor 浏览器)都不应该以 root 用户身份打开或使用。此类应用程序在很大程度上依赖于低级别权限来提供某种程度的安全性。某些用户为这些活动创建低特权用户帐户可能是有益的。</p>
<p>Takhion 的“<a href="https://null-byte.wonderhowto.com/how-to/install-lock-down-kali-linux-for-safe-desktop-use-0184531/#jump-step2">锁定 Kali Linux 以用于安全桌面使用</a>”一文中详细介绍了这一概念,因此请务必查看帮助。</p>
<h2 id="4、安装一个终端复用器"><a href="#4、安装一个终端复用器" class="headerlink" title="4、安装一个终端复用器"></a>4、安装一个终端复用器</h2><p>复用器是一种平铺终端仿真器,允许我们在一个窗口内打开多个终端会话。这样做的主要好处是能够立即看到我们所有打开的终端会话,而不是将窗口叠加在一起。以下是复用器示例。</p>
<p><img src="https://img.wonderhowto.com/img/10/19/63669458451029/0/top-10-things-do-after-installing-kali-linux.w1456.jpg" alt="复用器"></p>
<p>有许多值得注意的复用器。如上面的屏幕截图所示,<a href="https://github.com/gnunn1/tilix">Tilix</a> 是一个开源且可靠的选项。替代方案包括 <a href="https://github.com/tmux/tmux/">tmux</a> 和 <a href="https://savannah.gnu.org/projects/screen">screen</a>。</p>
<p>Tilix 可在 Kali 的 APT 存储库中使用,可以使用以下命令进行安装。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-get install tilix</span><br><span class="line"></span><br><span class="line">Reading package lists... Done</span><br><span class="line">Building dependency tree</span><br><span class="line">Reading state information... Done</span><br><span class="line">The following additional packages will be installed:</span><br><span class="line"> libgtkd-3-0 libphobos2-ldc-shared78 libvted-3-0 tilix-common</span><br><span class="line">Suggested packages:</span><br><span class="line"> python-nautilus</span><br><span class="line">The following NEW packages will be installed:</span><br><span class="line"> libgtkd-3-0 libphobos2-ldc-shared78 libvted-3-0 tilix tilix-common</span><br><span class="line">0 upgraded, 5 newly installed, 0 to remove and 466 not upgraded.</span><br><span class="line">Need to get 10.7 MB of archives.</span><br><span class="line">After this operation, 49.1 MB of additional disk space will be used.</span><br><span class="line">Do you want to <span class="built_in">continue</span>? [Y/n] y</span><br></pre></td></tr></table></figure>
<p>亚马逊推荐:<a href="https://www.amazon.cn/dp/B00BQTWC0U">William E. Shotts Jr. 撰写的“Linux命令行大全”</a></p>
<h2 id="5、安装你喜爱的黑客工具"><a href="#5、安装你喜爱的黑客工具" class="headerlink" title="5、安装你喜爱的黑客工具"></a>5、安装你喜爱的黑客工具</h2><p>某些版本的 Kali 面向极简主义的渗透测试者,他们不希望预先安装数百个黑客工具。这意味着我们必须手动安装我们喜欢的工具。我们使用的工具类型根据我们的技能和专业领域而有所不同,但以下是一些流行的黑客工具。</p>
<ul>
<li><a href="https://www.aircrack-ng.org/">Aircrack-ng</a>:无线 <a href="https://null-byte.wonderhowto.com/how-to/hack-wi-fi-getting-started-with-aircrack-ng-suite-wi-fi-hacking-tools-0147893/">WEP/WPA 破解实用程序</a>。</li>
<li><a href="https://beefproject.com/">BeEF</a>:通过 Web 应用程序的浏览器<a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-hack-web-browsers-with-beef-0159961/">漏洞利用框架</a>。</li>
<li><a href="https://portswigger.net/burp/">Burp Suite</a>:专为 <a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-hack-web-apps-part-4-hacking-form-authentication-with-burp-suite-0163642/">Web 应用程序安全性</a>而设计的图形应用。</li>
<li><a href="https://github.com/vanhauser-thc/thc-hydra">Hydra</a>:登录<a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-crack-online-web-form-passwords-with-thc-hydra-burp-suite-0160643/">密码暴力破解</a>实用程序。</li>
<li><a href="https://cirt.net/Nikto2">Nikto</a>:Web <a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-find-vulnerabilities-for-any-website-using-nikto-0151729/">服务器安全扫描器</a>。</li>
<li><a href="https://www.paterva.com/web7/">Maltego</a>:开源取证和情报收集。</li>
<li><a href="https://nmap.org/">Nmap</a>:端口扫描器和<a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-advanced-nmap-for-reconnaissance-0151619/">网络映射器</a>。</li>
<li><a href="https://www.wireshark.org/download.html">Wireshark</a>:用于<a href="https://null-byte.wonderhowto.com/news/8-wireshark-filters-every-wiretapper-uses-spy-web-conversations-and-surfing-habits-0134508/">网络流量分析</a>的图形应用程序。</li>
</ul>
<p>可以使用以下命令安装这些工具。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-get install maltego metasploit-framework burpsuite wireshark aircrack-ng hydra nmap beef-xss nikto</span><br><span class="line"></span><br><span class="line">Reading package lists... Done</span><br><span class="line">Building dependency tree</span><br><span class="line">Reading state information... Done</span><br><span class="line">hydra is already the newest version (8.6-1kali1).</span><br><span class="line"></span><br><span class="line">The following NEW packages will be installed:</span><br><span class="line"> beef-xss binfmt-support burpsuite fastjar fonts-droid-fallback fonts-lato</span><br><span class="line"> fonts-noto-mono ghostscript gsfonts imagemagick imagemagick-6-common</span><br><span class="line"> imagemagick-6.q16 jarwrapper java-wrappers javascript-common libc-ares2</span><br><span class="line"> libcupsfilters1 libcupsimage2 libdjvulibre-text libdjvulibre21 libdouble-conversion1</span><br><span class="line"> libfftw3-double3 libgmp-dev libgmpxx4ldbl libgs9 libgs9-common libhttp-parser2.8</span><br><span class="line"> libijs-0.35 libilmbase23 libjbig2dec0 libjs-jquery libjs-jquery-easing</span><br><span class="line"> libjs-jquery-fancybox libjs-jquery-mousewheel libjs-jquery-ui libjs-source-map</span><br><span class="line"> libjs-uglify libjxr-tools libjxr0 liblqr-1-0 liblua5.2-0 libmagickcore-6.q16-6</span><br><span class="line"> libmagickcore-6.q16-6-extra libmagickwand-6.q16-6 libnetpbm10 libnl-route-3-200</span><br><span class="line"> libopenexr23 libpaper-utils libpaper1 libpcre2-16-0 libqt5core5a libqt5dbus5</span><br><span class="line"> libqt5gui5 libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediagsttools5</span><br><span class="line"> libqt5multimediawidgets5 libqt5network5 libqt5opengl5 libqt5printsupport5 libqt5svg5</span><br><span class="line"> libqt5widgets5 libruby2.5 libsbc1 libsmi2ldbl libspandsp2 libssh-gcrypt-4 libuv1</span><br><span class="line"> libwhisker2-perl libwireshark-data libwireshark11 libwiretap8 libwmf0.2-7</span><br><span class="line"> libwscodecs2 libwsutil9 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0</span><br><span class="line"> libxcb-render-util0 libxcb-xinerama0 libxcb-xkb1 libxkbcommon-x11-0 libyaml-0-2</span><br><span class="line"> maltego netpbm nikto nodejs nodejs-doc openjdk-8-jre openjdk-8-jre-headless</span><br><span class="line"> qt5-gtk-platformtheme qttranslations5-l10n rake ruby ruby-addressable ruby-ansi</span><br><span class="line"> ruby-atomic ruby-buftok ruby-celluloid ruby-celluloid-io ruby-daemons</span><br><span class="line"> ruby-dataobjects ruby-dataobjects-mysql ruby-dataobjects-postgres</span><br><span class="line"> ruby-dataobjects-sqlite3 ruby-dev ruby-did-you-mean ruby-diff-lcs ruby-dm-core</span><br><span class="line"> ruby-dm-do-adapter ruby-dm-migrations ruby-dm-serializer ruby-dm-sqlite-adapter</span><br><span class="line"> ruby-docile ruby-domain-name ruby-em-websocket ruby-equalizer ruby-erubis</span><br><span class="line"> ruby-eventmachine ruby-execjs ruby-faraday ruby-geoip ruby-hitimes ruby-http</span><br><span class="line"> ruby-http-cookie ruby-http-form-data ruby-http-parser.rb ruby-json ruby-librex</span><br><span class="line"> ruby-libv8 ruby-memoizable ruby-mime-types ruby-mime-types-data ruby-minitest</span><br><span class="line"> ruby-mojo-magick ruby-msfrpc-client ruby-msgpack ruby-multi-json ruby-multipart-post</span><br><span class="line"> ruby-naught ruby-net-telnet ruby-nio4r ruby-oj ruby-parseconfig ruby-power-assert</span><br><span class="line"> ruby-public-suffix ruby-qr4r ruby-rack ruby-rack-protection ruby-ref ruby-rqrcode</span><br><span class="line"> ruby-rspec-expectations ruby-rspec-support ruby-rubydns ruby-simple-oauth</span><br><span class="line"> ruby-simplecov ruby-simplecov-html ruby-sinatra ruby-sqlite3 ruby-term-ansicolor</span><br><span class="line"> ruby-test-unit ruby-therubyracer ruby-thread-safe ruby-tilt ruby-timers ruby-tins</span><br><span class="line"> ruby-twitter ruby-uglifier ruby-unf ruby-unf-ext ruby-xmlrpc ruby-zip ruby2.5</span><br><span class="line"> ruby2.5-dev ruby2.5-doc rubygems-integration thin wireshark wireshark-common</span><br><span class="line"> wireshark-qt zip</span><br><span class="line">The following packages will be upgraded:</span><br><span class="line"> aircrack-ng libcups2 libnl-3-200 libnl-genl-3-200 libxkbcommon0 metasploit-framework</span><br><span class="line"> nmap nmap-common</span><br><span class="line">8 upgraded, 182 newly installed, 0 to remove and 458 not upgraded.</span><br><span class="line">Need to get 381 MB of archives.</span><br><span class="line">After this operation, 616 MB of additional disk space will be used.</span><br><span class="line">Do you want to <span class="built_in">continue</span>? [Y/n] y</span><br></pre></td></tr></table></figure>
<h2 id="6、安装最新版本的-Tor"><a href="#6、安装最新版本的-Tor" class="headerlink" title="6、安装最新版本的 Tor"></a>6、安装最新版本的 Tor</h2><p>Tor 可以在 Kali 的存储库中使用,但匿名软件应该直接从源代码获取(torproject.org)。此外,Kali 的 Tor 版本无法可靠地维护或更新。这意味着我们可能会缺少关键的稳定性和安全性更新。</p>
<p>将 Tor 项目存储库添加到 APT 存储库列表中。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">echo</span> <span class="string">'deb https://deb.torproject.org/torproject.org stretch main</span></span><br><span class="line"><span class="string">deb-src https://deb.torproject.org/torproject.org stretch main'</span> > /etc/apt/sources.list.d/tor.list</span><br></pre></td></tr></table></figure>
<p>然后,下载 <a href="https://www.torproject.org/docs/debian.html.en">Tor Project 包签名密钥</a>并将其导入 APT 密钥环。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">wget -O- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc | <span class="built_in">sudo</span> apt-key add -</span><br><span class="line"></span><br><span class="line">--2019-02-18 19:28:23-- https://deb.torproject.org/torproject.org/A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89.asc</span><br><span class="line">Resolving deb.torproject.org (deb.torproject.org)... 138.201.14.197</span><br><span class="line">Connecting to deb.torproject.org (deb.torproject.org)|138.201.14.197|:443... connected.</span><br><span class="line">HTTP request sent, awaiting response... 200 OK</span><br><span class="line">Length: 19665 (19K) [text/plain]</span><br><span class="line">Saving to: ‘STDOUT’</span><br><span class="line"></span><br><span class="line">- 100%[=================================================================================================>] 19.20K 47.5KB/s <span class="keyword">in</span> 0.4s</span><br><span class="line"></span><br><span class="line">2019-02-18 19:28:25 (47.5 KB/s) - written to stdout [19665/19665]</span><br><span class="line"></span><br><span class="line">OK</span><br></pre></td></tr></table></figure>
<p>将签名密钥添加到密钥环后,您将看到“OK”输出。接下来,使用以下 apt-get 命令更新 APT。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-get update</span><br><span class="line"></span><br><span class="line">Hit:1 http://downloads.metasploit.com/data/releases/metasploit-framework/apt lucid InRelease</span><br><span class="line">Get:2 https://deb.torproject.org/torproject.org stretch InRelease [4,965 B]</span><br><span class="line">Get:4 https://deb.torproject.org/torproject.org stretch/main Sources [1,169 B]</span><br><span class="line">Get:5 https://deb.torproject.org/torproject.org stretch/main amd64 Packages [2,400 B]</span><br><span class="line">Hit:3 http://archive-3.kali.org/kali kali-rolling InRelease</span><br><span class="line">Fetched 8,534 B <span class="keyword">in</span> 8s (1,091 B/s)</span><br><span class="line">Reading package lists... Done</span><br></pre></td></tr></table></figure>
<p>使用以下命令安装 Tor,你就完成了。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-get install tor deb.torproject.org-keyring</span><br><span class="line"></span><br><span class="line">Reading package lists... Done</span><br><span class="line">Building dependency tree</span><br><span class="line">Reading state information... Done</span><br><span class="line">Suggested packages:</span><br><span class="line"> mixmaster torbrowser-launcher socat tor-arm apparmor-utils obfs4proxy</span><br><span class="line">The following NEW packages will be installed:</span><br><span class="line"> deb.torproject.org-keyring</span><br><span class="line">The following packages will be upgraded:</span><br><span class="line"> tor</span><br></pre></td></tr></table></figure>
<h2 id="7、使用-Syncthing-配置文件共享"><a href="#7、使用-Syncthing-配置文件共享" class="headerlink" title="7、使用 Syncthing 配置文件共享"></a>7、使用 Syncthing 配置文件共享</h2><p>由 <a href="https://twitter.com/jakobborg">Jakob Borg</a> 创建的 <a href="https://github.com/syncthing/syncthing">Syncthing</a> 是一种<a href="https://github.com/syncthing/syncthing/releases/">跨平台</a>,私有,轻量级文件同步(Dropbox)替代方案。作为渗透测试人员,在 <a href="https://null-byte.wonderhowto.com/how-to/white-hats-guide-choosing-virtual-private-server-0183135/">VPS</a> 和本地 Kali 机器之间传输按键日志,屏幕截图,网络摄像头录像和<a href="https://null-byte.wonderhowto.com/how-to/hacking-windows-10-capture-exfiltrate-screenshots-remotely-0183646/#jump-step4">敏感的战利品文件</a>可能是一项令人沮丧的任务。Syncthing 使安全的文件共享完全无痛。</p>
<p>我在前一篇文章中介绍了 <a href="https://null-byte.wonderhowto.com/how-to/securely-sync-files-between-two-machines-using-syncthing-0185999/">Syncthing 的安装和配置</a>。读者应参考该详细的分步指南。</p>
<h2 id="8、安装代码编辑器"><a href="#8、安装代码编辑器" class="headerlink" title="8、安装代码编辑器"></a>8、安装代码编辑器</h2><p><a href="https://atom.io/">Atom</a> 是一个免费的,开源的,功能丰富且高度可定制的文本编辑器。其功能包括实时协作共享代码,直观的编码自动补全功能,以及<a href="https://atom.io/packages">安装软件包</a>的能力,这些都进一步增强了 Atom 的多功能性。其他值得注意的文本编辑包括 <a href="https://wiki.geany.org/doku.php">Geany</a> 和 <a href="https://wiki.gnome.org/Apps/Gedit">Gedit</a>。</p>
<p>要安装 Atom,请访问他们的网站并下载最新的 <a href="https://atom.io/download/deb">Debian 安装程序</a>。接下来,使用下面的 apt-get 命令打开终端并安装所需的依赖项。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">apt-get install gvfs gvfs-common gvfs-daemons gvfs-libs gconf-service gconf2 gconf2-common gvfs-bin psmisc</span><br><span class="line"></span><br><span class="line">Reading package lists... Done</span><br><span class="line">Building dependency tree</span><br><span class="line">Reading state information... Done</span><br><span class="line">Correcting dependencies... Done</span><br><span class="line">The following NEW packages will be installed:</span><br><span class="line"> gconf-service (3.2.6-4.1)</span><br><span class="line"> gconf2 (3.2.6-4.1)</span><br><span class="line"> gconf2-common (3.2.6-4.1)</span><br><span class="line"> gvfs-bin (1.36.2-1)</span><br><span class="line"> libgconf-2-4 (3.2.6-4.1)</span><br><span class="line"> psmisc (23.1-1+b1)</span><br><span class="line">The following packages will be upgraded:</span><br><span class="line"> gvfs (1.36.1-1 => 1.36.2-1)</span><br><span class="line"> gvfs-common (1.36.1-1 => 1.36.2-1)</span><br><span class="line"> gvfs-daemons (1.36.1-1 => 1.36.2-1)</span><br><span class="line"> gvfs-libs (1.36.1-1 => 1.36.2-1)</span><br><span class="line">4 upgraded, 6 newly installed, 0 to remove and 462 not upgraded.</span><br><span class="line">1 not fully installed or removed.</span><br><span class="line">Need to get 3,317 kB of archives.</span><br><span class="line">After this operation, 8,909 kB of additional disk space will be used.</span><br><span class="line">Do you want to <span class="built_in">continue</span>? [Y/n] y</span><br></pre></td></tr></table></figure>
<p>最后,使用命令行包管理器 <strong>dpkg</strong> 和 install(**-i**)参数。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">dpkg -i ~/Downloads/atom-amd64.deb</span><br><span class="line"></span><br><span class="line">(Reading database ... 191882 files and directories currently installed.)</span><br><span class="line">Preparing to unpack atom-amd64.deb ...</span><br><span class="line">Unpacking atom (1.29.0) over (1.29.0) ...</span><br><span class="line">Setting up atom (1.29.0) ...</span><br><span class="line">Processing triggers <span class="keyword">for</span> desktop-file-utils (0.23-3) ...</span><br><span class="line">Processing triggers <span class="keyword">for</span> mime-support (3.60) ...</span><br></pre></td></tr></table></figure>
<p>完成后,Atom 将显示在“应用程序”菜单中。</p>
<p><img src="https://img.wonderhowto.com/img/original/05/68/63669459068404/0/636694590684040568.jpg" alt="Atom"></p>
<h2 id="9、克隆橡皮鸭(Rubber-Ducky)编码器"><a href="#9、克隆橡皮鸭(Rubber-Ducky)编码器" class="headerlink" title="9、克隆橡皮鸭(Rubber Ducky)编码器"></a>9、克隆橡皮鸭(Rubber Ducky)编码器</h2><p>USB 橡皮鸭是臭名昭著的按键注入工具。利用 <a href="https://ducktoolkit.com/">DuckToolKit 网站</a>可以很容易地创建 <a href="https://null-byte.wonderhowto.com/how-to/use-usb-rubber-ducky-disable-antivirus-software-install-ransomware-0180418/#jump-step2">ducky payloads</a>,但作为一个渗透测试人员,与随机网站共享客户信息是不安全的。将有效载荷内容上载到第三方网站可能很危险。</p>
<p>相反,我们可以使用 <strong>Git</strong> 克隆 USB 橡皮鸭<a href="https://github.com/hak5darren/USB-Rubber-Ducky">存储库</a>并在本地编码有效载荷。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">git <span class="built_in">clone</span> https://github.com/hak5darren/USB-Rubber-Ducky</span><br><span class="line"></span><br><span class="line">Cloning into <span class="string">'USB-Rubber-Ducky'</span>...</span><br><span class="line">remote: Counting objects: 1657, <span class="keyword">done</span>.</span><br><span class="line">remote: Total 1657 (delta 0), reused 0 (delta 0), pack-reused 1657</span><br><span class="line">Receiving objects: 100% (1657/1657), 31.88 MiB | 162.00 KiB/s, <span class="keyword">done</span>.</span><br><span class="line">Resolving deltas: 100% (745/745), <span class="keyword">done</span>.</span><br><span class="line">Checking out files: 100% (1509/1509), <span class="keyword">done</span>.</span><br></pre></td></tr></table></figure>
<p>然后,将当前目录更改(<a href="https://null-byte.wonderhowto.com/how-to/hack-like-pro-linux-basics-for-aspiring-hacker-part-2-creating-directories-files-0147234/">cd</a>)为 <code>USB-Rubber-Ducky/Encoder/</code> 目录,并使用以下 <strong>java</strong> 命令开始编码没有第三方网站的 <a href="https://docs.hak5.org/usb-rubber-ducky-1/getting-started/writing-your-first-payload">ducky payloads</a>。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">cd</span> USB-Rubber-Ducky/Encoder/</span><br><span class="line">java -jar encoder.jar -i input_payload.txt -o inject.bin</span><br></pre></td></tr></table></figure>
<h2 id="10、更改-SSH-密钥和默认密码"><a href="#10、更改-SSH-密钥和默认密码" class="headerlink" title="10、更改 SSH 密钥和默认密码"></a>10、更改 SSH 密钥和默认密码</h2><p>每个 Kali Linux 安装的默认密码都是相同的(toor),这使得自动化攻击非常容易。此外,当你通过 SSH 控制树莓派之类的东西时,默认的 SSH 密钥可以允许攻击者拦截你的通信。</p>
<p>要更改 SSH 密钥,请首先切换目录。执行以下两个命令将重置 SSH 密钥的默认值。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line"><span class="built_in">cd</span> /etc/ssh/</span><br><span class="line">dpkg-reconfigure openssh-server</span><br><span class="line"></span><br><span class="line">rescue-ssh.target is a disabled or a static unit, not starting it.</span><br></pre></td></tr></table></figure>
<p>现在,对于你的 Kali 系统密码,输入 <strong>passwd root</strong>,然后输入你的新密码。然后,重新输入以确认。如果你未以 root 用户身份登录,则可能会在执行此操作之前询问你当前的密码。</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">passwd root</span><br><span class="line"></span><br><span class="line">Enter new UNIX password:</span><br><span class="line">Retype new UNIX password:</span><br><span class="line">passwd: password updated successfully</span><br></pre></td></tr></table></figure>
<h2 id="安装-Kali-后你做的第一件事是什么?"><a href="#安装-Kali-后你做的第一件事是什么?" class="headerlink" title="安装 Kali 后你做的第一件事是什么?"></a>安装 Kali 后你做的第一件事是什么?</h2><p>我们都有不同程度的兴趣,技能和经验水平。这使得编写完整的安装后步骤列表变得棘手。我错过了任何关键步骤吗?你如何个性化和定制新安装的Kali?请务必在下面发表评论。</p>
]]></content>
<categories>
<category>Translation</category>
</categories>
<tags>
<tag>Kali</tag>
</tags>
</entry>
<entry>
<title>Android Studio模拟器相关问题解决</title>
<url>/2018/08/21/android-emulator-problem/</url>
<content><![CDATA[<h2 id="网络问题"><a href="#网络问题" class="headerlink" title="网络问题"></a>网络问题</h2><span id="more"></span>
<h2 id="命令行启动"><a href="#命令行启动" class="headerlink" title="命令行启动"></a>命令行启动</h2><p>Android SDK工具包中包含着一个模拟器的命令行程序 —— <code>emulator</code>,它可以在不启动Android Studio的情况下开启Android模拟器,在Windows系统中,<code>emulator</code>位于<code>%LOCALAPPDATA%\Android\Sdk\tools</code>文件夹下,<code>emulator -list-avds</code>命令可以列出所有已创建的AVD,<code>emulator -avd <avd-name></code>命令即可启动相应的AVD,要查看<code>emulator</code>更多的参数,可以使用<code>emulator -help</code>。</p>
<h2 id="最佳实践"><a href="#最佳实践" class="headerlink" title="最佳实践"></a>最佳实践</h2><p>建议创建的AVD为Pixel,版本为Android 7.1.1。</p>
]]></content>
<categories>
<category>Bug</category>
</categories>
</entry>
<entry>
<title>谈谈Android的root</title>
<url>/2018/09/18/android-root/</url>
<content><![CDATA[<p>Android的内核是Linux,所以Android的root和Linux的root有些许关系,不妨先回顾一下Linux中是如何获取root的。</p>
<h2 id="Linux相关"><a href="#Linux相关" class="headerlink" title="Linux相关"></a>Linux相关</h2><p>在Linux中获得root权限有2个命令,<code>su</code>与<code>sudo</code>,<code>sudo</code>只是为了短暂的获得root权限以执行某些操作(superuser do),而<code>su</code>其实是为了切换用户(switch user),但当其不带参数直接执行时,默认为切换到root用户。使用<code>sudo</code>执行某些需要root权限的操作时,需要输入当前用户的密码;而直接使用<code>su</code>切换到root用户时,需要输入root用户的密码。<br>在Linux中,文件的权限有<code>rwx</code>三种,即可读(read)、可写(write)、可执行(execute),其中<code>r</code>又等于4,<code>w</code>等于2,<code>x</code>等于1。所以,如果一个文件同时具有<code>rwx</code>权限,那么它的权限位就等于7。</p>
<span id="more"></span>
<h2 id="Android相关"><a href="#Android相关" class="headerlink" title="Android相关"></a>Android相关</h2><p>Android本身是不愿意让用户获得root权限的,所以Android中没有<code>su</code>或<code>sudo</code>这些命令。所以,获得root权限的第一步就是要把<code>su</code>命令拷贝到Android的<code>/system/bin</code>或<code>/system/xbin</code>目录下。但是拷贝之后并不能直接使用<code>su</code>命令,因为Android中<code>su</code>的运行机制和Linux中不同。在Android中只有root用户才能使用<code>su</code>命令,非root用户无权使用<code>su</code>命令。这其实是一个逻辑闭环:使用<code>su</code>命令可以切换到root,但只有root用户才可以使用<code>su</code>命令。好在Linux中文件的权限除了<code>rwx</code>三种之外,还有<code>s</code>权限,<code>s</code>代表当任何一个用户执行该文件时都拥有文件所有者的权限,换句话来说,如果一个文件的所有者是root,且它的执行权限标志位是<code>s</code>,那么不管谁执行这个文件,他执行的时候都是以root身份执行的。<br>基于以上,Android获取root权限大致可以分为如下3步:</p>
<figure class="highlight bash"><table><tr><td class="code"><pre><span class="line"><span class="comment"># 拷贝su到指定目录下</span></span><br><span class="line"><span class="built_in">cp</span> /data/tmp/su /system/bin/</span><br><span class="line"></span><br><span class="line"><span class="comment"># 将su所有者设为root</span></span><br><span class="line"><span class="built_in">chown</span> root:root su</span><br><span class="line"></span><br><span class="line"><span class="comment"># 将su标志位设为-rwsr-xr-x</span></span><br><span class="line"><span class="built_in">chmod</span> 4775 /system/bin/su</span><br></pre></td></tr></table></figure>
<p>但是,除了上面第一步以外,剩下两步都需要root权限才能成功执行,这就又造成了一个逻辑闭环:即通过上面的代码可以获得root权限,但必须有root权限才能执行上面的代码。这时的解决办法就是寻找Android系统的漏洞,系统中有些进程是以root权限运行的,只有找出那些有漏洞的进程,然后利用缓冲区溢出让其执行我们上面的命令,即可完成root。<br>所以,总的来说,Android获取root权限最重要的一步,就是寻找系统的漏洞,然后利用之。</p>
<h2 id="术语"><a href="#术语" class="headerlink" title="术语"></a>术语</h2><p>了解了Android root的基本原理后,需要理清一些常用术语:</p>
<h3 id="刷机"><a href="#刷机" class="headerlink" title="刷机"></a>刷机</h3><h3 id="Bootloader"><a href="#Bootloader" class="headerlink" title="Bootloader"></a>Bootloader</h3><h3 id="线刷"><a href="#线刷" class="headerlink" title="线刷"></a>线刷</h3><h3 id="卡刷"><a href="#卡刷" class="headerlink" title="卡刷"></a>卡刷</h3><h2 id="Nexus的root"><a href="#Nexus的root" class="headerlink" title="Nexus的root"></a>Nexus的root</h2><p>Nexus系列作为Google的亲儿子,自然少不了root解决方案,目前root Nexus设备使用最多的软件是<a href="http://www.wugfresh.com/nrt/">Nexus Root Toolkit(NRT)</a>。请注意,此软件运行前会先进行更新,这会花费较长的时间,需要耐心等待。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Android</tag>
</tags>
</entry>
<entry>
<title>Android刷机指南</title>
<url>/2019/03/23/android-shuaji-guide/</url>
<content><![CDATA[<h2 id="名词解释"><a href="#名词解释" class="headerlink" title="名词解释"></a>名词解释</h2><h3 id="软重启与硬重启"><a href="#软重启与硬重启" class="headerlink" title="软重启与硬重启"></a>软重启与硬重启</h3><p><strong>软重启</strong>(又称<strong>热重启</strong>)是指从操作系统层面上关机再开机,而<strong>硬重启</strong>(又称<strong>冷重启</strong>)是指直接关掉电源再开机。类似的,也有<strong>软(热)关机</strong>和<strong>硬(冷)关机</strong>,其区别类似于在 Windows “开始”菜单中点击关机和直接关掉主机电源的区别。一般而言,软(热)关机对设备更好。</p>
<span id="more"></span>
<h3 id="Bootloader-fastboot-Recovery"><a href="#Bootloader-fastboot-Recovery" class="headerlink" title="Bootloader/fastboot/Recovery"></a>Bootloader/fastboot/Recovery</h3><h3 id="Full-OTA-Image-与-Factory-Image"><a href="#Full-OTA-Image-与-Factory-Image" class="headerlink" title="Full OTA Image 与 Factory Image"></a>Full OTA Image 与 Factory Image</h3><h2 id="刷机流程"><a href="#刷机流程" class="headerlink" title="刷机流程"></a>刷机流程</h2><ol>
<li>提前备份必要的数据(下载的音乐、视频,QQ、微信的聊天记录,通话记录、短信、通讯录,相册等),尽量保持电量满。</li>
<li>恢复出厂设置(亦或,取消所有安全机制,如屏幕锁定等,并退出 Google 账号。)。</li>
<li>在开发者选项中开启 USB 调试。</li>
<li>解锁 Bootloader(需要的话)。</li>
<li>刷入第三方 Recovery,如 <a href="https://twrp.me/">TWRP</a>。</li>
<li>从 TWRP 中安装第三方 ROM,顺便 root。</li>
</ol>
<h2 id="常见问题"><a href="#常见问题" class="headerlink" title="常见问题"></a>常见问题</h2><h3 id="开机无限进入-TWRP"><a href="#开机无限进入-TWRP" class="headerlink" title="开机无限进入 TWRP"></a>开机无限进入 TWRP</h3><p>碰到这种情况,你可能需要格式化 Data 分区。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Android</tag>
</tags>
</entry>
<entry>
<title>反取证之 Linux</title>
<url>/2018/05/02/anti-forensics-linux/</url>
<content><![CDATA[<p>后渗透测试阶段的重要工作便是擦除痕迹,也即<strong>反取证</strong>,文件系统访问都会留下痕迹,最好的避免计算机取证的方法就是不要碰文件系统,这也是 meterpreter 的先天优势,它完全基于内存,Linux 中的反取证主要涉及 MAC 时间、日志文件、history:</p>
<h2 id="MAC-时间"><a href="#MAC-时间" class="headerlink" title="MAC 时间"></a>MAC 时间</h2><p>MAC 即 Modified/Accessed/Changed,也就是修改/访问/更改时间,修改时间指对文件内容修改时的时间,访问时间指对文件内容访问时的时间(例如通过 <code>cat</code> 查看时),更改时间指对文件属性、权限更改时的时间。</p>
<p>使用 <code>ls -l</code> 默认查看的是修改时间,要查看其余 2 个时间,可以加参数 <code>ls -l --time=atime/ctime</code>,另一个查看 MAC 时间的命令是 <code>stat</code>。</p>
<p>使用 <code>touch -d "5 days ago"</code> 或 <code>touch -t 1805021030</code> 可以修改 MAC 中的 MA 时间。meterpreter 中的 <code>timestomp</code> 命令可以方便的修改 MAC 时间。</p>
<span id="more"></span>
<h2 id="日志文件"><a href="#日志文件" class="headerlink" title="日志文件"></a>日志文件</h2><p>清除相关日志文件</p>
<h3 id="系统日志"><a href="#系统日志" class="headerlink" title="系统日志"></a>系统日志</h3><p>Linux 中的日志文件主要有 <code>/var/log/auth.log</code>、<code>/var/log/secure</code>、<code>/var/log/wtmp</code>、<code>/var/log/btmp</code>、<code>/var/log/lastlog</code>、<code>/var/log/faillog</code>。</p>
<p>Debian 系的 <code>auth.log</code> 文件与 RedHat 系的 <code>secure</code> 文件都记录了系统的登录日志,<code>last</code> 命令用于查看登录日志以及重启日志,文件位于 <code>/var/log/wtmp</code>;<code>lastb</code> 命令用于查看登录失败日志,文件位于 <code>/var/log/btmp</code>;<code>lastlog</code> 命令用于查看所有用户最近一次登录日志,文件位于 <code>/var/log/lastlog</code>;<code>faillog</code> 命令与 <code>lastlog</code> 命令一样,用于查看用户登录失败日志,文件位于 <code>/var/log/faillog</code>,此命令仅限于 Debian 系。</p>
<h3 id="Web-日志"><a href="#Web-日志" class="headerlink" title="Web 日志"></a>Web 日志</h3><p>Apache 的日志文件位于 <code>/var/log/apache2</code>;Nginx 的日志文件位于 <code>/var/log/nginx</code>。</p>
<h2 id="history"><a href="#history" class="headerlink" title="history"></a>history</h2><p>Linux 中,每次输入的命令都会记录在用户文件夹中的 <code>.bash_history</code> 文件中,默认记录 1000 条命令,使用 <code>history</code> 命令即可查看,清除记录的方法是使用 <code>history -c</code> 命令。另一种清除记录的方法是更改 <code>.bash_history</code> 文件的属性,使用命令:<code>chattr +i .bash_history</code> 使其不可被更改,从而无法向其写入任何数据。</p>
<p><strong>最后,请不要忘记 HIDS/IPS/WAF/集中的日志服务器的痕迹擦除。</strong></p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>渗透</tag>
<tag>计算机取证</tag>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title>反取证之 Windows</title>
<url>/2018/05/02/anti-forensics-windows/</url>
<content><![CDATA[<h2 id="MACE-时间"><a href="#MACE-时间" class="headerlink" title="MACE 时间"></a>MACE 时间</h2><p>和 <a href="/2018/05/02/anti-forensics-linux/" title="反取证之 Linux">反取证之 Linux</a> 中的一样,Windows 也有 MAC 时间,不过在 Windows 中,C 指的是 Created,即创建时间,Windows 中默认显示的是修改时间,另外,在 Windows 的 NTFS 文件系统中还有 E 时间,即 MFT entry,其中包含了文件的大量信息,包括大小、名称、目录位置、磁盘位置、创建日期等,在擦除痕迹时也要擦除 E 时间,同样,meterpreter 中的 <code>timestomp</code> 命令可以方便的修改 MACE 时间。</p>
<h2 id="隐藏新建账号"><a href="#隐藏新建账号" class="headerlink" title="隐藏新建账号"></a>隐藏新建账号</h2><p>当在目标系统上新建了用户账号后,通常会在登录界面上显示出来,要实现隐藏,可以修改注册表项,采用如下命令:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">REG ADD HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList /v <span class="built_in">uname</span> /t REG_DWORD /d 0</span><br></pre></td></tr></table></figure>
<p>注意:这种隐藏只是在登录界面的隐藏,用户使用 <code>net user</code> 或“本地用户和组”仍然可以查到新建的账户。</p>
<h2 id="日志文件"><a href="#日志文件" class="headerlink" title="日志文件"></a>日志文件</h2><p>清除相关日志文件</p>
<h3 id="系统日志"><a href="#系统日志" class="headerlink" title="系统日志"></a>系统日志</h3><p>Windows 系统日志文件一般存放在 <code>Windows</code> 文件夹下,可以使用如下命令删除之:</p>
<figure class="highlight sh"><table><tr><td class="code"><pre><span class="line">del %windir%\*.<span class="built_in">log</span> /a/s/q/f</span><br></pre></td></tr></table></figure>
<p>另外,meterpreter 中的 <code>clearev</code> 命令可以删除事件查看器中的日志信息。</p>
<h3 id="Web-日志"><a href="#Web-日志" class="headerlink" title="Web 日志"></a>Web 日志</h3><p>IIS 的日志文件位于 <code>%windir%\System32\LogFiles</code> 目录下。</p>
<p><strong>最后,请不要忘记 HIDS/IPS/WAF/集中的日志服务器的痕迹擦除。</strong></p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Windows</tag>
<tag>渗透</tag>
<tag>计算机取证</tag>
</tags>
</entry>
<entry>
<title>ARP 运行机制</title>
<url>/2021/03/06/arp/</url>
<content><![CDATA[<p>与 DNS 类似,<strong>ARP</strong>(Address Resolution Protocol,<strong>地址解析协议</strong>)提供了将 <strong>IP 地址</strong>转换为<strong>链路层地址</strong>的机制。这两种解析器之间的一个重要区别是,DNS 为在因特网中任何地方的主机解析主机名,而 ARP 只为在同一个子网上的主机和路由器<strong>接口</strong>解析 IP 地址。</p>
<span id="more"></span>
<h2 id="MAC-地址"><a href="#MAC-地址" class="headerlink" title="MAC 地址"></a>MAC 地址</h2><p>事实上,并不是主机或路由器具有链路层地址,而是它们的适配器(即网络接口)具有链路层地址。因此,具有多个网络接口的主机或路由器将具有与之相关联的多个链路层地址,就像它也具有与之相关联的多个 IP 地址一样。</p>
<p>链路层地址有各种不同的称呼:<strong>LAN 地址</strong>(LAN address)、<strong>物理地址</strong>(physical address)或 <strong>MAC 地址</strong>(MAC address)。我们一般将链路层地址称为 MAC 地址。</p>
<p>对于大多数局域网(包括以太网和 802.11 无线局域网)而言,MAC 地址长度为 6 字节,共有 $2^{48}$ 个可能的 MAC 地址。这些 6 个字节地址通常用十六进制表示法,地址的每个字节被表示为一对十六进制数。如 <code>1A-23-F9-CD-06-9B</code>。尽管 MAC 地址被设计为永久的,但用软件改变一块适配器的 MAC 地址现在是可能的。</p>
<p>没有两块适配器具有相同的 MAC 地址。IEEE 在管理着 MAC 地址空间。特别是,当一个公司要生产适配器时,它支付象征性的费用购买组成 $2^{24}$ 个地址的一块地址空间。IEEE 分配这块 $2^{24}$ 个地址的方式是:固定一个 MAC 地址的前 24 比特,让公司自己为每个适配器生成后 24 比特的唯一组合。具体的分配列表可参考<a href="http://standards-oui.ieee.org/oui/oui.txt">其官网</a>。</p>
<p>适配器的 MAC 地址具有<strong>扁平结构</strong>(这与层次结构相反),而且不论适配器到哪里用都不会变化。与之形成对照的是,IP 地址具有<strong>层次结构</strong>(即一个网络部分和一个主机部分),而且当主机移动时,主机的 IP 地址需要改变,即改变它所连接到的网络。可以将适配器的 MAC 地址比喻成一个人的身份证号,而将 IP 地址比喻成一个人的住址。</p>
<p>当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的 MAC 地址插入到该帧中,并将该帧发送到局域网上。对于使用 6 字节地址的局域网(例如以太网和 802.11)来说,<strong>MAC 广播地址</strong>(broadcast address)是 48 个连续的 1 组成的字符串(即以十六进制表示法表示的 <code>FF-FF-FF-FF-FF-FF</code>)。</p>
<h2 id="ARP-工作过程"><a href="#ARP-工作过程" class="headerlink" title="ARP 工作过程"></a>ARP 工作过程</h2><p>每台主机或路由器在其内存中具有一个 <strong>ARP 表</strong>(ARP table),这张表包含 IP 地址到 MAC 地址的映射关系。例如:</p>
<table>
<thead>
<tr>
<th>IP 地址</th>
<th>MAC 地址</th>
<th>TTL</th>
</tr>
</thead>
<tbody><tr>
<td>222.222.222.221</td>
<td>88-B2-2F-54-1A-0F</td>
<td>13:45:00</td>
</tr>
<tr>
<td>222.222.222.223</td>
<td>5C-66-AB-90-75-B1</td>
<td>13:52:00</td>
</tr>
</tbody></table>
<p>该 ARP 表也包含一个寿命(TTL)值,它指示了从表中删除每个映射的时间。注意到这张表不必为该子网中的每台主机和路由器都包含一个表项;某些可能从来没有进入到该表中,某些可能已经过期。从一个表项放置到某 ARP 表中开始,一个表项通常的过期时间是 20 分钟。</p>
<p>如果 ARP 表中当前没有目的主机的表项,在这种情况下,发送方用 ARP 协议来解析这个地址。首先,发送方构造一个称为 <strong>ARP 分组</strong>(ARP packet)的特殊分组。一个 ARP 分组有几个字段,包括发送和接收 IP 地址及 MAC 地址。ARP 查询分组和响应分组都具有相同的格式。ARP 查询分组的目的是询问子网上所有其他主机和路由器,以确定对应于要解析的 IP 地址的那个 MAC 地址。</p>
<p>查询 ARP 报文是在广播帧中发送的,而响应 ARP 报文在一个标准帧中发送。</p>
<p>ARP 表是即插即用的,这就是说,一个 ARP 表是自动建立的,即它不需要系统管理员来配置。并且如果某主机与子网断开连接,它的表项最终会从留在子网中的节点的表中删除。</p>
<h2 id="其他"><a href="#其他" class="headerlink" title="其他"></a>其他</h2><p>ARP 是一个链路层协议还是一个网络层协议?一个 ARP 分组封装在链路层帧中,因而在体系结构上位于链路层之上。然而,一个 ARP 分组具有包含链路层地址的字段,因而可认为是链路层协议,但它也包含网络层地址,因而也可认为是网络层协议。所以,可能最好把 ARP 看成是跨越链路层和网络层边界两边的协议,即不完全符合简单的分层协议栈。现实世界协议就是这样复杂!</p>
<h2 id="参考"><a href="#参考" class="headerlink" title="参考"></a>参考</h2><ol>
<li><a href="https://book.douban.com/subject/30280001/">James F. Kurose,Keith W. Ross.计算机网络:自顶向下方法[M].北京:机械工业出版社,2018:303-308.</a></li>
</ol>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>计算机网络</tag>
</tags>
</entry>
<entry>
<title>汇编语言小记</title>
<url>/2019/03/09/assembly/</url>
<content><![CDATA[<p><strong>汇编语言</strong>(Assembly Language,简称 <strong>ASM</strong>)由<strong>汇编指令</strong>、<strong>伪指令</strong>和<strong>其他符号</strong>组成,其中汇编指令有对应的机器码,而伪指令和其他符号没有对应的机器码,仅由汇编器识别执行。</p>
<h2 id="架构"><a href="#架构" class="headerlink" title="架构"></a>架构</h2><p>汇编语言是依赖底层 CPU 架构的,不同的 CPU 架构拥有不同的汇编语言,比如,常用于 PC 的<strong>x86 汇编</strong>和常用于嵌入式设备的<strong>ARM 汇编</strong>。由于 x86 架构又分为 16 位、32 位、64 位等,其相应的汇编也有稍许不同。本文主要以 32 位 x86 汇编为例做简要介绍。</p>
<span id="more"></span>
<h2 id="寄存器"><a href="#寄存器" class="headerlink" title="寄存器"></a>寄存器</h2><p>汇编语言的大部分指令都是直接操作 CPU 中的寄存器的,所以有必要了解以下 x86 架构的 CPU 中常见的寄存器。</p>
<p>16 位 x86 CPU 中常见的寄存器有:</p>
<ul>
<li>通用寄存器(<strong>8 个</strong>):<ul>
<li>数据寄存器:<ul>
<li>AX:累加寄存器,Accumulator</li>
<li>BX:基址寄存器,Base</li>
<li>CX:计数寄存器,Count</li>
<li>DX:数据寄存器,Data</li>
</ul>
</li>
<li>指针寄存器:<ul>
<li>SP:堆栈指针寄存器,Stack Pointer</li>
<li>BP:基址指针寄存器,Base Pointer</li>
</ul>
</li>
<li>变址寄存器:<ul>
<li>SI:源变址寄存器,Source Index</li>
<li>DI:目的变址寄存器,Destinatin Index</li>
</ul>
</li>
</ul>
</li>
<li>段寄存器:<ul>
<li>CS:代码段寄存器,Code Segment</li>
<li>DS:数据段寄存器,Data Segment</li>
<li>SS:堆栈段寄存器,Stack Segment</li>
<li>ES:附加段寄存器,Extra Segment</li>
</ul>
</li>
<li>控制寄存器:<ul>
<li>IP:指令指针寄存器,Instruction Pointer</li>
<li>FLAGS:标志寄存器</li>
</ul>
</li>
</ul>
<p>为了保证兼容性,AX、BX、CX、DX 这四个寄存器都可分为两个可独立使用的 8 位寄存器来用,如 AX 可分为 <strong>AH</strong> 和 <strong>AL</strong>,其中 AH 代表高(High)8 位,AL 代表低(Low)8 位,其他 3 个也是如此。</p>
<p>32 位 x86 CPU 在 16 位的基础上增加了一些寄存器,那些和原来作用相同的寄存器一般会在前面加上 <code>E</code>,其中常见的寄存器有:</p>
<ul>
<li>通用寄存器(<strong>8 个</strong>):EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI</li>
<li>段寄存器:CS、DS、SS、ES、FS、GS,增加的 FS、GS 和 ES 一样,属于附加段寄存器</li>
<li>指令指针寄存器:EIP</li>
<li>标志寄存器:EFLAGS</li>
<li>系统表寄存器:GDTR、LDTR、IDTR、TR</li>
<li>控制寄存器:CR0、CR1、CR2、CR3、CR4</li>
<li>调试寄存器:DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7</li>
<li>测试寄存器:TR0、TR1、TR2、TR3、TR4、TR5、TR6、TR7</li>
</ul>
<p>类似的,64 位又在 32 位的基础上增加了一些寄存器,那些和原来作用相同的寄存器一般会将前面的 <code>E</code> 改为 <code>R</code>,其中常见的寄存器有:</p>
<ul>
<li>通用寄存器(<strong>16 个</strong>):RAX、RBX、RCX、RDX、RSP、RBP、RSI、RDI、R8、R9、R10、R11、R12、R13、R14、R15</li>
<li>指令指针寄存器:RIP</li>
<li>标志寄存器:RFLAGS</li>
</ul>
<h2 id="指令"><a href="#指令" class="headerlink" title="指令"></a>指令</h2><p>常见的汇编指令如下:</p>
<ul>
<li><code>mov</code>:传送指令,两个操作对象的位数应该一致,如 <code>mov eax,ebx</code>,表示将 EBX 的值送入 EAX 中。8086 CPU 不支持将数据直接送入段寄存器的操作,要想实现此功能,只能用一个寄存器来进行中转。</li>
<li><code>add</code>:加法指令,两个操作对象的位数应该一致,如 <code>add eax,ebx</code>,表示将 EAX 和 EBX 相加,其值赋给 EAX。</li>
<li><code>sub</code>:减法指令,如 <code>sub eax,ebx</code>,表示用 EAX 减 EBX,其值赋给 EAX。</li>
<li><code>push</code>:</li>
<li><code>pop</code>:</li>
<li><code>jmp</code>:跳转指令,属于转移指令,如 <code>jmp 2AE3:3</code>,表示将 CS 设为 <code>2AE3H</code>,将 IP 设为 <code>0003H</code>,CPU 将从 CS:IP(即 <code>2AE33H</code>)处读取指令;<code>jmp eax</code> 表示将 EAX 的值赋给 IP,CS 保持不变。</li>
<li><code>jnz</code>:条件跳转指令,检查 EFLAGS 标志寄存器中的 ZF 位(零标志位)是否为 0,若不为 0,则跳转。</li>
<li><code>jz</code>:条件跳转指令,检查 EFLAGS 标志寄存器中的 ZF 位(零标志位)是否为 0,若为 0,则跳转。</li>
<li><code>in</code>:从 I/O 端口读取内容,如 <code>in al,21H</code>,表示从 21H 端口读取内容到 AL 中。</li>
<li><code>out</code>:向 I/O 端口写入内容,如 <code>out 21H,al</code>,表示将 AL 的值写入到 21H 端口中。</li>
<li><code>xor</code>:按位异或运算,即相同为 0,不同为 1,如 <code>xor eax,ebx</code>,表示将 EAX 和 EBX 按位异或,其值赋给 EAX。对同一个值进行异或,会使其得 0,汇编中常用这种方法得到 0,如 <code>xor eax,eax</code>。</li>
<li><code>or</code>:按位或运算,如 <code>or eax,ebx</code>,表示将 EAX 和 EBX 按位或,其值赋给 EAX。</li>
</ul>
<p>注意:汇编指令和寄存器名称不区分大小写。</p>
<h2 id="伪指令"><a href="#伪指令" class="headerlink" title="伪指令"></a>伪指令</h2><p>伪指令依赖于具体的汇编器,这里我们以 GNU 中的 as 汇编器(gas)为例,讲述常见的伪指令及其含义:</p>
<ul>
<li><code>.set</code>:为变量设置一个值,如 <code>.set CR0_PE_ON, 0x1</code>。</li>
<li><code>.globl</code> 或 <code>.global</code>:设置外部链接,使其在其他文件中可被调用,如 <code>.globl start</code>。</li>
<li><code>.code16</code>:生成 16 位汇编代码。</li>
<li><code>.code32</code>:生成 32 位汇编代码。</li>
<li><code>.p2align</code>:</li>
<li><code>.word</code>:</li>
<li><code>.long</code>:</li>
</ul>
<p>想要了解更多的伪指令可以参考 <a href="https://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops">gas 的官方文档</a>。</p>
<h2 id="标号"><a href="#标号" class="headerlink" title="标号"></a>标号</h2><p>标号代表一个地址,类似于高级语言中的函数,在需要时可以使用跳转指令跳转到标号处执行,利用标号还可以实现死循环,如下:</p>
<figure class="highlight plaintext"><table><tr><td class="code"><pre><span class="line">spin:</span><br><span class="line"> jmp spin</span><br></pre></td></tr></table></figure>
<h2 id="风格"><a href="#风格" class="headerlink" title="风格"></a>风格</h2><p>x86 汇编语言的两大风格分别是 <strong>Intel 风格</strong>和 <strong>AT&T 风格</strong>,分别被 Microsoft 和 GNU 所采用,两种风格的详细区别如下表所示:</p>
<table>
<thead>
<tr>
<th>项目</th>
<th>Intel 风格</th>
<th>AT&T 风格</th>
</tr>
</thead>
<tbody><tr>
<td>操作数顺序</td>
<td>目标操作数在前,如 <code>mov eax,8</code></td>
<td>源操作数在前,如 <code>movl $8,%eax</code></td>
</tr>
<tr>
<td>寄存器名字</td>
<td>原样,如 <code>mov eax,8</code></td>
<td>加 <code>%</code> 前缀,如 <code>movl $8,%eax</code></td>
</tr>
<tr>
<td>立即数</td>
<td>原样,如 <code>mov eax,8</code></td>
<td>加 <code>$</code> 前缀,如 <code>movl $8,%eax</code></td>
</tr>
<tr>
<td>16进制立即数</td>
<td>用后缀 <code>b</code> 与 <code>h</code> 分别表示二进制与十六进制,对于 16 进制字母开头的要加前缀 <code>0</code></td>
<td>加前缀 <code>0x</code></td>
</tr>
<tr>
<td>访问内存长度的表示</td>
<td>前缀 <code>byte ptr</code>,<code>word ptr</code>,<code>dword ptr</code></td>
<td>后缀 <code>b</code>、<code>w</code>、<code>l</code>表示字节、字、长型</td>
</tr>
<tr>
<td>引用全局或静态变量 var 的值</td>
<td>[_var]</td>
<td>_var</td>
</tr>
<tr>
<td>引用全局或静态变量 var 的地址</td>
<td>_var</td>
<td>$_var</td>
</tr>
<tr>
<td>寄存器间址</td>
<td>[reg]</td>
<td>(%reg)</td>
</tr>
<tr>
<td>寄存器变址寻址</td>
<td>[reg + _x]</td>
<td>_x(%reg)</td>
</tr>
<tr>
<td>立即数变址寻址</td>
<td>[reg + 1]</td>
<td>1(%reg)</td>
</tr>
<tr>
<td>整数数组寻址</td>
<td>[eax*4 + array]</td>
<td>_array (,%eax, 4)</td>
</tr>
<tr>
<td>注释</td>
<td>:注释以英文分号开头</td>
<td>#注释以井号开头</td>
</tr>
</tbody></table>
<p>本文的书写风格以 Intel 风格为主。</p>
<h2 id="内联汇编"><a href="#内联汇编" class="headerlink" title="内联汇编"></a>内联汇编</h2><p>内联汇编(Inline Assembly)是指在 C 代码中嵌入汇编代码,显然,其语法是由具体的 C 编译器所决定的,这里主要以 GNU 中的 gcc 编译器为例简述其语法。</p>
<h2 id="更多"><a href="#更多" class="headerlink" title="更多"></a>更多</h2><p>要了解汇编语言更多的知识,可以阅读王爽的<a href="https://book.douban.com/subject/25726019/">《汇编语言》</a>一书,这本书基于 16 位的 8086 CPU 来讲解汇编,虽然处理器已过时,但思想永不褪色。</p>
<p>其次,<a href="https://www.ibm.com/developerworks/cn/linux/l-assembly/index.html">Linux 汇编语言开发指南</a>,也是一篇不错的介绍文章。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
</entry>
<entry>
<title>强大的autojump</title>
<url>/2018/09/19/autojump/</url>
<content><![CDATA[]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>Linux</tag>
</tags>
</entry>
<entry>
<title>身份认证的几种方式</title>
<url>/2018/11/16/authentication/</url>
<content><![CDATA[<p>身份认证的目的是确认当前所声称为某种身份的用户,确实是所声称的用户。简单来说,就是为了确认<strong>你是你</strong>。</p>
<p>身份认证大致可分为三种:基于生物学特征的身份认证、基于共享密钥的身份认证以及基于公钥加密算法的身份认证,以下分别说明:</p>
<span id="more"></span>
<h2 id="基于生物学特征的身份认证"><a href="#基于生物学特征的身份认证" class="headerlink" title="基于生物学特征的身份认证"></a>基于生物学特征的身份认证</h2><p>基于生物学特征的身份认证是指基于每个人身体上独一无二的特征,如指纹、虹膜等等。</p>
<p>这种认证方式极具便利性,但同时安全性也最低,此外,生物学特征信息一旦泄露,无法更改。</p>
<h2 id="基于共享密钥的身份认证"><a href="#基于共享密钥的身份认证" class="headerlink" title="基于共享密钥的身份认证"></a>基于共享密钥的身份认证</h2><p>基于共享密钥的身份认证是指服务器端和用户共同拥有一个或一组密码。用户通过输入或通过保管有密码的设备提交由用户和服务器共同拥有的密码,服务器检查用户所提交的密码是否与服务器端保存的密码一致,如果一致,就判断用户为合法用户,否则判定身份验证失败。</p>
<p>这种认证方式是目前互联网上所广泛应用的。</p>
<h2 id="基于公钥加密算法的身份认证"><a href="#基于公钥加密算法的身份认证" class="headerlink" title="基于公钥加密算法的身份认证"></a>基于公钥加密算法的身份认证</h2><p>基于公钥加密算法的身份认证是指通信中的双方分别持有公钥和私钥,由其中的一方采用私钥对特定数据进行加密,而对方采用公钥对数据进行解密,如果解密成功,就认为用户是合法用户,否则就认为是身份验证失败。</p>
<p>很难说明,<strong>基于共享密钥的身份认证</strong>和<strong>基于公钥加密算法的身份认证</strong>哪个更为安全,<strong>基于共享密钥的身份认证</strong>的不安全处主要在于共享密钥的传播过程中,而<strong>基于公钥加密算法的身份认证</strong>的不安全处则主要在于私钥的存储过程中。</p>
<hr>
<p>为了提升身份认证的安全性,有时会结合使用以上三种认证方式,这便是<strong>多因素认证</strong>(Multi-factor authentication),如果只使用了以上三种认证方式中的两种,则又称为<strong>双因素认证</strong>(Two-factor authentication),简称 <strong>2FA</strong>。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
</entry>
<entry>
<title>Base 编码家族</title>
<url>/2018/08/10/base/</url>
<content><![CDATA[<h2 id="Base64"><a href="#Base64" class="headerlink" title="Base64"></a>Base64</h2><p>Base64,顾名思义是一种基于 <strong>64</strong> 个可打印字符来表示二进制数据的表示方法,这 64 个字符分别为 <code>A-Z</code>、<code>a-z</code>、<code>0-9</code> 以及 <code>+</code> 与 <code>/</code>。64 个字符可用 6 个比特位表示,3 个字节有 24 个比特位,对应于 4 个 Base64 单元,所以编码后的数据要比原始数据略长,为原来的 4/3。Base64 索引表如下所示:</p>
<table>
<thead>
<tr>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>A</td>
<td>16</td>
<td>Q</td>
<td>32</td>
<td>g</td>
<td>48</td>
<td>w</td>
</tr>
<tr>
<td>1</td>
<td>B</td>
<td>17</td>
<td>R</td>
<td>33</td>
<td>h</td>
<td>49</td>
<td>x</td>
</tr>
<tr>
<td>2</td>
<td>C</td>
<td>18</td>
<td>S</td>
<td>34</td>
<td>i</td>
<td>50</td>
<td>y</td>
</tr>
<tr>
<td>3</td>
<td>D</td>
<td>19</td>
<td>T</td>
<td>35</td>
<td>j</td>
<td>51</td>
<td>z</td>
</tr>
<tr>
<td>4</td>
<td>E</td>
<td>20</td>
<td>U</td>
<td>36</td>
<td>k</td>
<td>52</td>
<td>0</td>
</tr>
<tr>
<td>5</td>
<td>F</td>
<td>21</td>
<td>V</td>
<td>37</td>
<td>l</td>
<td>53</td>
<td>1</td>
</tr>
<tr>
<td>6</td>
<td>G</td>
<td>22</td>
<td>W</td>
<td>38</td>
<td>m</td>
<td>54</td>
<td>2</td>
</tr>
<tr>
<td>7</td>
<td>H</td>
<td>23</td>
<td>X</td>
<td>39</td>
<td>n</td>
<td>55</td>
<td>3</td>
</tr>
<tr>
<td>8</td>
<td>I</td>
<td>24</td>
<td>Y</td>
<td>40</td>
<td>o</td>
<td>56</td>
<td>4</td>
</tr>
<tr>
<td>9</td>
<td>J</td>
<td>25</td>
<td>Z</td>
<td>41</td>
<td>p</td>
<td>57</td>
<td>5</td>
</tr>
<tr>
<td>10</td>
<td>K</td>
<td>26</td>
<td>a</td>
<td>42</td>
<td>q</td>
<td>58</td>
<td>6</td>
</tr>
<tr>
<td>11</td>
<td>L</td>
<td>27</td>
<td>b</td>
<td>43</td>
<td>r</td>
<td>59</td>
<td>7</td>
</tr>
<tr>
<td>12</td>
<td>M</td>
<td>28</td>
<td>c</td>
<td>44</td>
<td>s</td>
<td>60</td>
<td>8</td>
</tr>
<tr>
<td>13</td>
<td>N</td>
<td>29</td>
<td>d</td>
<td>45</td>
<td>t</td>
<td>61</td>
<td>9</td>
</tr>
<tr>
<td>14</td>
<td>O</td>
<td>30</td>
<td>e</td>
<td>46</td>
<td>u</td>
<td>62</td>
<td>+</td>
</tr>
<tr>
<td>15</td>
<td>P</td>
<td>31</td>
<td>f</td>
<td>47</td>
<td>v</td>
<td>63</td>
<td>/</td>
</tr>
</tbody></table>
<span id="more"></span>
<p>编码 <code>Hello</code> 的过程如下:</p>
<table>
<thead>
<tr>
<th>文本</th>
<th>H</th>
<th>e</th>
<th>l</th>
<th>l</th>
<th>o</th>
<th></th>
</tr>
</thead>
<tbody><tr>
<td>ASCII 编码</td>
<td>72</td>
<td>101</td>
<td>108</td>
<td>108</td>
<td>111</td>
<td></td>
</tr>
<tr>
<td>二进制位</td>
<td>01001000</td>
<td>01100101</td>
<td>01101100</td>
<td>01101100</td>
<td>01101111</td>
<td>00000000</td>
</tr>
</tbody></table>
<p>以6个二进制位进行编码:</p>
<table>
<thead>
<tr>
<th>二进制位</th>
<th>010010</th>
<th>000110</th>
<th>010101</th>
<th>101100</th>
<th>011011</th>
<th>000110</th>
<th>111100</th>
<th>000000</th>
</tr>
</thead>
<tbody><tr>
<td>索引</td>
<td>18</td>
<td>6</td>
<td>21</td>
<td>44</td>
<td>27</td>
<td>6</td>
<td>60</td>
<td></td>
</tr>
<tr>
<td>Base64 编码</td>
<td>S</td>
<td>G</td>
<td>V</td>
<td>s</td>
<td>b</td>
<td>G</td>
<td>8</td>
<td>=</td>
</tr>
</tbody></table>
<p>若原数据不是 3 的倍数,且多出 1 个字节,则在编码末尾加 2 个 <code>=</code>,多出 2 个字节,则在编码末尾加 1 个 <code>=</code>。换言之,若多出 1 个字节,则最后一个 6 位的 Base64 字节块有 4 位是 0 值,若多出 2 个字节,则最后一个 6 位的 Base64 字节块有 2 位是 0 值。</p>
<h2 id="Base32"><a href="#Base32" class="headerlink" title="Base32"></a>Base32</h2><p>与上类似,Base32 基于 32 个可打印字符,分别为 <code>A-Z</code> 以及 <code>2-7</code>。32 个字符可用 5 个比特位表示,5 个字节有 40 个比特位,对应于 8 个 Base32 单元,编码后的数据比原始数据略长 8/5。若原数据不是 5 的倍数,且多出 1 个字节,则在编码末尾加 4 个 <code>=</code>,多出 2 个字节,则在编码末尾加 3 个 <code>=</code>,多出 3 个字节,则在编码末尾加 2 个 <code>=</code>,多出 4 个字节,则在编码末尾加 1 个 <code>=</code>。Base32 索引表如下所示:</p>
<table>
<thead>
<tr>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>A</td>
<td>8</td>
<td>I</td>
<td>16</td>
<td>Q</td>
<td>24</td>
<td>Y</td>
</tr>
<tr>
<td>1</td>
<td>B</td>
<td>9</td>
<td>J</td>
<td>17</td>
<td>R</td>
<td>25</td>
<td>Z</td>
</tr>
<tr>
<td>2</td>
<td>C</td>
<td>10</td>
<td>K</td>
<td>18</td>
<td>S</td>
<td>26</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>D</td>
<td>11</td>
<td>L</td>
<td>19</td>
<td>T</td>
<td>27</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>E</td>
<td>12</td>
<td>M</td>
<td>20</td>
<td>U</td>
<td>28</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>F</td>
<td>13</td>
<td>N</td>
<td>21</td>
<td>V</td>
<td>29</td>
<td>5</td>
</tr>
<tr>
<td>6</td>
<td>G</td>
<td>14</td>
<td>O</td>
<td>22</td>
<td>W</td>
<td>30</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>H</td>
<td>15</td>
<td>P</td>
<td>23</td>
<td>X</td>
<td>31</td>
<td>7</td>
</tr>
</tbody></table>
<h2 id="Base16"><a href="#Base16" class="headerlink" title="Base16"></a>Base16</h2><p>与上类似,Base16 基于 16 个可打印字符,分别为 <code>0-9</code> 以及 <code>A-F</code>。16 个字符可用 4 个比特位表示,1 个字节有 8 个比特位,对应于 2 个 Base16 单元,编码后的数据比原始数据略长 2。显然,在 Base16 中不需要在末尾填充 <code>=</code>。Base16 索引表如下所示:</p>
<table>
<thead>
<tr>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
<th>数值</th>
<th>字符</th>
</tr>
</thead>
<tbody><tr>
<td>0</td>
<td>0</td>
<td>4</td>
<td>4</td>
<td>8</td>
<td>8</td>
<td>12</td>
<td>C</td>
</tr>
<tr>
<td>1</td>
<td>1</td>
<td>5</td>
<td>5</td>
<td>9</td>
<td>9</td>
<td>13</td>
<td>D</td>
</tr>
<tr>
<td>2</td>
<td>2</td>
<td>6</td>
<td>6</td>
<td>10</td>
<td>A</td>
<td>14</td>
<td>E</td>
</tr>
<tr>
<td>3</td>
<td>3</td>
<td>7</td>
<td>7</td>
<td>11</td>
<td>B</td>
<td>15</td>
<td>F</td>
</tr>
</tbody></table>
<h2 id="Base64URL"><a href="#Base64URL" class="headerlink" title="Base64URL"></a>Base64URL</h2><p>Base64URL 编码是在 Base64 编码的结果的基础上做的一些修改,主要是为了方便编码后的字符串在网络中传输。其做的修改如下:</p>
<ol>
<li>去除尾部的 <code>=</code></li>
<li>将 <code>+</code> 替换成 <code>-</code></li>
<li>将 <code>/</code> 替换成 <code>_</code></li>
</ol>
<p>类似的,解码为原 Base64 编码结果,遵循如下步骤:</p>
<ol>
<li>将 <code>-</code> 替换成 <code>+</code></li>
<li>将 <code>_</code> 替换成 <code>/</code></li>
<li>计算 <code>Base64URL 编码长度 % 4</code> 的值:<br>a. 结果为 0,不做处理<br>b. 结果为 2,字符串添加 <code>==</code><br>c. 结果为 3,字符串添加 <code>=</code></li>
</ol>
<h2 id="XXencode"><a href="#XXencode" class="headerlink" title="XXencode"></a>XXencode</h2><p>XXencode 不属于 Base 编码家族,但与 Base64 编码极为类似,区别仅在于 64 个可打印字符及其顺序,XXencode 使用的为 <code>+</code>、<code>-</code>、<code>0-9</code>、<code>A-Z</code>、<code>a-z</code>。</p>
<h2 id="UUencode"><a href="#UUencode" class="headerlink" title="UUencode"></a>UUencode</h2><p>UUencode 也与 Base64 极为类似,它使用的字符及其顺序为 <code>(space)</code>、<code>!</code>、<code>"</code>、<code>#</code>、<code>$</code>、<code>%</code>、<code>&</code>、<code>'</code>、<code>(</code>、<code>)</code>、<code>*</code>、<code>+</code>、<code>,</code>、<code>-</code>、<code>.</code>、<code>/</code>、<code>0-9</code>、<code>:</code>、<code>;</code>、<code><</code>、<code>=</code>、<code>></code>、<code>?</code>、<code>@</code>、<code>A-Z</code>、<code>[</code>、<code>\</code>、<code>]</code>、<code>^</code>、<code>_</code>、`。</p>
]]></content>
<categories>
<category>CheatSheet</category>
</categories>
<tags>
<tag>密码学</tag>
</tags>
</entry>
<entry>
<title>巴科斯范式</title>
<url>/2018/09/12/bnf/</url>
<content><![CDATA[]]></content>
<categories>
<category>CheatSheet</category>
</categories>
</entry>
<entry>
<title>使用 BOINC 来挖掘格雷德币</title>
<url>/2018/12/16/boinc-gridcoin/</url>
<content><![CDATA[<h2 id="BOINC"><a href="#BOINC" class="headerlink" title="BOINC"></a>BOINC</h2><p><a href="https://boinc.berkeley.edu/">BOINC</a>,全称 Berkeley Open Infrastructure for Network Computing,即伯克利开放式网络计算平台,是由加州大学伯克利分校发展出的分布式计算平台。BOINC 会利用志愿者电脑的空闲资源来对各个项目下发的任务进行运算,目前 BOINC 平台上有如下知名项目:</p>
<ul>
<li><a href="https://setiathome.berkeley.edu/">SETI@home</a>:由加州大学伯克利分校主办,主要目的为搜索外太空文明。</li>
<li><a href="https://einsteinathome.org/zh-cn/home">Einstein@Home</a>:由威斯康星大学密尔沃基分校主办,主要目的为搜索脉冲星的引力波。</li>
<li><a href="http://www.gpugrid.net/index.php">GPUGrid.net</a>:主要目的为做分子生物动力学相关的研究。</li>
<li><a href="https://www.worldcommunitygrid.org/discover.action">IBM World Community Grid</a>:中文翻译为“世界公共网格”,由 IBM 主办,主要目的为利用分布式计算来帮助查找人类疾病的治疗方法,和改善人类生活的相关研究。随着项目的不断扩大,World Community Grid 逐渐发展成为一个医药、生物和环境等各种方面研究类的更高层次分布式计算平台。目前正在该平台上运行的知名子项目包括:<ul>
<li><a href="https://www.worldcommunitygrid.org/research/faah/overview.do?language=zh_CN">FightAIDS@Home</a>:主要目的为研究 HIV 的治疗方法。</li>
</ul>
</li>
</ul>
<span id="more"></span>