7

APIスパイ/ハイジャックを使用して、作業中のプロジェクトのいくつかのコア機能を実装することに興味があります。この質問でも言及されていますが、それは実際には話題にならなかったので、これについては独自の質問があればもっと良いと思いました。、

これ、さまざまな手法/ライブラリ( MS DetoursIATパッチ)、またはその他の提案について、できるだけ多くの情報を収集したいと思います。

また、誰かがそのような技術を使用した実際の生産経験を持っているかどうかを知ることは特に興味深いでしょう-彼らは生産コードに対して十分に安定させることができますか、それともこれは厳密に研究のための技術ですか?複数のバージョンのWindowsで正しく機能しますか?バグが発生しやすいですか?

個人的な経験と外部リンクの両方が高く評価されています。

4

4 に答える 4

3

私はMSDetoursの代わりにsinger.dll(L-GPL)を実装しました(ライセンス要件やx64サポートの多額の支払いは好きではありませんでした)それは素晴らしくうまく機能し、Win32からWin64に移植しました。約2年間の自己商用アプリケーション。

非常に単純な理由でこれを使用して、再パック、多くの異なる製品と同じコンパイル済みアプリケーションのブランド変更のためのプレゼンテーションフレーム作業を提供し、文字列、一般リソース、ツールバー、およびメニューの一般的なフィルタリングと置換を行います。

L-GPLであるため、ソース、著作権などを提供し、ライブラリに動的にリンクするだけです。

于 2008-09-18T12:34:05.917 に答える
2

Microsoft はバージョン間で WinAPI の後方互換性を維持することが最善であるため、標準の WinAPI 関数をフックすることは比較的安全です。標準の WinAPI フックは、一般的に安定していて安全です。

ターゲット プログラムの内部など、他のものをフックする場合は、別の話です。ターゲット プログラムに関係なく、通常、フック自体は堅実な方法です。このプロセスの最も弱い部分は、通常、正しい場所を見つけて、それに固執することです。

アプリケーションのわずかな変更でも、動的ライブラリなどは言うまでもなく、関数のアドレスが変更される可能性があります。

フッキングが標準的な方法であるゲームハッキングでは、これは「sigscanning」によってある程度打ち負かされました。これは、関数の静的部分、つまり関数のアクションが変更されない限り変更されない実際の命令バイトの実行可能イメージをスキャンすることによって機能します。sigscanning は明らかに静的アドレス テーブルを使用するよりも優れていますが、ターゲット アプリケーションが十分に変更されると、最終的には失敗します。

C++ での sigscanning の実装例は、ここにあります。

于 2008-09-18T12:40:58.413 に答える
1

私は数年前から標準の IAT フック手法を使用してきましたが、うまく機能し、問題なく安定しており、x64 に移植されています。私が抱えていた主な問題は、そもそもフックをどのように注入するかということでした。管理されたプロセスを起動の「正しい」時点で一時停止して、注入が行われるようにする最善の方法を見つけるのにかなりの時間がかかりました。信頼性が高く、私にとっては十分に早かったです。私のインジェクターは Win32 デバッグ API を使用しています。これにより、管理されていないプロセスを簡単に一時停止できましたが、管理されたプロセスを適切なタイミングで一時停止するには、少し試行錯誤が必要でした。

私は IAT を主にテスト ツールの作成に使用しており、デッドロック検出プログラムを持っています。ここからダウンロードできる GetTickCount() 制御プログラムhttp://www.lenholgate.com/blog/2006/04/tickshifter-v02.html と、まだ開発中のタイムシフト アプリケーションです。

于 2008-09-18T13:54:12.090 に答える
1

多くの人が忘れているのは、Windows dll がホット パッチ可能なイメージ( MSDN ) としてコンパイルされていることです。

ホット パッチは、クリーンでシンプルな WinAPI 迂回を行うための最良の方法であり、元の関数を保持します。つまり、インライン アセンブリを使用する必要はなく、関数ポインターをわずかに調整するだけです。

小さなホット パッチ チュートリアルは、ここにあります。

于 2010-12-24T06:25:35.150 に答える