00.aspack.exe
程序下载链接:https://pan.baidu.com/s/1bqLALZS7wx2Cn4iw7qUtWw
提取码:f549
1 寻找OEP
- ESP 定律(单步步过 pushad,对 ESP 下硬件访问或写入断点,popad 后会再次访问到 ESP 的地址,所以会断下,OEP就在附近了)
- F9运行,断下
- push+ret => jmp
- 进入这个 call 查看(根据一些程序的特征定位,也可以找到OEP,这里进入这个call确认一下)
2 Dump 内存到文件
- 使用OD,在 OEP 处 -> 使用OllyDump 脱壳调试进程
- 会新生成一个文件,此时再用 ImportREC 修复IAT
3 修复文件
- 但此时打开这个
00.aspack.dump_.exe
还是出错,因为没有关闭随机基址,再使用010Editor
关闭随机基址即可(关键点4081
)
方法二(特征码搜索寻找OEP)
- 先让程序运行,再OD中查看模块窗口,双击进入exe模块
- 可以看到,该程序对 IAT 的调用方式(FF15…)
- 同时可拖入PEiD,查看其链接器版本,基本能确定是VS编写的程序
-
从而可以搜索特征码,寻找OEP(call+jmp)
- OD中快捷键
Ctrl+B
:E8 ?? ?? ?? ?? E9
- OD中快捷键
- 下图中找到的 OEP,和刚第一种方法搜到的一样
- 后续 Dump 和 修复 和上面的相同(注意设置硬件执行断点,下次进行 Dump 时可断在刚找到的OEP)
特征补充
① 二进制特征
比如 release版的VS2013 是:
oep入口特征:E8???E9
第一个CALL内的特征:5657BF4EE640BBBE0000FFFF3BC7
② API特征
比如 release版的VS2013 的第一个API调用是:
GetSystemTimeAsFileTime
比如 vc6.0 的第一个API调用是:
GetVersion
比如 Delphi 程序第一个API调用是:
GetModuleHandleA
③编译器特征
IAT调用不同的编译器生成的调用机器码是不一样
vs -》 call [IAT地址] -》 FF15 xx xx xx xx
delphi -> jmp [IAT地址] -》 FF25 xx xx xx xx