2009-08-27 11 views
7

C++を使用してRAMから実行可能ファイルを実行するにはどうすればよいですか?C++を使用してRAMから実行可能ファイルを実行するにはどうすればよいですか?

実行ファイルはRAMにあり、私はアドレスを知っていますが、私はどのように私のプログラムを呼び出すのですか?

+0

このコードはCodedomによって生成されたので、これをc#としてタグ付けしましたか? –

+0

ちょうど興味があります - オペレーティングシステムとは何ですか、あなたは解決しようとしている問題は何ですか? – grigy

+3

私はいくつかのアプリケーションをクラックさせようとしていると思います(Martinの返答に関するArmenのコメントを参照)。 –

答えて

1

あなたはあなたと同じ時間に実行されている別のアプリケーションと通信することを意味しますか?これは、使用しているオペレーティングシステムによって異なります。いずれにしても、WikipediaにはInterprocess Communicationに関する記事があります。

1

ディスクから実行するのと同じ方法です。あなたのプログラムは、それが既にロードされているか(つまりRAMにあるか)、ディスク上にあるかどうかは分かりません。これは、オペレーティングシステムによって抽象化されています。

6

EXEファイルの内容をRAMにロードして、その実行可能ファイルを実行したいのですか?

あなたはEXEについて話しているので、私はあなたがWindowsで動作していると仮定しています。私の知る限り、Windowsはこれを行うことができません - あなたの唯一の選択肢は、実行可能ファイルをファイルに保存して実行することです(例えば、CreateProcessを使用)。

を編集します。プロセスを実行する方法は次のとおりです。 C++で

:C#ので

STARTUPINFO si; 
PROCESS_INFORMATION pi; 

ZeroMemory(&si, sizeof(si)); 
si.cb = sizeof(si); 
ZeroMemory(&pi, sizeof(pi)); 

if(!CreateProcess("myfilename.exe", NULL, NULL, NULL, FALSE, 0, NULL, 
    NULL, &si, &pi)) 
{ 
    // An error occurred 
} 

using System; 
using System.Diagnostics; 

Process.Start("myfilename.exe"); 
+0

yesssssssssss正しいのですが、CreateProcessはどのように使用できますか? ありがとうございました –

+0

私はハードドライブにそのexeファイルを持っていません。 –

+0

あなたはその他のプロセスの作者ですか?もしそうなら、それと通信してリソースをハードディスクに戻します。または、最初の場所でハードディスクから同じ元のリソースを使用します。 –

10

物事のこの種は、世界の暗いコーナーの外に通常付属しています。 ;-)

metasploitのようなツールと組み合わせると、ラムの外にプロセスを作成するのが魅力的なので、2,3人の人がCreateProcess()で発生するすべてのものを再実装しようとしました。しばらくして、彼らは、これを動作させるにはあまりにも複雑すぎることを知りました(this PDFサイト12fを参照)。別の解決方法を見つけようとしました。ここにあります: 普通のCreateProcess notepad.exe)が、ThreadSuspendedで起動します。 その後、このプロセスに新しいスレッドが挿入され、メモリからいっぱいになります。その後、彼らはこのスレッドを実行するように指示したので、メモリからいっぱいになった新しいプロセスが得られました。

これはちょうど大きな絵であり、このことを行うには全体的な混乱(通常は正しい方法ではない)です。あなたが本当にこの部分に興味があるなら、あなたは検索する考えがあります。

そして、C#でこれを行うことはできないと思います。これは通常、

+0

ところで、最初のアプローチについて何が難しいのかを指定できますか? – jpalecek

+0

@jpalecek:*最初のアプローチ*とはどういう意味ですか?自分でプロセスを作成することを意味する場合。私は賢い人たちがちょうどあきらめた記事を覚えているとしか言いようがありません。たぶん、私の記事にあるキーワードの中には、もう一度それを見つけるのに役立つものがあります。 ThreadSuspendedでプロセスを開始するつもりなら、新しいスレッドを既存のプロセスに挿入する方法を調べるよりも、これはまた、簡単ではありません(あなた自身でプロセスを作成しようとするよりも簡単です)。 – Oliver

+0

最初のアプローチでは、自分でプロセスを作成することを意味しました。私はちょっとグーグルでこれを見つけた:http://bytes.com/topic/python/answers/585637-execute-binary-code http://pentest.cryptocity.net/files/exploitation/winasm-1.0.1.pdf fork()のような部分は難しいようです。 OPがフォークする必要があるかどうかは不明です。 – jpalecek

関連する問題