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
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#1

AW: Rückkehradresse bei Hook

  Alt 19. Dez 2010, 20:29
Du kannst den originalen code nicht einfach so aufrufen. Immerhin hast du 5 Bytes überschrieben. Genau die müssen wieder vorher ausgeführt werden. Und meistens zerschneidest du halt eine Assembler Anweisung, d.h. du musst vorher den Code noch analysieren und ggf. 6 und mehr Bytes kopieren.

Für dich gibt es jetzt mehrere Möglichkeiten:
a) bevor du die originale Funktion aufrufst machst du den patch wieder rückgängig und am Ende deiner Funktion patched du wieder. (dann aber nicht jedes mal VirtualProtect aufrufen), das is sehr langsam -> nicht so einfach mit ThreadSafe, und wenn dann wieder langsamer (z.b. Mutex)
b) du kopierst die dll und lädst sie ein 2. mal und rufst dann da die Funktion von auf (ggf. funktioneirt das nicht wenn die dll mit globalen variablen arbeitet)
c) du nimmst eine andere Hook-Möglichkeit z.B. Import/Export/Relocation/PageGuard/ hook (ggf. verlierst du dadurch aber ein paar Aufrufe)
d) du immst eine Dll (Name enfallen) die macht das alles für dich direkt auf Treiberebene (capi oder so?)
e) seit Windows XP haben viele Funktionen 5 NOPs vor dem EntryPoint. Ist das der Fall kannst du dort deinen Jump reinschreiben und dann die ersten bytes mit einem short JMP dahhin überschreiben (das wird bei Windows Updates teilweise so gemacht)
f) du nimmst fertige HookingUnits ( z.b. meine http://uall.Cheat-Project.com/uallCollection oder madshis (madshi.net)
  Mit Zitat antworten Zitat
WorstNightmare

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

AW: Rückkehradresse bei Hook

  Alt 20. Dez 2010, 14:13
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?

Geändert von WorstNightmare (20. Dez 2010 um 14:51 Uhr)
  Mit Zitat antworten Zitat
brechi

Registriert seit: 30. Jan 2004
823 Beiträge
 
#3

AW: Rückkehradresse bei Hook

  Alt 20. Dez 2010, 19:19
Also wenn du das hardcoden willst:

schreib dir ne funktion:
Delphi-Quellcode:
  function NewSend(s: TSocket; var Buf; len, flags: Integer): Integer; stdcall;
  asm
    // delphi erzeugt den gleichen Stackframe (d.h. push ebp; mov ebp, esp)
    // adresse nach deinen ueberschriebenen bytes
    // einfacher absoluter jump
    push $7742c4cd
    ret
  end;
die kannst du dann innerhalb deines Callbacks aufrufen.

btw. das mov edi, edi
zeigt genau auf das verhalten e) hin
  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:52 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