Реферат: Перехват API-функций в Windows NT2000XP

MessageBox(NULL, "Can`t get addr_MessageBoxA", "Error!", 0);

return;

}

// В таблице импорта ищем соответствующий элемент для

// библиотеки user32.dll

while(iid->Name) //до тех пор пока поле структуры не содержит 0

{

if(strcmp((char*)(pimage + iid->Name), "USER32.dll") ==0 ) break;

iid++;

}

// Ищемв IMAGE_THUNK_DATA нужныйадрес

isd = (DWORD*)(pimage + iid->FirstThunk);

while(*isd!=adr_MessageBoxA && *isd!=0) isd++;

if(*isd == 0)

{

MessageBox(NULL, "adr_MessageBoxA not found in .idata", "Error!", 0);

return;

}

// Заменяем адрес на свою функцию

DWORD buf = (DWORD)&Intercept_MessageBoxA;

DWORD op;

// Обычно страницы в этой области недоступны для записи

// поэтому принудительно разрешаем запись

VirtualProtect((void*)(isd),4,PAGE_READWRITE, &op);

// Пишемновыйадрес

WriteProcessMemory(GetCurrentProcess(), (void*)(isd),

(void*)&buf,4,&written);

//восстанавливаем первоначальную защиту области по записи

VirtualProtect((void*)(isd),4,op, &op);

К-во Просмотров: 420
Бесплатно скачать Реферат: Перехват API-функций в Windows NT2000XP