-
一. 程序以及要求
从0x401168开始 工具:DTDebug 调试程序: helloword.exe 见附件下载
-
二. 开始打开程序找到0x401168
-
双击打开DTDebug
-
接着将helloword.exe程序拖入DTDebug,或者F3打开helloword程序
-
现实是77开头的,修改成00开头的,如下图设置,然后重启
-
用control+g 找到对应的位置
-
在开始的位置按下F2下断点,可以看到背景变成了红色
-
点这个箭头,让程序走到下断点的地方,背景变成了黑色
-
-
三,开始画堆栈图
-
首先画现在的栈即此时ESB和EBP的值
-
按两次F8
执行PUSH 2 PUSH 1
堆栈图
验证图
-
按下F7进入函数,如果按F8会走到0x00401171
执行
按下F7会把0x00401171押入栈里,EIP的值变成0040100A
堆栈图
验证图
jmp指令不影响堆栈,按回车继续操作,来到继续画堆栈图的地方
-
接上图继续画堆栈图
执行PUSH EBP
堆栈图
验证图
-
接着画
执行MOV EBP,ESP
堆栈图
验证图
-
接着上面的接着画
执行SUB ESP,40
堆栈图
验证图
-
接下来画下条指令的堆栈图
执行(下面这三条指令是保存现场)PUSH EBX PUSH ESI PUSH EDI
堆栈图
验证图
-
继续画接下来的指令
执行LEA EDI,DWORD PTR SS:[EBP-40] ; 取[EBP-40]地址编号放到EDI里,堆栈不变,EDI里的值0x0018FEAC
堆栈图
验证图
-
接着画接下来的三条指令
执行(REP受ECX的影响,ECX是几就执行几次,这里是执行16次,因为10是十六进制的)MOV ECX,10 MOV EAX,CCCCCCCC REP STOS DWORD PTR ES:[EDI]
堆栈图
验证图
-
接下来的两条指令
执行(栈顶和栈底不变,执行mov时EAX变成1,执行ADD时EAX变成3)MOV EAX,DWORD PTR SS:[EBP+8] ADD EAX,DWORD PTR SS:[EBP+C]
堆栈图
验证图
-
接下来的三条pop指令
执行(恢复现场)POP EDI POP ESI POP EBX
堆栈图
验证图
-
接下来一条mov指令
执行MOV ESP,EBP
堆栈图
验证图
-
继续
执行POP EBP ;pop带有赋值
堆栈图
验证图
-
倒数第二步
执行(RETN的本质是POP EIP)RETN
堆栈图
EIP的值变成0x00401171
验证图
-
最后一步
执行(这一步是堆栈平衡)ADD ESP,8
堆栈图
-
- 四,总结
1. 想要学好逆向,必须得了解堆栈是什么 2. 画堆栈图是个耐心活,画之前需要了解汇编语言。 3. 函数调用前后堆栈平衡
讨债公司
搬家公司
蓝月传奇辅助
然后呢,后面还有没有其他逆向学习的总结了