摘要:是否还记得第七章资源表的内容?我们可以将其他文件以自定义资源的形式添加到EXE文件的.rsrc节区中。当然我们也可以将EXE文件中的资源文件释放到本地磁盘。如果释放的资源文件是一个EXE可执行文件,我们还可以自动运行这个EXE文件。本节我们将介绍EXE资源捆绑
是否还记得第七章资源表的内容?我们可以将其他文件以自定义资源的形式添加到EXE文件的.rsrc节区中。当然我们也可以将EXE文件中的资源文件释放到本地磁盘。如果释放的资源文件是一个EXE可执行文件,我们还可以自动运行这个EXE文件。本节我们将介绍EXE资源捆绑的方法。
本节必须掌握的知识点:
资源捆绑实现思路
资源捆绑示例
为了将多个文件以资源的形式添加到一个EXE文件中,我们需要编译一个EXE程序。编译时,以自定义资源的方式将要捆绑的文件添加到EXE的.rsrc资源节区。EXE程序的功能代码为:找到并释放资源节区指定的资源文件到磁盘指定目录,并自动运行该目录中的EXE可执行文件。
■实现EXE资源捆绑的步骤:
●编写EXE程序。
●添加资源文件。
●运行EXE程序,并释放资源文件。
●自动运行释放的可执行文件。
接下来我们将分步骤测试一些基本的功能模块。
以15.2.2捆绑器示例程序为例,这种方法需要3个文件。
■捆绑器
捆绑器通过鼠标右键菜单操作,向列表框中添加、删除和捆绑要捆绑的文件。如图15-2所示。
●鼠标右键菜单:
ADD:列表框添加捆绑文件。
REMOVE:列表框移除捆绑文件。
BIND:捆绑列表文件。
图15-2 捆绑器
●添加捆绑文件对话框
捆绑文件类型:勾选为可执行文件,否则为其他文件。
●安装目录:选择释放宿主文件中被捆绑的文件安装目录。
System Directory:系统目录C:\Windows\System32。
Temporary Directory:临时文件目录C:\用户\当前用户名\AppData\Local\Temp。
Windows Directory:C:\Windows。
●实现过程
1.宿主文件作为自定义资源,被添加到捆绑器中。宿主文件可以选择一个体积不是很大的一个任意文件。本例将调度程序作为了宿主文件。如图15-3所示。
图15-3 资源中添加宿主文件
2.列表框中选择添加要捆绑的文件。点击鼠标右键,选择“Add”菜单添加捆绑文件。并在对话框窗口选择是否为可执行文件,以及释放捆绑文件的路径。捆绑文件添加到列表框后,会显示文件名、文件大小、安装目录和是否执行四个栏目。
3.删除列表框文件。点击鼠标右键,选择“Remove”菜单,删除列表框文件。
4.捆绑文件。点击鼠标右键,选择“Bind“菜单。加载资源中的宿主文件,并释放宿主文件,将其写入磁盘文件bound.exe。
5.打开宿主文件bound.exe。将捆绑文件添加到宿主文件尾。首先添加的是struct file_data结构作为捆绑文件的文件头。
struct file_data {
TCHAR name[40]; //文件名
unsigned long size; //文件大小
int key; //密钥
short path; //安装目录
short run; //是否执行
} *pfile_data;
添加文件头后,读取捆绑文件到缓冲区,做加密后写入宿主文件尾。每个捆绑文件以此类推。
■宿主文件
宿主文件bound.exe文件尾被添加捆绑文件。每个捆绑文件都包含一个struct file_data结构,用于描述捆绑文件的信息,以此作为调度程序的依据。
■调度程序
调度从程序stub.exe。调度程序负责打开宿主文件,先读取捆绑文件的文件头,再读取捆绑文件。先将捆绑文件读取到缓冲区,解密后再将其写入存盘文件。如果是可执行文件,则运行该捆绑文件。
来源:狗血奇葩趣事