5

私は自分の学習目的でメモリ変更プログラムを作成しています。私の友人は、トリガーしたい別のプログラムの機能を指摘しました。

関数は、他のプログラムの 0x004B459C にあります。メモリの読み取りと書き込みの方法は知っていますが、プログラムからこの機能をトリガーするにはどうすればよいですか。この他のプログラムのソースはありません。

私の質問は、この16進コードを知っている場合、関数を注入する必要がありますか?それとも、これをトリガーするためにメモリに何かを書き込むだけですか?

4

2 に答える 2

3

いくつかの基本的なアーキテクチャの基礎が欠けています:-)別のプロセスからアドレスを知っている関数を単純に呼び出すことはできません! 考えてみてください。これは、プログラムが任意のプログラムのメモリを取得してコードを実行できることを意味します。これは混乱し、完全に安全でない環境になります。最初にいくつかの基本事項:1)Windowsは、自分のプロセスのメモリのみが表示されることを保証します。OS(Windowsでさえ)の最も重要な原則の1つは、もちろんメモリを含むプロセスを分離することです。2) アクセス許可について考えました。通常、実行するコードはすべてユーザー アカウントで実行する必要があり、別のプロセスは別のプロセス アカウントを意味する場合があります。

答えは簡単です。プログラムが .NET/C# の場合は、プロセス間通信のために .NET フレームワークが提供するものを確認してください。これは、すべてのプラットフォーム、Java、Windows ネイティブ、.NET が公式の方法を提供するために検索する必要があるものです。プロセスが互いにどのように通信するか、それはプロセス間通信と呼ばれます.NETフレームワークで確認してください

于 2013-04-02T17:28:25.840 に答える
3

本当に欲しいものは何か、少し考えてみてください。他のプロセスにこの関数を実行させたい。プロセスはコードを実行するのではなく、コードを実行するのはスレッドです。他のプロセスが通常の操作の一部としてこの関数を呼び出すようにする場合は、他のプロセスのスレッドの 1 つがそれを呼び出すようにする入力などを把握する必要があります。一般的に言えば、他の方法で実行すると、他のプロセスが破損するリスクがあります。スレッドを別のプロセスに挿入して、関心のある関数を呼び出させることができます ( CreateRemoteThreadを参照)。この関数がメッセージ ポンプ スレッドで呼び出されることを意図している場合は、メッセージ フックを挿入できます。他のプロセスに特別なメッセージを送信し、フックから呼び出します。他にもいくつかの方法 (APC) がありますが、これらはまだ複雑で、利益はほとんどありません。

于 2013-04-02T15:39:21.740 に答える