Я ввожу некоторый код для подключения API к процессам, но у меня есть некоторые проблемы в некоторых приложениях, таких как chrome.exe.
Мое тестовое приложение запускает приостановленный процесс, выполняет инъекцию и перехват API, а затем возобновляет его.
CreateProcessW перехватывается, чтобы иметь возможность перехватывать дочерние процессы. Если вызывается CreateProcessW, он принудительно создается приостановленным, перехватывает дочерний процесс и возобновляет его.
Внедряемый код зависит только от API ntdll, поэтому, хотя перехваченные процессы еще не полностью инициализированы, ntdll.dll присутствует всегда.
Код вводится с помощью вспомогательного потока с помощью CreateRemoteThread или NtCreateThreadEx с флагом CREATE_SUSPENDED. (Независимо от того, какой из них, проблема все еще там)
После этого введения проблема заключается в том, что в некоторых процессах, таких как некоторые дочерние элементы 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
Процесс создается с ограниченным токеном, основной поток наследует его, но мой поток инжектора не ограничен, потому что он создан моим приложением.
Я могу предположить, что API-интерфейсы ntdll еще не подключены к хрому (в данном случае), потому что внедрение происходит до того, как CreateProcess вернется в хром.
Может ли неограниченный токен в моем потоке каким-то образом конфликтовать с токеном процесса?