• 标 题:寻找真正EP的简易方法-针对 AsProtect (1千字)
  • 作 者:cloudnumber9
  • 时 间:2000-7-24 15:51:35
  • 链 接:http://bbs.pediy.com

这也是我昨天才想到的。
首先,用 ProcDump 看一下被保护的程序:
下面以 arpr 1.0 build 45 为例;下载地址可找前面的文章。
Entry Point : 5c001
Image Base  : 400000
idata : Virtual Offset : 18000
所以,程序的第一个指令的位置是:45c001 (image base + entry point)
而 idata 的位置是: 418000 (image base + virtual offset)
由经验可知:AsProtect 所加密的数据一般都从 41c 这个偏移开始,
所以,由下列方法可以迅速找到真正的 Entry Point.
1. 启动 trw2k, 输入 faults off
2. 运行 arpr, 在程序空间设断点,bpx cs:45c001
3. 退出 arpr 然后再次运行 arpr
  这时trw2k 会在 arpr 第一条指令处中断。
4. 输入 bpmd cs:41841c (418000+41c), 如果已存在则输入 be 2,
  然后继续运行。
5. 第一次会在 repz movsw 处中断,这是程序在导入数据,继续运行。
6. 第二次会在 stosd 处中断,这时程序在生成加密的数据。
  这里也是修正 import 表的位置,这时最好输入 bd 2。
7. F10 运行完这段代码,返回第一层。
8. 输入 bpx cs:401000 (这是程序的真正EP)
9. F10 继续运行,你会发现在某一个 call 你会来到 401000
  请记住那个 call 的特征,然后再从 3 做到 9。
10. 这一次在该中断处 F8 进入第二层。
11. 在第二层继续 F10, 又会在一个 call 处 来到 401000
    记住其特征,然后重复做 3 - 11。
12. 在第三层的某处有一个 ret 会来到 401000。
    那个 ret 就是我们要找的最后一条指令。
重复上述步骤后你将熟悉所有代码的特征,这样下次就可以在由 AsProtect 保护的程序中寻找到正确的 EP 然后脱壳。

-c10udnumber9-
2000.7.24