4

プロセスでAPIをフックするコードを挿入していますが、chrome.exeなどの一部のアプリケーションで問題が発生しています

私のテストアプリは、中断されたプロセスを起動し、インジェクションと API フックを実行してから再開します。

子プロセスをフックできるようにするために、CreateProcessW がフックされます。CreateProcessW が呼び出されると、強制的に作成が中断され、子をフックして再開します。

挿入されたコードは ntdll API のみに依存するため、フックされたプロセスはまだ完全には初期化されていませんが、ntdll.dll は常に存在します。

コードは、CreateRemoteThread または NtCreateThreadEx と CREATE_SUSPENDED フラグを使用してヘルパー スレッドを使用して挿入されます。(どちらでも、問題はまだあります)

このイントロの後、問題は、一部の chrome チャイルドなどの一部のプロセスで、CreateRemoteThread が TRUE を返すことですが、インジェクター スレッドを再開すると、コード 0xC0000022 で終了し、プロセスも終了します。

中断された chrome.exe 子プロセスに WinDbg をアタッチすると、何かを行う前にそれも失敗し、chrome.exe は同じ動作で終了します。

RtlUserThreadStart の前に OS コードを実行するとエラーが発生するようですが、デバッグ方法がわかりません。

RtlUserThreadStart の前に実行されるコードをデバッグするにはどうすればよいですか? それを可能にするデバッガーまたはwindbgオプションはありますか?

編集:

hereからの最後の投稿に続いて、この情報を取得できました。

0a88:0814 @ 02688302 - LdrpInitializeProcess - INFO: Beginning execution of chrome.exe (c:\Program Files (x86)\Google\Chrome\Application\chrome.exe)
    Current directory: C:\Windows
    Search path: C:\Windows\SYSTEM32 0a88:0814 @ 02688318 - LdrpInitializeProcess - ERROR: Initializing the current directory to "C:\Windows" failed with status 0xc0000022
0a88:0814 @ 02688334 - LdrLoadDll - ENTER: DLL name: C:\Windows\SYSTEM32\wow64.dll DLL path: NULL 0a88:0814 @ 02688349 - LdrpLoadDll - ENTER: DLL name: C:\Windows\SYSTEM32\wow64.dll DLL path: C:\Windows\SYSTEM32
0a88:0814 @ 02688365 - LdrpLoadDll - INFO: Loading DLL C:\Windows\SYSTEM32\wow64.dll from path C:\Windows\SYSTEM32 0a88:0814 @ 02688380 - LdrpFindOrMapDll - ENTER: DLL name: C:\Windows\SYSTEM32\wow64.dll DLL path: C:\Windows\SYSTEM32
0a88:0814 @ 02688396 - LdrpSearchPath - ENTER: DLL name: C:\Windows\SYSTEM32\wow64.dll DLL path: C:\Windows\SYSTEM32
0a88:0814 @ 02688412 - LdrpResolveFileName - ENTER: DLL name: C:\Windows\SYSTEM32\wow64.dll
0a88:0814 @ 02688427 - LdrpResolveFileName - RETURN: Status: 0xc0000022
0a88:0814 @ 02688443 - LdrpSearchPath - RETURN: Status: 0xc0000022
0a88:0814 @ 02688458 - LdrpFindOrMapDll - RETURN: Status: 0xc0000022
0a88:0814 @ 02688474 - LdrpLoadDll - RETURN: Status: 0xc0000022
0a88:0814 @ 02688490 - LdrLoadDll - RETURN: Status: 0xc0000022
0a88:0814 @ 02688505 - LdrpInitializeProcess - ERROR: Loading WOW64 image management DLL "C:\Windows\SYSTEM32\wow64.dll" failed with status 0xc0000022
0a88:0814 @ 02688521 - _LdrpInitialize - ERROR: Process initialization failed with status 0xc0000022
0a88:0814 @ 02688536 - LdrpInitializationFailure - ERROR: Process initialization failed with status 0xc0000022

プロセスは制限されたトークンで作成され、メイン スレッドはそれを継承しますが、アプリによって作成されるため、インジェクター スレッドは制限されません。

CreateProcess がクロムに​​戻る前に注入が行われるため、ntdll の API はまだクロムによってフックされていないと想定できます (この場合)。

スレッド内の非制限トークンが何らかの方法でプロセス トークンと競合する可能性はありますか?

4

2 に答える 2

2

Debugging WinLogonwindbg ヘルプ (debugger.chm) を参照してください。「winlogon.exe」を「chrome.exe」に置き換えるだけです。この手法は、カーネル モード デバッガーからユーザー モード デバッガー (ntsd) を制御します。これにより、ユーザー モード デバッガーを単独で使用するよりもはるかに早く、chrome.exe のプロセスの初期化をデバッグできると思います。

于 2014-03-18T13:23:05.680 に答える
1

クロムの問題は次のとおりです。

Chrome は (サンドボックスのため) 非常に限られた権限で子プロセスを起動しますが、メイン スレッドを再開する前に、プロセスを初期化するために、より多くの権限を持つトークンを使用してメイン スレッドになりすます。

私のインジェクタースレッドは偽装していなかったので、ルーチンが実行された0xC0000022ときに制限されたプロセストークンが終了コードを発生させました。LdrpInitializeProcess

于 2014-03-20T18:03:40.943 に答える