我正在注入一些代码来挂钩进程中的 api,但在 chrome.exe 等某些应用程序中存在一些问题
我的测试应用程序启动一个暂停的进程,进行注入和 api 挂钩,然后恢复它。
挂钩 CreateProcessW 是为了能够挂钩子进程。如果调用了CreateProcessW,则强制创建挂起,hook子并恢复。
注入的代码仅依赖于 ntdll api,因此,虽然挂钩进程尚未完全初始化,但 ntdll.dll 始终存在。
使用带有 CREATE_SUSPENDED 标志的 CreateRemoteThread 或 NtCreateThreadEx 使用辅助线程注入代码。(不管哪一个,问题依然存在)
在此介绍之后,问题是在某些进程(如某些 chrome 子进程)中,CreateRemoteThread 返回 TRUE,但是当我恢复注入器线程时,它以代码 0xC0000022 退出并且进程也退出。
如果我将 WinDbg 附加到暂停的 chrome.exe 子进程,在我做任何事情之前,它也会失败并且 chrome.exe 以相同的行为结束。
似乎在 RtlUserThreadStart 之前执行的操作系统代码会生成错误,但我不知道如何调试它。
如何调试在 RtlUserThreadStart 之前运行的代码?是否有允许我这样做的调试器或 windbg 选项?
编辑:
从这里的最后一篇文章之后,我可以检索到这个信息:
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
该进程是使用受限令牌创建的,主线程继承它,但我的注入器线程不受限制,因为它是由我的应用程序创建的。
我可以假设 ntdll 的 api 还没有被 chrome 钩住(在这种情况下),因为注入发生在 CreateProcess 返回到 chrome 之前。
我的线程中的非限制令牌可能会以某种方式与进程令牌冲突吗?