文章目录
- 声明
- 单步调试
- 第一个call(步入)
- 第二个call(步入)
- 第三个call(步过)(GetModuleHandleA)
- 第四个call(步过)(GetProcAddress)
- 第五个call(步过)(VirtualAlloc)
- 第五个call(步过)(VirtualAlloc)
- 第六个call(步过)(未知)
- 第七个call(步过)(VirtualFree)
- 第八个call(步过)(VirtualFree)
- 第九个call(步过)(GetModuleHandleA)
- 第十个call(步过)(GetProcAddress)
- 第十一个call(步过)(VirtualProtect)
- 第十二个call(步过)(VirtualProtect)
- 终点:
- ESP定律
- 单步直达
- 两次内存镜像
- 模拟跟踪
- SFX
声明
首先记住刚开始的时候ESP的值
单步调试
还是那句话,遇到向下的跳转让它实现,向上的直接F4就行

ESP的值是0x0133FBE4
第一个call(步入)

第二个call(步入)

第三个call(步过)(GetModuleHandleA)

第四个call(步过)(GetProcAddress)

第五个call(步过)(VirtualAlloc)

第五个call(步过)(VirtualAlloc)

第六个call(步过)(未知)

第七个call(步过)(VirtualFree)

第八个call(步过)(VirtualFree)

注意:

在0x6C23F时,因为此时是一个loop循环,然后下面是一个jump,而且是向上跳,所以直接在0x6C243按下F4
第九个call(步过)(GetModuleHandleA)

第十个call(步过)(GetProcAddress)

第十一个call(步过)(VirtualProtect)

第十二个call(步过)(VirtualProtect)

注意:这里有个向上跳转,然后跳转代码下行即是函数,前面已经有所介绍,所以直接在函数下一行按下F4即可

终点:

找到popad,然后下一行代码跳转让它实现,即到0x6C420,紧接着即到了OEP位置

ESP的值是0x0133FBE4,保持了ESP不变定律
ESP定律
找到ESP突变的点。(记住是突变(感觉应该就是变化很大))

ESP的值0xDEC000
执行完pushad之后:
ESP的值0xB9FE94,即突变了,下面的操作是突变后立刻需要做的:
首先,dump数据区

然后设置硬件访问断点

特别注意,是硬件访问断点,千万别下成硬件写入断点和硬件执行断点
紧接着运行即可

然后就到达了下面这种代码:

随便单步运行几步就可看到

收尾
别忘了把硬件访问断点给删除了:



单步直达
搜索操作:(ctrl +F)

第一次搜索后

不是,接着下一次搜索
第二次搜索(ctrl +L):
直接ctrl +L

不是,接着下一次搜索
第三次搜索:

找到了。单步执行一下即可。
两次内存镜像
第一次断点(.rsrc)

然后运行
第二次断点(.text(偏移一般是1000))

然后运行
来到这里

单步向下运行几步即可
模拟跟踪
第一步:寻找



找到这种段的地址
第二步:搜索
在命令行里面搜索



输入:tc eip<0006C000 记住tc后面有个空格。。然后回车

紧接OD左上角这里会有跟踪字眼

SFX



然后就可以看到这种:

根据题目选择第二个或者第三个

然后点击

紧接着就到了这里

6733

被折叠的 条评论
为什么被折叠?



