Einzelnen Beitrag anzeigen

MartinA

Registriert seit: 27. Aug 2003
13 Beiträge
 
#14

Re: Suche: Tutorial zu Dll Injection

  Alt 1. Apr 2005, 08:49
Die einfachste Methode is meiner Neinung nach einen Denkanstos werfe ich einfach einen Hook in den Raum.

Vorraussetzung: Ich kenne den Namen der EXE in die Injiziert werden soll.

Verfahren:

1. Einen Messagehook aufsetzen:
Code:
Irgendwas := SetWindowsHookEx(WH_GETMESSAGE, @MsgHook, hInstance, 0);
2.1 Im Hook selbst wird bereits gemacht
Code:
function MsgHook(Code: Longint; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
if (extractexename(getcommandline)='MEINEXENAME.EXE') then
  begin
    :
    code hier
    :
  end;
 Result := CallNextHookEx(msghookc, Code, wParam, lParam);
2.2 Im Hook wird der zu injizierende Code nachgeladen.
Code:
function MsgHook(Code: Longint; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
if ((extractexename(getcommandline)='MEINEXENAME.EXE')) and (pruefung=false) then
  begin
    hinstance := Loadlibrary ('INJIZIERTE.DLL');
  end;
 Result := CallNextHookEx(msghookc, Code, wParam, lParam);
Als Schmankerl stelle ich dann noch folgende Procdeduren zur Verfügung.
Code:
Procedure WriteSecureBuffer(Addr: DWord; Data: Pointer; Len: Word);
Var
  Written: DWord;
  ToPos : Pointer;
begin
  ToPos:= Pointer(Addr);
  WriteProcessMemory(GetCurrentProcess, ToPos, Data, Len, Written);
end;

procedure MakeJump(ZielAddr, JumpAddr, NOPS: DWord);
Var
 Buffer : Array[1..5] of Byte;
 Data   : DWord;
 X      : Byte;
begin
  Data:= ZielAddr - (JumpAddr + 5);
  Move(Data, Buffer[2], 4);
  Buffer[1]:= $E9;
  WriteSecureBuffer(JumpAddr, @Buffer, 5);
  For X:= 1 to NOPS do WriteSecureByte(JumpAddr + 4 + X, $90);
end;
Gruß
Martin
ALT +F4
  Mit Zitat antworten Zitat