![]() |
AW: Inline Assembler
Gut, der dargestellte Abschnitt ist zu klein um eine vernünftige Aussage zu erlauben.
Zitat:
Code:
Bei OnSendPacket bleibt es!
procedure SendPacket;
asm mov eax, [ebp] mov eax, [eax+$04] push eax call OnSendPacket mov eax,$00BF0044 jmp dword ptr [SendPacketRet] end; ... dann versuch mal. Ansonsten mußte vielleicht mal mehr vom Originalcode und von deinem Code rausrücken, denn sonst wird es schwer überhaupt was zu sagen (ohne zu raten). |
AW: Inline Assembler
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:
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.
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; |
AW: Inline Assembler
Zitat:
|
AW: Inline Assembler
![]() So sieht es im Disassembler aus. Die obere ist die asm-Prozedur. Damit er die zeigte musste ich sie manuell aufrufen, damit sie überhaupt disassembliert wurde (ansonsten zeigt er an der Stelle nur db XXh an). Der untere Teil ist dementsprechend OnSendPacket. Kann man an dem Ausschnitt was erkennen? Edit: Hab ich's mir gedacht, so geht es:
Delphi-Quellcode:
ecx einfach speichern. Warum ist da niemand drauf gekommen, ist das irgendwie gefährlich? o.o
procedure OnSendPacket(Ret: Pointer); stdcall;
var F: TextFile; begin AssignFile(F, 'C:\lol.txt'); Append(F); Writeln(F, GetModuleFromAddress(Ret)); CloseFile(F); end; procedure SendPacket; stdcall; asm mov eax, [ebp] mov eax, [eax+$04] push ecx push eax call OnSendPacket pop ecx mov eax,$00BF0044 jmp dword ptr [SendPacketRet] end; |
AW: Inline Assembler
Zitat:
Aber eigentlich sollte das absolut nichts ändern, denn bei stdcall würde es OnSendPacket obliegen den Registerwert zu speichern und wiederherzustellen. Dein Code ist also eigentlich nach den allgemeinen Regeln redundant. Der Wurm ist woanders zu finden ... nur wo? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz