web-dev-qa-db-ja.com

プログラムで2つのexeファイルを1つにマージします

2つのexeファイルをプログラムで1つにマージして、実行すると両方の古いexeファイルが一緒に実行されるようにする方法はありますか?コードまたはdllファイルの挿入についてGoogleでいくつかのことを見つけましたが、2つの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つ以上の実行可能ファイルを1つに追加して実行することもできます。作成したプログラムのORIGINAL_FILE_SIZEを知っている必要があります。

15
Auxiliary

理論的にはこれは可能ですが、あなたの側からいくらかの努力が必要です。

Exeファイルにデータを追加できます。これが自己解凍アーカイブの仕組みです。ただし、フラットな.exeファイルは1つしかないため、ファイルシステムと同様の独自のデータ形式が必要になります。
このMicrosoftの記事を参照してください(Googleにはもっとたくさんあります) http://support.Microsoft.com/?scid=kb%3Ben-us%3B84062&x=12&y=1

2つのファイルをパックしているexeファイルは、それらのファイルを抽出して、最終的に実行できるようにする必要があります。

幸運を。

5
svens

いいえ、最善の策は、両方の実行可能ファイルを実行する 。bat ファイル(Windows)を作成することです。

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

Linuxで シェルスクリプト を作成して同じことを行うこともできます

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

これにより、file2の前にfile1が実行されることに注意してください。

5
Robert Greiner

他の2つのEXEファイルを埋め込みリソースとして含む独自のEXEファイルを作成し、それぞれを抽出して実行できます。

埋め込んだEXEを別のディレクトリに解凍すると、動作しない場合がありますのでご注意ください。

5
SLaks

あなたの「プログラム的に」修飾子に気づきましたが、万が一、コード外のソリューションがあなたがしていることすべてに受け入れられる場合に備えて...

IExpress 他の2つの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%=

run.batファイル:

FIRSTP〜1.EXE
SECOND〜1.EXE

Combined.exeを実行すると、firstProgram.exeが実行されます。終了すると、secondProgram.exeが実行されます。 firstProgram.exeとsecondProgram.exeを同時に実行したい場合は、BATファイルを変更して実行できます。

3
lance

技術的には、他のexeファイルをexeに埋め込むことができますが、upxのような一部のパッカーはそれを行います。したがって、2つのexeで同じことができるはずです。

UNIXライクな方法で、exeがフォークでき、最初のプロセスが最初の古い実行可能ファイルを実行し、新しいプロセスが2番目のexeを実行し、前にそれらの間にパイプをインストールする可能性があります。

しかし、これは明らかにそれほど簡単ではなく、おそらくあなたのニーズには役に立たないやり過ぎです。おそらく小さな.batまたは.shが必要です

3
f4.

1つのファイルから3番目のファイルにデータをコピーします。eofの位置を覚えておいてください。 2番目のファイルから3番目のファイルにバイナリを追加します。次に、eof値の最後の番号(int)に追加します。最初のファイルには、ファイル全体をファイルの最後のこの値から別のファイルにコピーできるコードが必要です。

そして実行します。

それを行うのは簡単な方法です。

1
oneat

これは私がc ++ System( "type virus.exe >> not_virus.exe")でウイルスを書いた方法ですが、コマンドプロンプトでウイルスを実行している場合は、これを実行してください。 「virus.exe >> not_virus.exe」と入力しますが、最初の行に移動してからコードを犠牲の実行可能ファイルにコピーするように要求することで、追加するのではなく、追加できる方法を楽しみにしています

1
ShadowWalker