VC中,由一个EXE生成另一个EXE

直接生成可行性不大,不过可以有以下几种其他方法:

1、把需要生成的EXE作为资源加到宿主EXE中,当宿主运行后,便可把资源中的EXE读取出来并保存成另一个EXE文件。2、这种办法比较麻烦,但属于最高级的一种,把需要生成的EXE的源代码编译为OBJ文件,最好按照模块或者函数进行编译,把编译完的OBJ文件中的可执行代码段和数据段分别保存在宿主EXE的资源或者数据段中。当宿主运行时,需要生成另一个EXE的时候,把先前保存进去的可执行代码段和数据段按照目标EXE的功能需求取出来,然后修正目标EXE的堆栈描述符和一些地址,制作导入表,生成PE文件头,最后把这些连接起来就生成了目标EXE。这是目前一些高级的木马或病毒程序惯用的手段。宿主EXE在生成目标的EXE的时候其实充当了一个连接器的作用。3、这种方法比之上一个较简单,而且也被广泛使用。将目标EXE的程序写成灵活框架式,即脚本分析器+单独功能实现体。比如LZ要生成的EXE为客户端,此处假设目标EXE的功能仅为基于TCP/IP的数据包接收和发送器。那么在写这个客户端的时候,就可以以一个脚本分析器作为程序的主体,然后根据脚本中的命令来进行数据包的收发工作,从而完成“客户端”的功能。当宿主需要生成这个自定义的EXE的时候,只需将这个已经编译链接完的EXE先从资源或数据段中取出来,然后根据用户需求生成对应的脚本,再将这个脚本添加到目标EXE的资源中即可。在这种方法下,目标EXE的功能和工作模式全部根据脚本来确定,不同的脚本会得到不同功能的“EXE程序”。 配置信息这个就比较简单了。你可以把配置信息按照二进制流的方式追加到EXE的文件结尾(这样会覆盖掉文件版本信息),每次需要读取配置文件信息的时候先把结尾这些数据按照二进制流的方式读入内存,再按照配置信息的格式读取出配置信息。写入也是如此。也可以把配置信息加到EXE的资源中,这样就不会覆盖文件的版本信息了,但是在每次写入之后,如果配置信息的大小改变了,那就需要修正资源描述表。不过我可以教你一个比较“笨”的办法,直接在资源中分配一块足够大的空白空间用于存储配置信息,比如65536个字节,即64K,64k用于一般的配置信息足够大了,每次写入的时候把配置信息按照二进制流的方式写入一个64K大小的空白内存区域,然后把这个64K的区域直接更新到资源中就行了,这样就不用每次都更新资源描述表了。这种方法里,对应的资源种类叫RCData。

你可能感兴趣的:(VC中,由一个EXE生成另一个EXE)