16

有没有办法以编程方式将两个 exe 文件合并为一个,以便运行它可以同时执行两个较旧的 exe 文件。我在谷歌上发现了一些关于注入代码或 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 即可。

4

8 回答 8

6

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

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

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

祝你好运。

于 2010-02-15T20:09:49.443 回答
5

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

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

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

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

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

于 2010-02-15T19:55:00.297 回答
5

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

请注意,如果您将嵌入的 EXE 解压缩到不同的目录,它可能无法正常工作。

于 2010-02-15T20:07:29.137 回答
3

从技术上讲,可以在你的 exe 中嵌入一些其他的 exe 文件,一些像 upx 这样的打包程序会这样做。因此,您应该能够对 2 个 exe 执行相同的操作。

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

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

于 2010-02-15T20:09:19.077 回答
3

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

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

SED 文件:

[版本]
Class=IEXPRESS
SEDVersion=3
[选项]
PackagePurpose=InstallApp
ShowInstallProgramWindow=1
HideExtractAnimation=1
UseLongFileName=0
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage %
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles
[字符串]
InstallPrompt=
DisplayLicense=
FinishMessage=
TargetName=C:\combined.exe
FriendlyName=示例标题
AppLaunched=run.bat
PostInstallCmd=
AdminQuietInstCmd=
UserQuietInstCmd=
FILE0="FirstProgram.exe"
FILE1="SecondProgram.exe"
FILE2="run .bat"
[SourceFiles]
SourceFiles0=C:\programs\
[SourceFiles0]
%FILE0%=
%FILE1%=
%FILE2%=

运行.bat 文件:

FIRSTP~1.EXE
第二~1.EXE

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

于 2010-02-15T20:24:32.623 回答
2

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

于 2013-11-21T00:05:04.743 回答
1

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

并执行。

这是很简单的方法。

于 2010-02-15T20:08:27.050 回答
-4

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

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

one.exe | two.exe
于 2010-02-15T19:56:15.723 回答