文章标题:使用VC自己动手编写加壳程序(6)——打造自己的壳
主要内容:修改程序OEP,使之从壳代码段开始运行,弹出MessageBox后,再运行正常程序。
基本要求:了解VC++6.0基本使用方法;了解PE格式,不熟悉的地方能够通过查阅资料弄懂;
阅读对象:想写壳的新手。高手掠过,本文仅限于写壳入门。
文章类型:原创
文章作者:天漏客 QQ:285252760
完成日期:2009年04月4日
作者主页:www.lilu.name
文章地址:www.lilu.name/Html/heikexuetang/2009-4/6851859376886.html
文章说明:允许转载,但最好注明转载出处。
上次内容是在文件中新添加了一个区段,本次内容将修改添加区段后的文件OEP,使程序从新区段先运行,然后再跳到正常的程序运行。程序运行时会先弹出一个MessageBox对话框,然后正常运行程序。本次内容将详细讲解使用VC程序添加MessageBox对话框。
完成本功能,主要是两大模块。一是修改OEP为壳代码段的运行地址。二是将MessageBox的代码写入壳代码段中。我们知道在VC中编写的函数,经编译器编译后就变成了二进制机器代码,CPU执行的就是机器码。所以现在的问题是将MessageBox函数的代码放入壳代码段中。
修改程序OEP,只需要在EidtHeader函数中增加功能即可,在函数最后面添加修改OEP代码,如下所示。
//修改PE文件头信息,主要是区块个数和镜像大小
void CPEPackerDlg::EditHeader()
{
…………………………
//文件镜像增加
dwSizeOfImage=SectionHeaderOfShell.VirtualAddress+SectionHeaderOfShell.Misc.VirtualSize;
//新区段虚拟大小暂定为0xFFF(4095Bytes),除以0x1000(4096Bytes)目的是为了内存对齐。
//dwSizeOfImage=(dwSizeOfImage+0x1000)/0x1000 * 0x1000;
pOptionalHeader->SizeOfImage=dwSizeOfImage;
//修改程序OEP
pOptionalHeader->AddressOfEntryPoint=SectionHeaderOfShell.VirtualAddress;
}
在壳代码段开头添加跳转到OEP的代码