- 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
 | |
| 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.




