Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: ZwOpenFile и ошибка "Параметр задан неврно"  (Прочитано 4836 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Gud
Гость
« : 06-05-2009 09:53 » 

я делаю перехват 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 + 1 ];
          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;
}

и это вызывается из  функции

Код:

void InterceptFunctions(void)
{
adr_ZwOpenFile = (DWORD)GetProcAddress(GetModuleHandle(_T("ntdll.dll")),"ZwOpenFile");

 jump_ZwOpenFile.instr_push = 0x68;
 jump_ZwOpenFile.arg = (DWORD)&NewZwOpenFile;
 jump_ZwOpenFile.instr_ret = 0xC3;

ReadProcessMemory(INVALID_HANDLE_VALUE, (void*)adr_ZwOpenFile,(void*)&old_ZwOpenFile, 6, &written_o);
WriteProcessMemory(INVALID_HANDLE_VALUE,(void*)adr_ZwOpenFile,(void*)&jump_ZwOpenFile, sizeof(jmp_far),&written_o); 
}

Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines