新书推荐:15.1 资源捆绑

摘要:是否还记得第七章资源表的内容?我们可以将其他文件以自定义资源的形式添加到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。调度程序负责打开宿主文件,先读取捆绑文件的文件头,再读取捆绑文件。先将捆绑文件读取到缓冲区,解密后再将其写入存盘文件。如果是可执行文件,则运行该捆绑文件。

来源:狗血奇葩趣事

相关推荐