AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Rückkehradresse bei Hook

Ein Thema von WorstNightmare · begonnen am 19. Dez 2010 · letzter Beitrag vom 20. Dez 2010
Antwort Antwort
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#1

Rückkehradresse bei Hook

  Alt 19. Dez 2010, 11:56
Hallo,

ich bin gerade dabei einen Packet-Sniffer für ein Spiel zu schreiben und möchte das durch Hooks in ws2_32.dll machen.

Normalerweise läuft das so ab:
Spiel -> ws2_32.send -> Spiel

Ich möchte folgendes:
Spiel -> ws2_32.send (gepatchter Code) -> Sniffer-DLL -> ws2_32.send -> Sniffer-DLL -> Spiel

Der erste Teil (Hook) funktioniert schon mit diesem Code:
Delphi-Quellcode:
type
  TRecvSend = function(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;

var
  hWS, SendRet: Cardinal;

function NewSend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
begin
  Result := TRecvSend(SendRet)(s, Buf, len, flags);
  raise Exception.Create('Test');
end;

function JMP(iFrom, iTo: Cardinal): Cardinal;
begin
  Result := (iTo - iFrom) - 5;
end;

var
  F, o, o2: Cardinal;
begin
  hWS := LoadLibraryA('ws2_32.dll');
  [...]

  F := Cardinal(GetProcAddress(hWS, 'send'));
  SendRet := F + 5;
  VirtualProtect(Pointer(F), 5, PAGE_EXECUTE_READWRITE, o);
  PByte(F)^ := $E9;
  PCardinal(F + 1)^ := JMP(F, DWORD(@NewSend));
  VirtualProtect(Pointer(F), 5, o, o2);
end.
Ich sehe, dass das Spiel die Pakete an den Server sendet, allerdings wird der nachfolgende Code (hier testweise eine Exception) nicht mehr ausgeführt. Meine Vermutung ist, dass er irgendwie direkt ins Spiel zurückspringt.
Das heißt, ich müsste die Rückkehradresse speichern, sie dann auf mein NewSend setzen und dann am Ende mit der Adresse ins Spiel zurückkehren.

Weiß jemand wie das geht?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: Rückkehradresse bei Hook

  Alt 19. Dez 2010, 13:22
Entferne die Exception und schreibe dir anstatt eine Log-Routine und speichere den erfolgten Zugriff in einer Text-Datei.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#3

AW: Rückkehradresse bei Hook

  Alt 19. Dez 2010, 15:25
Delphi-Quellcode:
var
  T: TextFile;
begin
  AssignFile(T, 'C:\test.txt');
  Append(T);
  WriteLn(T, 'Lese...');
  Result := TRecvSend(SendRet)(s, Buf, len, flags);
  WriteLn(T, 'Gelesen: ' + IntToStr(Result));
  CloseFile(T);
end;
So passiert gar nichts mehr. Nur wenn ich das CloseFile vor SendRet ausführe sendet er das Paket.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Rückkehradresse bei Hook

  Alt 19. Dez 2010, 15:34
Delphi-Quellcode:
var
  T: TextFile;
begin
  AssignFile(T, 'C:\test.txt');
  Append(T);
  WriteLn(T, 'Lese...');
  CloseFile( T );

  Result := TRecvSend(SendRet)(s, Buf, len, flags);

  Append( T );
  WriteLn(T, 'Gelesen: ' + IntToStr(Result));
  CloseFile(T);
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
WorstNightmare

Registriert seit: 6. Okt 2008
159 Beiträge
 
RAD-Studio 2010 Arc
 
#5

AW: Rückkehradresse bei Hook

  Alt 19. Dez 2010, 15:41
Gelesen kommt nie, immer nur Lese. Ist also genau so wie ich im 1. Post gesagt habe.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Rückkehradresse bei Hook

  Alt 19. Dez 2010, 15:44
Gelesen kommt nie, immer nur Lese. Ist also genau so wie ich im 1. Post gesagt habe.
Das würde ja bedeuten, das die aufgerufene Funktion nicht beendet wird ... Sehr seltsam
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:57 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