Реферат: Перехват API-функций в Windows NT2000XP
jump.arg = (DWORD)&Intercept_MessageBoxA;
jump.instr_ret = 0xC3;
//Прочитаем и сохраним первые оригинальные 6 байт стандартной API функции
ReadProcessMemory(GetCurrentProcess(),(void*) adr_MessageBoxA,
(void*)&old, 6, &written);
//Запишем команду перехода на нашу функцию поверх этих 6-ти байт
WriteProcessMemory(GetCurrentProcess(), (void*)adr_MessageBoxA,
(void*)&jump, sizeof(jmp_far), &written);
}
Теперь посмотрим, как выглядит сама функция-двойник. Она должна заменить стандартную MessageBoxA, поэтому её тип и состав параметров должны точно соответствовать оригиналу:
//данное определение аналогично __srtdcall BOOL WINAPI Intercept_MessageBoxA(HWND hwnd, char *text, char *hdr, UINT utype) { //Сначала восстанавливаем 6 первых байт функции. Это не обязательное // действие, просто мы решили подшутить над пользователем, и все // сообщения функции MessageBoxA переделать на свои, поэтому нам придется // вызвать оригинальную функцию, а для этого следует восстановить ее адрес: WriteProcessMemory(GetCurrentProcess(), (void*)adr_MessageBoxA, (void*)&old, 6, &written); //Здесь вы можете порезвиться от души и выполнить любые, пришедшие вам // в голову действия. Мы просто заменили сообщение функции на свое: char *str = "Hi From MessageBOX!!!!"; //Вызываеморигинальнуюфункциючерезуказатель ((BOOL (__stdcall*)(HWND, char*, char*, UINT))adr_MessageBoxA)(hwnd, str, hdr, utype); //Снова заменяем 6 байт функции на команду перехода на нашу функцию WriteProcessMemory(GetCurrentProcess(), (void*)adr_MessageBoxA, (void*)&jump, 6,&written); return TRUE; К-во Просмотров: 417
Бесплатно скачать Реферат: Перехват API-функций в Windows NT2000XP
|