以编程方式将两个 exe 文件合并为一个

Posted

技术标签:

【中文标题】以编程方式将两个 exe 文件合并为一个【英文标题】:Merge two exe files into one programmatically 【发布时间】:2011-01-17 03:10:34 【问题描述】:

有没有办法,以便运行它可以同时执行两个较旧的 exe 文件。我在 google 上发现了一些关于注入代码或 dll 文件的信息,但是是否可以合并两个 exe 文件或将 exe 注入 exe?

提前致谢。

[编辑] 感谢大家。只是对于那些说不可能的人,我不得不说我最终几乎按照一些人建议的方式做到了。它几乎是这样的(我不记得所有的事情了,因为那是很久以前的事了):

[注意:此算法与某些蠕虫和病毒的算法非常相似。我不是黑客或病毒作者!这只能用于实验性或无害的原因 - 在代码中出错可能会破坏目录中的可执行文件。]

1- Exe 检查自身的大小以检测是否有任何东西附加到自身。如果还没有:

     1.1- The exe finds other executable files in its directory (lets call one of them as victim!)
     1.2- it makes a copy of itself (lets call it newMe)
     1.3- it copies the other executable found in the directory to the end of newMe.
     1.4- it deletes the other executable file found and renames newMe to its victim's name.

2- 如果 exe 检测到已添加某些内容,则:

     2.1- Then it copies data from itself (from ORIGINAL_FILE_SIZE to the end of file) to a new file (lets call it newBorn.exe)
     2.2- It runs itself's code and then executes the newBorn.

我说我几乎是这样做的,因为 exe 以这种方式将另一个 exe 附加到自身。但这可以重复以将 2 个甚至 3 个或更多可执行文件附加并执行到一个中。你只需要知道所写程序的 ORIGINAL_FILE_SIZE。

【问题讨论】:

exefusion 有木马恶意软件。 【参考方案1】:

理论上这是可能的,但需要你付出一些努力。

您可以将数据附加到 exe 文件,这就是自解压档案的工作方式。但是,您需要自己的数据格式,类似于文件系统,因为您只有一个平面 .exe 文件。 请参阅这篇 Microsoft 文章(在 google 上有更多内容)http://support.microsoft.com/?scid=kb%3Ben-us%3B84062&x=12&y=13

您打包两个文件的 exe 必须解压这些文件并最终运行它们。

祝你好运。

【讨论】:

【参考方案2】:

不,最好的办法是创建一个运行两个可执行文件的.bat 文件 (Windows)。

@echo off
c:\path\to\first\exe\file1.exe
c:\path\to\second\exe\file2.exe

你也可以在 Linux 中创建一个shell script 来做同样的事情

#!/bin/sh
/path/to/first/exe/file1
/path/to/second/exe/file2

注意,这将在 file2 之前执行 file1。

【讨论】:

这不是一个好建议,而且大多数情况下都行不通。所有三个文件都需要在同一个目录中。也可以将两个二进制文件打包成一个,并让它们都运行。【参考方案3】:

您可以创建自己的 EXE 文件,其中包含两个其他 EXE 文件作为嵌入式资源,然后提取并执行每个文件。

请注意,如果您将嵌入的 EXE 解压缩到其他目录,它可能无法运行。

【讨论】:

怎么样?这样做的工具是什么?【参考方案4】:

从技术上讲,可以在您的 exe 中嵌入一些其他 exes 文件,一些像 upx 这样的打包程序会这样做。所以你应该可以用 2 个 exe 做同样的事情。

在类似 unix 的方式中,您的 exe 可以分叉,然后第一个进程执行第一个旧可执行文件,新进程执行第二个 exe,可能之前在它们之间安装管道。

但这显然不是那么容易做到的,而且很可能对您的需求来说是无用的矫枉过正。 您可能只需要一个小的 .bat 或 .sh

【讨论】:

【参考方案5】:

我注意到您的“以编程方式”限定词,但以防万一您正在做的任何事情都可以接受代码外解决方案...

IExpress 可以构建一个可执行两个其他 EXE 的 EXE。您可以从命令行构建 IExpress 包。

SED 文件:

[版本] 类=IEXPRESS SEDVersion=3 [选项] PackagePurpose=InstallApp ShowInstallProgramWindow=1 HideExtractAnimation=1 UseLongFileName=0 InsideCompressed=0 CAB_FixedSize=0 CAB_ResvCodeSigning=0 重启模式=N 安装提示=%安装提示% DisplayLicense=%DisplayLicense% FinishMessage=%FinishMessage% 目标名称=%目标名称% FriendlyName=%FriendlyName% AppLaunched=%AppLaunched% PostInstallCmd=%PostInstallCmd% AdminQuietInstCmd=%AdminQuietInstCmd% UserQuietInstCmd=%UserQuietInstCmd% SourceFiles=SourceFiles [弦乐] 安装提示= DisplayLicense= FinishMessage= TargetName=C:\combined.exe FriendlyName=示例标题 AppLaunched=run.bat PostInstallCmd= AdminQuietInstCmd= UserQuietInstCmd= FILE0="FirstProgram.exe" FILE1="SecondProgram.exe" FILE2="run.bat" [源文件] SourceFiles0=C:\programs\ [SourceFiles0] %FILE0%= %FILE1%= %FILE2%=

run.bat 文件:

FIRSTP~1.EXE SECOND~1.EXE

当您运行combined.exe 时,firstProgram.exe 将执行。完成后,将执行 secondProgram.exe。如果您希望 firstProgram.exe 和 secondProgram.exe 同时运行,可以通过更改 BAT 文件来完成。

【讨论】:

【参考方案6】:

这就是我用 C++ 编写病毒的方式 System("类型 virus.exe >> not_virus.exe") 但如果您是通过命令提示符执行此操作,则只需执行此操作。 键入 virus.exe >> not_virus.exe 但我期待一种方法,我可以通过要求它首先转到第一行然后将其代码复制到受害者可执行文件中来预先添加它而不是追加

【讨论】:

【参考方案7】:

将数据从 1 个文件复制到第三个文件 记住 eof 的位置。 将二进制文件从第二个文件添加到第三个文件。 然后在 eof 值的末尾数字(以 int 为单位)添加。 在第一个文件中应该是一个代码,它可以将整个文件从这个值的末尾复制到文件末尾到另一个文件。

然后执行。

这很简单。

【讨论】:

你能解释一下怎么做吗,我也面临同样的需求。【参考方案8】:

不,不可能将一个 exe“注入”到另一个中。甚至没有定义此操作,因为您无法控制将对象相互注入时执行的内部操作。

最接近 exe 文件的可能是管道,您可以将一个 exe 文件的输出重定向到另一个 exe 文件的输入:

one.exe | two.exe

【讨论】:

在 Windows 上,我很确定 one.exe 会在 two.exe 启动之前完全执行。不确定这是否是我们想要的。 -1。因为将一个 exe 的输出重定向到另一个 exe 的输入与 OP 的意图不同。非常不同。

以上是关于以编程方式将两个 exe 文件合并为一个的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式利用 Eclipse 的合并和差异查看器

可以将 DLL 合并到 .NET EXE 中吗? [复制]

在 C# 中合并两个音频文件

python 如何把多个文件内容合并到以一个文件

如何将rtf文件合并

如何合并两个文本文件?