写压缩壳的思路:
提取正常PE的数据,和我们的壳代码合起来得到一个新的PE,就得到了压缩后的PE。
我们需要写两个工程:
1. 加壳器:给指定的程序加壳
2. 壳代码:新PE里的壳代码,进行解压缩,填导入表等操作
为了书写方便,把壳代码和压缩后的代码放在不同的节中。一般把每个节单独压缩,解压缩时也单独处理。
解压缩思路:
由于运行地址不固定,所以代码中不能访问绝对地址,此种代码称为地址无关代码(shellcode)。为实现此目的,所有字符串要保存在栈上,写成字符序列的方式。模块地址可从PEB中获取,并自己实现GetProcAddress。
VS可生成shellcode,要改以下选项:
1. Release
2. 随机基址选项打开
3. 修改入口函数
4. 关闭GS选项
5. 关闭优化