以前看过一篇文章《捆绑任意可执行文件做木马》深感作者对汇编运用之熟练。但经过实际练习感觉到办法还有些欠缺,比如说修改文件头AddressOfEntryPoint域的RVA这一招连360都盯上了。另外创建一个节来写入数据使程序变得臃肿。实际上每一个可执行文件的代码节都有很大的剩余空间没利用,我们只要在剩余空间里写入不到200个字节的Dll启动代码就行了。
本文假设读者已经具备了汇编语言pe结构体和使用msdn的能力
本文的主要思路是:
找出目标文件剩余空间
将开始的代码修改为跳转指令跳转到指定的代码处
在剩余空间里写入启动代码
在剩余空间里写入被修改的代码和回跳代码
被感染后的文件执行流程如图一所示:
还是看看具体的实现代码吧:
对一个pe文件修改最方便的还是用CreateFile()CreateFileMapping()之类的api函数来创建一个文件映像。这些就不多说了不懂的可以看msdn。
假设我们得到的文件映像基地址是pFileImage首先定位文件的代码段(这里需要用到pe文件的知识)