Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 20:34   #1
Doom_Rooster
 
Регистрация: 10.03.2009
Сообщений: 4
По умолчанию Сплайсинг

Написал программу, выполняющую перехват Апи функции MessageBoxExA методом сплайсинга:
Код внедряемой длл:
Код:
type
 OldCode = packed record
  One: dword;
  two: word;
 end;
 
far_jmp = packed record
  PuhsOp: byte;
  PushArg: pointer;
  RetOp: byte;
 end;
 
var
 JmpMba: far_jmp;
 OldMba: OldCode;
 MbaAdr: pointer;
 
 
function NewMessageBox: Integer; stdcall;
var
  Bytes: dword;
begin
WriteProcessMemory(INVALID_HANDLE_VALUE, MbaAdr, @OldMba, SizeOf(OldCode), Bytes);
asm
mov eax, dword ptr MbaAdr
add eax, 5
jmp eax
end;
end;
      
Procedure SetHook();
var
 hUser32: dword;
 Bytes,OldProtect: dword;
begin
  hUser32 := GetModuleHandle('user32.dll');
  MbaAdr  := GetProcAddress(hUser32, 'MessageBoxExA');
  ReadProcessMemory(INVALID_HANDLE_VALUE, MbaAdr, @OldMba, SizeOf(OldCode), Bytes);
  VirtualProtect(MbaAdr,6,PAGE_EXECUTE_READWRITE,OldProtect);
  JmpMba.PuhsOp  :=$68;
  JmpMba.PushArg := @NewMessageBox;
  JmpMba.RetOp   := $C3;
  WriteProcessMemory(INVALID_HANDLE_VALUE, MbaAdr, @JmpMba, SizeOf(far_jmp), Bytes);
end;
//Последующий код роли не играет......
В идеале при перехвате происходит джамп на мою функцию NewMessageBox, затем восстанавливается затертый джампом участок памяти и джамп обратно.. и как следствие правильное выполнение функции MessageBoxExA. Фукция выполняется правильно, но после закрытия MessadgeBox'a программа, его вызвавшая, закрывается с ошибкой
Access violation at 0x00000000: Read of address 0x00000000.
Кто-нибудь может подсказать, в чем проблема? Вобзможно в этом коде
Код:
mov eax, dword ptr MbaAdr
add eax, 5
jmp eax
Doom_Rooster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц