Einzelnen Beitrag anzeigen

xice

Registriert seit: 29. Apr 2009
6 Beiträge
 
#1

Delphi Code-Injection JMP Adresse ermitteln...

  Alt 20. Mai 2009, 13:48
Hallo !

Ich versuche eine Art Code-Injection zu programmieren.
Mein Problem ist nun die Sprungstelle zum Code-Cave
Die Adresse stimmt nicht mit der zugewiesenen überein.

Die Sprungadresse müsste z.B.: $080C0000 lauten. Ich kriege aber $0046e1a0

Mach ich was falsch ? Bin für jede Hilfe dankbar!

Delphi-Quellcode:
var mem :Pointer;

...

procedure Inject;
begin
  asm
    push mem <-- Sprungstelle zum Code-Cave ... Adresse wird weiter unten im Quelltext ermittelt
    ret
    nop
  end;
end;

procedure Code_Cave;
begin
  asm
    mov [edi+04],00000001
    fcom dword ptr [edi+04]
    add esp,08
    fnstsw ax
    push $006C37C2
    ret
  end;
end;

procedure Test;
var process,PID:Cardinal;
    wbyte:DWORD;
begin
  PID:=GetPID('Anwendung');
  process := OpenProcess(PROCESS_ALL_ACCESS,false,PID);

 // Speicher anfordern
  mem := VirtualAllocEx(process, nil,19,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

 //-- Schreibe in mem
  WriteProcessMemory(process,mem,@Code_Cave,19, wbyte);

 //-- Überschreibe vorhanden Code durch ein sprung zum Code-Cave
  WriteProcessMemory(process,ptr($006C37C2),@Inject,8, wbyte);

// VirtualFreeEx(process,mem,0,MEM_RELEASE);
  CloseHandle(process);
end;
  Mit Zitat antworten Zitat