я делаю перехват ZwOpenFile, запиываю в текстфайл имя того, что перехвачено и пытаюсь снова запустить етот перехваченный файл. запускаю свою прогу, запускаю notepad.exe, создается текстовый файл там пишется "....notepad.exe", а потом вылезает ошибка "... notepad.exe Прараметр задан не верно". с другими Exe тоже самое,
Помогите найти ошибку!!
| Код |
int WINAPI NewZwOpenFile(OUT PHANDLE FileHandle_o,IN ACCESS_MASK DesiredAccess_o, IN POBJECT_ATTRIBUTES ObjectAttributes_o, OUT PIO_STATUS_BLOCK IoStatusBlock_o, IN ULONG ShareAccess_o, IN ULONG OpenOptions_o) { WriteProcessMemory(INVALID_HANDLE_VALUE, (void*)adr_ZwOpenFile,(void*)&old_ZwOpenFile, 6, &written_o);
PWCHAR wcsFileName = ObjectAttributes_o->pObjectName->Buffer; char myString [256]; WideCharToMultiByte(CP_ACP, 0,wcsFileName, -1,myString, 256, NULL, NULL ) ;
if (strstr(myString,".exe")!= NULL) {
strcat(myString,"!\r\n"); len_o = strlen(myString); //------------------------------------------------------------------------------------------------------------ RtlInitUnicodeString(&fullFileName_o,L"\\??\\D:\\Example\\testfile_open.txt"); InitializeObjectAttributes(&oa_o,&fullFileName_o,OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,NULL,NULL ); status_o = ZwCreateFile (&logo_fileHandle_o,GENERIC_WRITE | SYNCHRONIZE,&oa_o,&iostatus_temp,0, FILE_ATTRIBUTE_NORMAL, FILE_SHARE_WRITE, FILE_OPEN_IF, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
if( NT_SUCCESS(status_o)) { LARGE_INTEGER Off = {0}; Off.LowPart = FILE_WRITE_TO_END_OF_FILE; Off.HighPart = -1; status_o = ZwWriteFile(logo_fileHandle_o, NULL,NULL,NULL, &iostatus_temp, myString, len_o, &Off, NULL);
ZwClose(logo_fileHandle_o); }
} status_o = ZwOpenFile(FileHandle_o,DesiredAccess_o,ObjectAttributes_o,IoStatusBlock_o, ShareAccess_o, OpenOptions_o);
WriteProcessMemory(INVALID_HANDLE_VALUE, (void*)adr_ZwOpenFile,(void*)&jump_ZwOpenFile, 6,&written_o);
return 0; }
|
|