2016-02-29 13 views
-1

Я использую последнюю версию EasyHook для подключения некоторых функций ядра. Я действительно успешно отлаживал отладку на 64-разрядной виртуальной машине под управлением Windows 8.1, и я протестировал подключение к NtQuerydirectoryFile и NtQuerySystemInformation в пользовательском режиме и NtQuerySystemInformation в режиме ядра без каких-либо проблем.Вызов NtQuerydirectoryFile с крюка ядра Сбой ядра

Моя текущая проблема заключается в подключении NtQuerydirectoryFile с использованием того же кода, который я использовал для привязки к пользовательскому режиму, но он терпит неудачу, когда я вызываю исходную функцию, дающую мне ошибку нарушения доступа. Я использую следующий код для режима ядра крючка:

NTSTATUS NtQueryDirectoryFile_Hook(
    __in HANDLE FileHandle, 
    __in_opt HANDLE Event, 
    __in_opt PIO_APC_ROUTINE ApcRoutine, 
    __in_opt PVOID ApcContext, 
    __out PIO_STATUS_BLOCK IoStatusBlock, 
    __out_bcount(Length) PVOID FileInformation, 
    __in ULONG Length, 
    __in FILE_INFORMATION_CLASS FileInformationClass, 
    __in BOOLEAN ReturnSingleEntry, 
    __in PUNICODE_STRING FileName OPTIONAL, 
    __in BOOLEAN RestartScan 
    ) 
{ 
    NTSTATUS status; 
    status = NtQueryDirectoryFile(FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, FileInformation, Length, FileInformationClass, ReturnSingleEntry, FileName, RestartScan); 
    return status; 
} 
+0

А вот свалка: http://pastebin.com/Y29dsRUQ – FiFo

+0

это выглядит как функция BuildQueryDirectoryIrp ожидает какое-то параметр в регистре RAX, и из-за способом был осуществлен батут прыжок, данные RAX регистра потерян! Так я вместо этого: '48 b8 00 00 00 00 00 00 00 00 мов Ракс, 0x0 далее e0 JMP rax' с этим: ' 50 \t \t \t \t \t \t \t толчок RAx 48 b8 00 00 00 00 00 00 00 00 mov rax, 0x0 48 87 04 24 xchg QWORD PTR [rsp], rax c3 \t \t ret' – FiFo

ответ

0

Как я уже упоминал ранее, оригинальный батут прыжок изменил регистр RAX, поэтому я заменил его другой батут:

50        push rax 
48 b8 00 00 00 00 00 00 00 00 mov rax, 0x0 
48 87 04 24     xchg QWORD PTR [rsp],rax 
c3        ret 

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