Einzelnen Beitrag anzeigen

mr_emre_d
(Gast)

n/a Beiträge
 
#1

Procedure umbiegen

  Alt 25. Jan 2009, 21:38
Hiho liebes Community,

Ich versuche gerade seit ein paar Stunden eine Procedure (MessageBox)
so umzubiegen, dass zuerst eine von mir definierte Procedure aufgerufen
(hingejumpt) wird und anschließend wieder nach Beendigung der Procedure
zurück zu der eigentlichen Procedure gejumpt wird.

Das Problem liegt nun darin, dass die Adresse, wohin gejumpt werden soll,
nicht richtig übergeben wird :S

Delphi-Quellcode:
// umbiegen
var
  pMSG: Pointer;
  dw: DWord;
  dwOldProtect: DWord;
  Buffer: Pointer;
begin
  Buffer := Nil;
  GetMem(Buffer, 5); // jmp = 1byte, adr = 4 byte ..
  Byte(Buffer^) := Jmp; //Jmp = $E9
  dw := Integer(@DOIT); // DoIt = eigene Procedure ..
  Cardinal(Pointer(Integer(Buffer)+1)^) := dw; // $0045218c -> wird verkehrt rum reingeschrieben ..
  pMsg := GetProcAddress( GetMOduleHandle('user32.dll'), 'MessageBoxA' );
  VirtualProtect( pMsg, 5, PAGE_EXECUTE_READWRITE, dwOldProtect );
  WriteProcessMemory( OpenProcess(PROCESS_ALL_ACCESS, False, GetCurrentProcessID),
    pMsg, Buffer, 5, dw );
  VirtualProtect( pMsg, 5, dwOldProtect, dwOldProtect );
  FreeMem(Buffer, 5);
Wenn ich nach dem Aufruf von WriteProcessMemory in die CPU - Ansicht (strg+alt+c) wechsle,
sehe ich folgendes in der MessageBox Procedure:
E98C214500 jmp $776d7870

Anscheinend wurde es richtig "umgebogen" aber warum heißts bitte nun
$776d7870 und nicht $0045218C

MfG
  Mit Zitat antworten Zitat