• 标 题:henryw以前寄给我的一段翻译文章,可做参考。 (2千字)
  • 作 者:hying
  • 时 间:2001-4-12 18:10:37
  • 链 接:http://bbs.pediy.com

我草草翻译了一些内容,可能有些地方不太准确。
作者如果使用一些插件SDK形式来帮助加壳的话,那么将来可能真的需要手动拼接dump出来的可执行程序了。
(对了,hying兄,是否有关于拼接干净的exe程序的文章?)
不知道将来哪个Cracker会来完成如此困难的事情?

我试图按以前的方法重建注册表,没有成功,当然我用的imp_list出来的
import0.bin文件。没来得及试验import1.bin文件。
BTW: 以前用import1.bin可以运行的程序,启动后在revirgin里面看,还是和探测
加壳程序一样报iat需要重建。

国内还没见过讨论如此脱壳方式的文章。
==========================================
一般来说,我们跟踪目标,找到oep,dump它,然后重建iat,将它们贴回去,这就够了。
不过这回有些变化,asprotect1.2和目标程序有了某种联系:

asprotect在492830调用了一些目标代码,就是利用icedump来追踪入口时候,第一站停下来的地方,这里的代码会设置局部内存(local mem allocations),一些标志,然后回到asprotect,最终asprotect跳到程序真正入口:4aec88。

如果你在此处dump,出来的程序无法运行,程序要探测刚才的标志,然后就完蛋了。

我选择了一个简单的方法来解决此问题:
仍在4aec88处dump,不过之前不让程序跳到492830的地方,这样内存是干净的。利用revirgin重建iat,改好sections,不过把入口改为492830,把代码这样改动:
seg000:00492944 pop ebp
seg000:00492945 jmp loc_4AEC88
seg000:00492945 start endp
看见jmp 4aec88了吧,之前有个ret。

这样目标程序自己会在启动时候做asprotect要做的事情,调用这个call,然后会
跳到正常的oep。

现在知道有两个程序:
Advanced Link Catalog v1.00 (http://www.wizetech.com/alc/) and
Chameleon Clock 2.51 (http://www.softshape.com)

.......................
有必要在脱壳过程中跳过这些代码,因为这些东西会引起重建文件以后所有的
runtime错误。但是这样还会在4AEE12出现错误因为0送进了register而不是某个地
址。正如Tseph说的,这个代码会设置(asprotect?)的一些标志,但是它也在程
序启动时候查询注册表来设定程序的一些参数,比如语言,timeformat, showdate,
reg等等。我可以让这个程序运行(这句话的w/o没看懂所以没的翻译),
shareware nag可以运行,程序也启动了,但是此程序使用winamp类似的skin,照
我的方法patch程序,这个功能就不能用了........

提到的其他程序,Advanced Link Catalog,我发现脱壳中只要跳过调用程序的代
码即可,这个call可以在dumping前用/Tracex来找到(注:我现在才知道icedump里
有这等好命令^_^)。不管什么原因吧,程序可以在正常oep地方启动而不用处理丢
失的代码。

此两个程序的注册方式和Asprotect都有联系,至少Registration Key可能在加壳
的时候产生。我不知道注册过程在脱过的文件中是否还存在,但是256个byte的注
册key仍是对未加补丁程序有效的保护。ALC至少可在Hz和我找到的地方做进一步的
限制。

========================================================

Cordialement