- ollydbg使用入门
题目一
代码:
|
使用debug模式运行,拿到exe文件
用ollydbg打开,单步执行
单步调试,找到主函数
F7步入
跳转至主函数
输入
找到verifyPwd函数
跳转到verifyPwd函数
在学习的过程中,使用vc6查看已经划分好的反汇编代码
其中框出的部分为调用verifyPwd函数并将返回值赋给bFlag的代码
反汇编代码 | 作用 |
---|---|
lea edx,[ebp-404h] | [enp-404]中存储的是输入的字符串 |
push edx | 字符串地址入栈 |
call @ILT+15(verifyPwd) (00401014) | 函数跳转 |
add esp,4 | 将函数调用前push的edx值弹出 |
mov byte ptr [ebp-4],al | 将函数返回值赋给bFlag |
题目二
flag==0,即输入字符串为“12345678”
跳转进入函数
进入strcmp
![image-20200323105229337](/images/漏测作业/漏测作业三/image-20200323105229337.png>
- verifyPwd函数:
地址 | 汇编代码 | 注释 | 寄存器 |
---|---|---|---|
00401030 | push ebp | ; 2_1_1.verifyPwd(void) | |
00401031 | mov ebp,esp | ||
00401033 | sub esp,44 | ||
00401036 | push ebx | ||
00401037 | push esi | ||
00401038 | push edi | ||
00401039 | lea edi,[ebp-44] | ||
0040103C | mov ecx,11 | ||
00401041 | mov eax,CCCCCCCC | ||
00401046 | rep stos dword ptr [edi] | ||
00401048 | mov eax,dword ptr [ebp+8] | ||
0040104B | push eax | ||
0040104C | push offset 0043101C | ; ASCII “12345678” | |
00401051 | call strcmp | ; [strcmp | 调用函数 |
00401056 | add esp,8 | eax=0(strcmp函数返回值) | |
00401059 | mov dword ptr [ebp-4],eax | 将寄存器eax的值写入内存 | |
0040105C | xor eax,eax | eax清零 | |
0040105E | cmp dword ptr [ebp-4],0 | flag==0 | 返回值与0进行比较 |
00401062 | sete al | 设置al,如果相等则设置 | |
00401065 | pop edi | eax=1,即verifyPwd返回值为1 | |
00401066 | pop esi | ||
00401067 | pop ebx | ||
00401068 | add esp,44 | ||
0040106B | cmp ebp,esp | ||
0040106D | call _chkesp | ||
00401072 | mov esp,ebp | ||
00401074 | pop ebp | ||
00401075 | retn |
- strcmp函数
地址 汇编代码 注释 寄存器 00408220 mov edx,dword ptr [esp+4] ; ASCII “12345678”(原密码) 00408224 mov ecx,dword ptr [esp+8] ; ASCII “12345678”(用户输入部分) 00408228 test edx,00000003 0040822E jnz short 0040826C 00408230 mov eax,dword ptr [edx] eax=34333231(对应密码前四位,小端存储) 00408232 cmp al,byte ptr [ecx] al与[ecx]第一位比较,相等 al=31 00408234 jne short 00408264 不跳转 00408236 or al,al al不为0 00408238 jz short 00408260 不跳转 0040823A cmp ah,byte ptr [ecx+1] ah=32 0040823D jne short 00408264 不跳转 0040823F or ah,ah 00408241 jz short 00408260 不跳转 00408243 shr eax,10 eax右移16位 eax=00003433 00408246 cmp al,byte ptr [ecx+2] al=33 00408249 jne short 00408264 0040824B or al,al 0040824D jz short 00408260 0040824F cmp ah,byte ptr [ecx+3] ah=34 00408252 jne short 00408264 00408254 add ecx,4 访问后四位数据 ecx=38373635 00408257 add edx,4 edx=38373635 0040825A or ah,ah ah=34 0040825C jnz short 00408230 or结果不为0,跳转至该表第五行,eax被赋值为38373635 0040825E mov edi,edi 00408260 xor eax,eax 所有判断均相等 eax=0 00408262 retn f返回
题目三
方法一
找到跳转语句
修改
跳转成功
方法二
找到返回值设置代码
更改为“返回1”
继续运行,返回eax=1
跳转成功并输出passed
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.