压缩与脱壳-脱壳高级篇 上
2007-01-12 20:11:51 来源:WEB开发网摘要:
在PE文件头+80偏移处存放着输入表的地址,输入表包含了DLL被调用的每个函数的函数名和FirstThunk,通常还有Forward Chain和TimeStamp。
当运行程序时系统调用GetProcAddress,将函数名作为参数,换取真正的函数入口地址,并在内存中写入输入表。当你对一个程序脱壳时你可能注意到你有了一个已经初始化的FirstThunk。例如,在我的WIN98上,函数GetProcAddress的入口地址是AE6DF7BF,在98上,所有的KERNEL32.dll函数调用地址看上去地址都象:xxxxF7BF,如果你在输入表中看到这些,你可以利用orignal thunk重建它,或者重建这个PE程序。
好了,我已经告诉你它们是如何工作的,我不是专家,如果你发现什么错误,请告诉我。
2、Import表的重建
原著:TiTi/BLiZZARD
翻译:Sun Bird [CCG]
1. 前言
=======
大家好 :) 我之所以写这篇短文,是由于我在 Dump 时发现,很多加压、加密软件都使得输入表(Import Table)不可用,所以 Dump 出的可执行文件必须要重建输入表。而在普通的讲授 Win32 汇编的站点上我没有找到这样的介绍,所以如果你对此感兴趣,那么这篇短文对你会有些帮助。
例如,为了让从内存中 Dump 出的经 PETite v2.1 压缩过的可执行文件正常运行,必须重建输入表。(对于 ASPack、PEPack、PESentry……也同样)这就是所有 Dump 软件都具备重建输入表功能的原因(例如 G-RoM/UCF 制作的 Phoenix Engine(ProcDump 内含),
或者由 Virogen/PC 和我制作的 PE Rebuilder)。
鉴于这个问题十分特殊,而且比较复杂,所以我假定你已经了解了 PE 文件结构。(你需要阅读有关 PE 文件的文档)
2. 预备知识
更多精彩
赞助商链接