Проблема с перехватом вызовов ntdll.dll - PullRequest
1 голос
/ 10 июня 2011

В настоящее время я работаю над перехватом вызовов ntdll.dll через инъекцию dll.Сначала я создаю поток в существующем процессе через CreateRemoteThread(), затем загружаю свою dll через LoadLibrary и, наконец, перехватываю вызовы PROCESS_ATTACH.

Впрыск работает нормально, но затем я хочу зарегистрировать весь реестрзапросы файловой системы.И проблема в том, что он не работает должным образом.

Я решил опубликовать код через PasteBin, потому что кусок довольно большой.Вот ссылка: http://pastebin.com/39r4Me6B

Я пытаюсь перехватить ZwOpenKey, затем зарегистрировать содержимое ключа и затем запустить «истинную» функцию по указателю.Функция NOpenKey выполняется, но процесс останавливается без ошибок.

Кто-нибудь видит какие-либо проблемы?

1 Ответ

2 голосов
/ 14 мая 2012

Если вы используете OllyDbg, ZwOpenKey начинается с 5 байтов MOV EAX, 77.

Вы можете перезаписать эти байты следующим образом: JMP _myZwOpenKey, затем оттуда вы можете делать что угодно со значениями в стеке, восстанавливать все регистры, затем делать JMP 7C90D5B5, который является адресом ZwOpenKey + 5 байтов.

CPU Disasm
Address   Hex dump          Command                 Comments
7C90D5AF      90            NOP
7C90D5B0  /$  B8 77000000   MOV EAX,77              ; ntdll.ZwOpenKey(guessed rg1,Arg2,Arg3)
7C90D5B5  |.  BA 0003FE7F   MOV EDX,7FFE0300
7C90D5BA  |.  FF12          CALL DWORD PTR DS:[EDX]
7C90D5BC  \.  C2 0C00       RETN 0C

Я обычно делаю это в ассемблере таким образом, что мне не нужно много возиться с приведением типов и всем этим. Надеюсь, это поможет.

...