20

Dll インジェクションに出くわしたとき、私は最近インターネットを閲覧していました。

面白い題材だと思いますが、その目的が何なのかわかりません。

ゲームやソフトウェアのクラッキング/ハッキングに使用できると読みましたが、何かポジティブなことをすることも可能ですか?

もしそうなら、それは何に使用できますか?

そして、どの言語がこれをサポートしていますか?

記録のために、私は得た知識でゲームをクラック/ハッキングしようとするつもりはありません。違法なことをするつもりはありません!

時間をありがとう、

エメリオン

ps: この件に関するウェブサイトや本を教えていただければ幸いです。

4

3 に答える 3

21

私の頭に浮かぶいくつかの用途があります:

  • ホット パッチ: 実際にプロセスをシャットダウンしたり再起動したりせずに、コードの一部を更新/パッチすることができます。Microsoft 自体は、関数の前に 5 バイトの NOP ブロックを付けることで、Windows の大部分がホット パッチ可能であることを確認しました。なんで?5バイトでコードの他の部分にJMPできるため、ホットパッチは基本的にプレフィックスバイトをJMPで更新/パッチされたコードに上書きし、ほら、あなたのコードはまったく新しいことをします. これは、ターゲット プロセスに新しいコードをロードするために DLL インジェクションと一緒に使用されることが多く、必須ではありませんが、用途の 1 つです。

  • ロギング: 同じ精神で、迂回コードは、ロギングの目的で関数の前に付けるためによく使用されます。つまり、どのパラメータで呼び出されているかを確認します。また、DirectX アプリケーションからの画面出力を記録する一部のアプリケーションは、DirectX 呼び出しを迂回することによってこれを行います。これには、呼び出しを監視するプロセスに DLL を挿入することも含まれます。

  • サブクラス化: OOP の意味ではなく、Windows の意味で、つまり、既存のウィンドウの動作を変更するために新しい WndProc を提供します。SetWindowLongPtrを介して別のメッセージ処理ルーチンを簡単に設定できますが、これに対する制限要因は、関数がターゲット プロセスのアドレス空間に存在する必要があることです。ここで再びインジェクションの出番です。DLL で新しい実装を提供し、これをターゲット プロセスにインジェクトして を呼び出しますSetWindowLongPtr。これは、たとえば、外部ウィンドウにカスタムの追加描画を提供するために使用できます。

私は、医療サービスの重要な通知システムのアップタイムを確保するためにホット パッチを使用することから、独自の記録管理 (当時はすでに死んでいたソフトウェア ショップ) を使用して、本格的な CRM ソリューションとリアルタイムで対話することができます。

いつものように、それはあなたの箱の中の単なるツールであり、それについて本質的に「悪い」ものは何もありません. どのような目的で使用するかが重要です。

于 2010-09-29T08:25:10.667 に答える
7

DLL インジェクションを使用して WinAPI 関数への呼び出しをインターセプトすることに焦点を当てた、まさにこの主題に関する Microsoft Research で行われた非常に優れたプロジェクトがありました。

これはリンクです。しばらくの間、あなたを忙しくさせるはずです:

于 2010-09-29T08:28:14.347 に答える
3

コンピュータ プログラミングでは、DLL インジェクションは、別のプロセスにダイナミック リンク ライブラリを強制的にロードさせることによって、別のプロセスのアドレス空間内でコードを実行するために使用される手法です。[1] DLL インジェクションは、サード パーティの開発者が、プログラムの作成者が予測または意図していなかった方法でプログラムの動作に影響を与えるためによく使用されます。たとえば、挿入されたコードは、システム関数呼び出しをトラップしたり、通常の方法では実行できないパスワード テキストボックスの内容を読み取ったりする可能性があります。

ソースと詳細情報はこちら: http://en.wikipedia.org/wiki/DLL_injectionまた、外部ソースへの優れたリファレンスもいくつか見つけることができます。

Dll インジェクションは、ソース コードのないレガシー システムがあり、その動作を変更する必要がある場合に、正当な理由で使用できます。ただし、これは汚いハックであり、IMO の最後の手段として使用する必要があります。

于 2010-09-29T08:09:23.763 に答える