本文为本人 大神论坛 逆向破解脱壳学习笔记之一,为本人对以往所学的回顾和总结,可能会有谬误之处,欢迎大家指出。
陆续将不断有笔记放出,希望能对想要入门的萌新有所帮助,一起进步
堆栈图
首先给定一段反汇编代码,分析该段代码的堆栈的变化情况,并绘制出堆栈图
函数调用
00401168 |. 6A 02 push 0x2
0040116A |. 6A 01 push 0x1
0040116C |. E8 99FEFFFF call HelloWor.0040100A
00401171 |. 83C4 08 add esp,0x8
CALL内部
00401040 /> \55 push ebp
00401041 |. 8BEC mov ebp,esp
00401043 |. 83EC 40 sub esp,0x40
00401046 |. 53 push ebx
00401047 |. 56 push esi
00401048 |. 57 push edi
00401049 |. 8D7D C0 lea edi,dword ptr ss:[ebp-0x40]
0040104C |. B9 10000000 mov ecx,0x10
00401051 |. B8 CCCCCCCC mov eax,0xCCCCCCCC
00401056 |. F3:AB rep stos dword ptr es:[edi]
00401058 |. 8B45 08 mov eax,dword ptr ss:[ebp+0x8]
0040105B |. 0345 0C add eax,dword ptr ss:[ebp+0xC]
0040105E |. 5F pop edi ; HelloWor.00401171
0040105F |. 5E pop esi ; HelloWor.00401171
00401060 |. 5B pop ebx ; HelloWor.00401171
00401061 |. 8BE5 mov esp,ebp
00401063 |. 5D pop ebp ; HelloWor.00401171
00401064 \. C3 retn
开始分析
分析流程较为冗长,可能会有些乏味,可以先看最后的流程总结,再来看分析的细节
我们现在开始逐语句分析堆栈的变化情况:
执行前
寄存器状态
堆栈内容
初始堆栈图
我们观察堆栈的情况:
此时ESP:0012FF34 EBP:0012FF80
结合寄存器和堆栈内容绘出简易堆栈图
执行中
压入参数
00401168 |. 6A 02 push 0x2