#c #winapi #hook #wdk
#c #winapi #перехват #wdk
Вопрос:
Я хочу подключить NtReadFile, чтобы он мог изменять текст, считываемый из файла. Но когда я пытаюсь прочитать файл, я получаю сообщение «Это приложение не удалось запустить, потому что конфигурация приложения неверна».
Вот мой код. Что не так?
NTSTATUS HookNtReadFile (
IN HANDLE FileHandle,
IN HANDLE Event,
IN PIO_APC_ROUTINE ApcRoutine,
IN PVOID ApcContext,
OUT PIO_STATUS_BLOCK IoStatusBlock,
OUT PVOID Buffer,
IN ULONG Length,
IN PLARGE_INTEGER ByteOffset,
IN PULONG Key)
{
NTSTATUS retstatus;
retstatus = glRealNtReadFile (FileHandle, Event, ApcRoutine, ApcContext, IoStatusBlock, Buffer, Length, ByteOffset, Key);
IoStatusBlock->Information = 3;
Length = 3;
Buffer = ExAllocatePool(PagedPool, Length);
Buffer = "hi";
return retstatus;
}
Комментарии:
1. Вы пробовали шаги , перечисленные для этого сообщения об ошибке?
2. Почему вы пытаетесь это сделать?
3. @andlabs это одно из моих заданий в университете. Я сделал другие перехваты (NtCreateFile, NtOpenFile …), Но с NtReadFile у меня возникли некоторые проблемы.
4. Вы должны быть осторожны с тем, что вы подключаете. Похоже, вы заменяете каждый прочитанный файл
"hi"
. Это может помешать Windows читать ваш исполняемый файл или вспомогательные файлы, такие как манифест в данном случае. Попробуйте изменить только результат определенных вызовов определенных файлов или с помощью определенных программ.
Ответ №1:
Это явно не сработает:
Buffer = ExAllocatePool(PagedPool, Length);
Buffer = "hi";
Вы выделяете память, а затем немедленно отбрасываете этот адрес. Это не то, как вы копируете строки в C. Вам нужно использовать strcpy
или, предпочтительно, одну из более безопасных альтернатив.
Также стоит отметить, что собственный API не использует символы ASCII. В общем случае ожидается, что все строки будут широкими строками.
Наконец, вы должны изменять значения только в том случае, если код возврата указывает на успех, и (как указывали другие в комментариях), когда дескриптор файла связан с конкретным файлом, который вы пытаетесь изменить.
Ответ №2:
http://www.rohitab.com/discuss/topic/40492-my-first-kernel-mode-rootkit/
Я знаю, что это выглядит как сомнительная ссылка. Но ответ, который вы ищете, можно найти одним щелчком мыши.