本文中的代码均来自《黑客免杀攻防》,如要转载,需写明来源,请勿用于非法用途,作者对此文章中的代码造成的任何后果不负法律责任。
看了一遍书本的第11章,感觉内容确实比较高级,之前虽然自认为是热衷于搞C/C++开发,但是运用windows API的开发真的是太少了。先来看看一个简单的壳的编写。
这个加壳脱壳程序分为三部分,首先是用MFC写的界面程序,这个自然不用多说,主要功能就是调用加壳部分生成的dll文件中的导出函数对PE文件加壳;第二部分则是加壳程序,当然不仅仅是加壳,这其实上就是获得被加壳的PE文件的信息,然后根据这些信息将第三部分,也就是真正的壳加入到PE文件中去,并且修改一系列的值,使得这个壳能够发挥作用;第三部分自然就是真正的壳了,其中也涉及到一些对于PE文件的操作,但是相对于第二部分来说就简单一些。现在来看看具体的步骤,由于第三部分是基础,前两部分都是依靠第三部分来写的,因此按照书上的顺序,先说如何写这个壳。
1.壳的编写
首先,为了减少壳的体积,这里的代码使用了以下处理:
#pragma comment(linker,"/entry:\"StubEntryPoint\"") // 指定程序入口函数为StubEntryPoint()
#pragma comment(linker,"/merge:.data=.text") //将.data合并到.text
#pragma comment(linker,"/merge:.rdata=.text") //将.rdata合并到.text
因为后面第二部分需要对text进行修改,写入一些参数,所以要修改.text的属性。
#pragma comment(linker,"/section:.text,RWE