Welche Ausschnitte aus dem
asm-Code brauchst du denn? Weiter nach oben oder nach unten?
Von meinem Code habe ich schon so ziemlich alles gepostet. Habe jetzt mal das stdcall weggenommen, bringt nichts.
Delphi-Quellcode:
const
SEND_PACKET = $004BC877;
var
SendPacketRet: Cardinal = SEND_PACKET + 5;
function JMP(iFrom, iTo: Cardinal): Cardinal;
begin
Result := (iTo - iFrom) - 5;
end;
function GetModuleFromAddress(Address: Pointer):
string;
var
Res: HMODULE;
Name:
array[0..100]
of AnsiChar;
begin
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, Address, Res);
GetModuleBaseName(GetCurrentProcess, Res,
Name, 100);
Result :=
string(AnsiString(
Name));
end;
procedure OnSendPacket(Ret: Pointer);
stdcall;
var
F: TextFile;
begin
AssignFile(F, '
C:\test.txt');
Append(F);
Writeln(F, GetModuleFromAddress(Ret));
CloseFile(F);
end;
procedure SendPacket;
asm
mov eax, [ebp]
mov eax, [eax+$04]
push eax
call OnSendPacket
mov eax,$00BF0044
jmp dword ptr [SendPacketRet]
end;
procedure InstallHook;
begin
PByte(SEND_PACKET)^ := $E9;
PCardinal(SEND_PACKET + 1)^ := JMP(SEND_PACKET, DWORD(@SendPacket));
end;
Und es liegt nicht an meinem allgemeinen Vorgehen; sobald ich das stdcall; wieder hinmache und den OnSendPacket call inklusive push eax auskommentiere geht alles, die Pakete werden gesendet.