Der originale Code sieht so aus:
http://img191.imageshack.us/img191/1056/ocode.png
Das sind genau 5 Bytes, da wird also nichts zerstückelt. Möglichkeit f) entfällt, weil das Spiel mit HackShield geschützt ist, was die Veränderungen die diese Methoden anwenden aus welchem Grund auch immer erkennt.
NewSend sieht in
asm so aus:
http://img207.imageshack.us/img207/245/pcode.png
Die push Befehle unten sind Parameter für einen MessageBoxA Aufruf, der dann nicht ausgeführt wird. Großartig debuggen (z.B. break points setzen) kann ich leider auch nicht, denn dann hab ich Themida im Nacken
Edit:
Ich hatte folgenden Einfall:
Delphi-Quellcode:
function NewSend(s: TSocket;
var Buf; len, flags: Integer): Integer;
stdcall;
const
a: PAnsiChar = '
testa';
asm
push eax
push edi
mov eax, [ebp]
mov edi, [eax+$04]
mov [GameRet], edi
mov edi, [NSRet]
mov [eax+$04], edi
pop edi
pop eax
call dword ptr [SendRet]
push 0
push 0
push a
push 0
call MessageBoxA
end;
NSRet ist die Adresse vom ersten push 0, wird vor dem Hooken gesetzt. In GameRet soll die alte Rückkehradresse.
Leider funktioniert es nur, wenn ich mov [GameRet], edi rausnehme - dann wird die MessageBox angezeigt, ansonsten passiert mal wieder gar nichts.
Warum klappt die eine Zeile nicht?