Dll インジェクション - 何ができるのか? 質問する

Dll インジェクション - 何ができるのか? 質問する

最近インターネットを閲覧していたときに、偶然 Dll Injection を見つけました。

興味深いテーマだと思いますが、その目的が何なのか全く分かりません。

ゲームやソフトウェアのクラッキングやハッキングに使用できると読んだことがありますが、何か良いことにも使えるのでしょうか?

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

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

念のため言っておきますが、私は得た知識を使ってゲームをクラック/ハッキングしようとは思っていませんし、違法行為をするつもりもありません。

お時間をいただきありがとうございます。

エメリオン

追伸: このテーマに関するウェブサイトや書籍があれば教えていただけると嬉しいです!

ベストアンサー1

思い浮かぶ用途はいくつかあります:

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

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

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

私自身、これまで、通常のビジネス アプリケーションで、医療サービスの重要な通知システムの稼働時間を確保するためにホット パッチを使用するケースから、迂回/ログ記録を使用して独自のレコード管理 (当時は既に廃業したソフトウェア ショップによる) が本格的な CRM ソリューションとリアルタイムで通信できるようにするケースまで、上記のすべてのユース ケースに対処する必要がありました。

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

おすすめ記事