徐景周 一直是我敬佩的前辈,这是他多年头写的代码,有兴趣的看看!
将多个文件合并成一个最终可执行文件,运行这个最终文件时,就相当于运行了合并前的多个文件。这种程序在木马程序合并中会经常用到,你想知道它是怎么用程序实现的么?下面我就用我用VC6.0做的一个文件捆绑器的例子代码来告诉你,程序运行后界面如下:
基本组成思想:其实,其中的构成思想非常简单。建立一个新的二进制文件,先写入你的捆绑程序的数据和其文件长度,再 写入你要捆绑的第一个文件的数据和其文件长度,后再直接写入你要捆绑的第二个文件的数据和文件长度……,最后就可直接写入你要捆绑的最后一个文件的数据 (不需其文件长度)。最终文件被执行时,也就是将上面的方法思想倒过来既可。(下面实例仅告诉你如何实现二个文件的捆绑,至于多个文件的捆绑,读者只需略 加改动既可,详情请细看下载后的实例代码。)
下面我来讲讲如何具体将其来实现:
1、捆绑多个文件为一个可执行程序
先得到自身捆绑程序的文件长度和第一个要捆绑文件的文件长度,枚举第一个要捆绑文件有无图标,有的话就用它做为最终生成文件的图标,否则用自身捆绑程序所 带默认图标做最终生成文件的图标。在新建二进制文件中写入自身捆绑程序的数据和其文件长度,再写入第一个要捆绑文件的数据及其文件长度,最后直接写入第二 个文件的数据既可。
捆绑涵数代码实现如下:
2、释放最终合成文件并同时运行它们。
打开自身文件,从中得到自身捆绑程序的文件长度,便可将文件指针定位到第一个被捆绑文件的位置,读取其文件长度和其数据,将其读出数据写入第一个新建文件 中。同样,通过已读取的自身捆绑程序文件长度和第一个被捆绑文件的文件长度加上其保存这两个文件长度值的字节数,既可准确定位第二个被捆绑文件的位置,读 取其数据,写入到第二个新建文件中。同时,运行这两个文件,最后再删除这两个文件既可。
释放最终合成文件的代码具体实现如下:
其中具体实现细节问题,可在下载实例代码后,仔细查看既可(内有详细注释)。
原文作者: 徐景周 未来工作室(Future Studio)
本文转自:http://www.vckbase.com/vckbase/vckbase12/vc/nonctrls/misc_21/1221002.htm