プロセスで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 はまだクロムによってフックされていないと想定できます (この場合)。
スレッド内の非制限トークンが何らかの方法でプロセス トークンと競合する可能性はありますか?