1

ソースを持っていないアプリケーションの単一インスタンス制限をオーバーライドしようとしています。私は、アプリが CreateMutex を使用して実行中の別のインスタンスがあるかどうかを判断するという古き良きトリックを使用していることを知っています。(ミューテックスが正常に作成された場合は処理が続行されます。ミューテックスが作成されたと getlasterror が通知した場合は、すぐに終了します)。Win32 api 呼び出しをスニッフィングして見つけました。Detours を使えばうまくいくと思ったのですが、うまくいきません。CreateMutexW をインターセプトしていますが、何らかの理由で最初の 4 つの呼び出しをキャッチできません。(ここでも、win32 呼び出しをスニッフィングし、ミューテックスの名前を調べることで、これらの呼び出しが何であるかを知っています)。5 番目のものは傍受されますが、実際に傍受したいのは 1 番目のものです。

サンプル アプリケーション withdll を迂回して使用しています。問題は、回り道の開始が遅すぎることなのか、それともこれらの呼び出しが持つ何らかの保護のためなのか疑問に思います。迂回は最善のアプローチですか?おそらく、何か他のものを使用する方が良い考えかもしれませんか?

4

1 に答える 1

1

あなたが説明した状況には、いくつかの理由が考えられます。それらの中で最も可能性が高いのは次のとおりです。

  1. キャッチする必要がある CreateMutexW 呼び出しは、プロセスによってインポートされる DLL の 1 つの DllMain メソッド内で発生し、DetoursCreateProcessWithDll() 関数を使用してコードを挿入します。Detours は、DLL をプロセス実行可能インポート リストの最後に配置することで挿入します。したがって、プロセスによってインポートされるすべての DLL は、プロセス内でロードされ、初期化されます。これを克服するには、CreateProcess(CREATE_SUSPENDED) および CreateRemoteThread() ベースのインジェクションを使用してみてください。ただし、この方法には独自の課題があります。
  2. 最初の呼び出しで使用される API が異なります。CreateMutexExW をオーバーライドしようとしましたか? ANSI メソッドが Unicode メソッドを呼び出していることは確かですか?

お役に立てれば。

于 2013-01-12T16:44:04.483 に答える