- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第4章 时间控制
第4章 时间控制
PAGE 106
PAGE 106
PAGE 107
PAGE 107
实例 捆绑exe文件
实例目的
捆绑exe文件的意思是将多个文件打包在一起,合并成一个最终的可执行文件,当运行这个最终的可执行文件时,就相当于运行了合并前的多个可执行文件。这种程序在木马程序合并中会经常用到,本例就实现两个可执行文件的捆绑,选择两个可执行文件后,程序将其捆绑在一起,生成合并后的文件,运行这个合并后的文件,则两个可执行文件都被运行了。
实现方法
捆绑可执行文件的基本思想非常简单:
首先,用fopen函数建立一个新的二进制文件并先写入捆绑程序的数据和文件长度;
其次,写入要捆绑的第一个文件的数据和文件长度;
然后,写入要捆绑的第二个文件的数据和文件长度;
……
最后,写入要捆绑的最后一个文件的数据(不需要长度了,因为长度是为了给各个exe文件定位)。
执行合并文件时,将上面步骤倒过来即可:
首先,打开捆绑程序文件,得到文件长度,将文件指针定位到第一个被捆绑文件的位置;
其次,读取第一个捆绑文件的长度和数据,将数据写入第一个新建文件中。同样的读取第二个捆绑文件的长度和数据,将数据写入第二个新建文件中,……读取最后一个捆绑文件的数据,写入最后一个新建文件中。
然后,用Create_Process函数运行这些可执行文件;
最后,再删除这些可执行文件即可。
程序代码
1. 利用AppWizard生成一个基于对话框的工程,其他步骤均采用VC的默认配置。
2. 由于代码较长,这里只列出主要的函数代码,即捆绑文件的代码和释放文件的代码,其他的程序部分请读者参看程序。
//绑定多个文件为一个可执行文件
bool CBindFileDlg::Bind_Files()
{
FILE* myself; //自身文件
FILE* out; //最终合成文件
FILE* in; //待绑定文件
nt bytesin;
nt totalbytes = 0;
struct _stat ST;
unsigned int finder = 0
unsigned int i, k;
int l=1; //状态显示
char buff[20]; //状态显示
his_name = strFirstFilePath; //第一个绑定的文件名
_stat(my_name, ST);
modify_data.my_length = ST.st_size;
if (modify_data.my_length == 0)
{
MessageBox(绑定文件,自身文件长度为零!,错误);
return false;
}
buf = (BYTE *)malloc(modify_data.my_length);
if (buf == NULL)
{
MessageBox(绑定文件,分配自身文件长度失败!,错误);
return false;
}
myself = fopen(my_name, rb); //打开自身文件
if (myself == NULL)
{
free(buf);
MessageBox(绑定文件,打开自身文件时失败!,错误);
return false;
}
bytesin = fread(buf, 1, modify_data.my_length, myself);
fclose(myself);
if (bytesin != modify_data.my_length)
{
free(buf);
MessageBox(绑定文件,全读取自身文件失败!,错误);
return false;
}
for (i = 0; i modify_data.my_length - sizeof(finder); i += sizeof(finder))
{
for (k = 0; k sizeof(finder); k++)
{
if (buf[i+k] != ((BYTE*)finder)[k])
break;
}
if (k == sizeof(finder)) //定位并保存自身数据文件大小
{
memcpy(buf+ i, modify_data, sizeof(modify_data));
break;
}
}
if (i = modify_data.my_length - sizeof(finder))
{
free(buf);
MessageBox(绑定文件,定位自身文件失败!,
文档评论(0)