OllyDbg

03/03/2014 15:03 Doktor.#1
[C++]
Hey, bin nicht der Erfahrenste im Bereich RE, daher frag ich mal hier nach, sonst komm ich ja nie dahinter wie dies genau gehandhabt wird. :b

Also mir gehts darum, das ich versuche einen String auszulesen. Ich habe in OllyDbg einen Breakpoint gesetzt und ihn im Game ausgelöst, danach konnte ich im Fenster den kompletten String sehen.
Den String würde ich gerne auslesen, aber der String scheint an dem Pointer nur zu existieren wenn ich den Breakpoint auslöse.

Jemand 'ne Ahnung wie ich es auslesen könnte, bzw. warum es nur nach'm Break zu lesen ist?

[Only registered and activated users can see links. Click Here To Register...]

Mfg.
Doktor.
03/03/2014 15:17 ​Tension#2
Hast du die Adresse des Strings mal im Hex Dump angeguckt und sicher gestellt das der String wirklich nur an dem Break in der Adresse steht? Jedenfalls kannst du ein Programm schreiben welches einen BreakPoint dort setzt und wenn er erreicht wird liest du den String aus.
03/03/2014 17:11 Doktor.#3
Im Hex Dump ist sie genauso weg.

Hast den einen Ansatz dazu einen Breakpoint mit C++ zu erstellen?
03/03/2014 18:35 ​Tension#4
Mit einer Dll:
[Only registered and activated users can see links. Click Here To Register...]

Mit einer Exe ( Credits gehen an Nov von UC ):
(Musst du halt anpassen aber sollte dir doch eigentlich gelingen oder ?)
03/04/2014 10:26 buFFy!#5
Irgendeinen Hook (da geht jeder, kommt halt auf das Spiel an) setzen und dann einfach den Wert vom Stack holen. Inline ASM regelt. Besser wäre aber du traced von wo der String kommt und holst ihn dir direkt von dort.
03/04/2014 16:50 ​Tension#6
Weiß nicht ob buFFy! und ich das selbe meinen:

0051EDD4 -> Hooken und das EDX register auslesen.
03/04/2014 16:56 MrSm!th#7
Quote:
Originally Posted by Ten$ion View Post
Weiß nicht ob buFFy! und ich das selbe meinen:

0051EDD4 -> Hooken und das EDX register auslesen.
Ja und der Breakpoint ist prinzipiell derselbe Ansatz, wenn auch ineffizienter als eurer.
03/04/2014 18:33 Doktor.#8
Danke, habs jetzt mit einem Breakpoint gemacht.

Kann somit geschlossen werden.
03/04/2014 20:30 MrSm!th#9
Wenn es auf die Laufzeit ankommt und auch sonst nichts dafür spricht, würde ich keinen Breakpoint nehmen. Das ist unnötig langsam.
03/04/2014 20:42 ​Tension#10
Quote:
Originally Posted by MrSm!th View Post
Wenn es auf die Laufzeit ankommt und auch sonst nichts dafür spricht, würde ich keinen Breakpoint nehmen. Das ist unnötig langsam.
^this

Würde in dem Fall allgemein Hook bevorzugen weil es auch einfacher ist ( meiner Meinung nach ), extra dafür nen BreakPoint Handler zu verwenden finde ich etwas unnötig.
03/05/2014 07:26 Doktor.#11
Da ich noch nicht viel mit Hooks etc. gemacht hab, fiel mir mit deinem Beispiel das mit dem Breakpoint einfacher.
Das es langsam ist hab ich auch gemerkt, aber genügt fürs erste für mich.

Schaue mir erstmal Lena's Tuts weiter, damit ich mehr davon verstehe.
03/05/2014 11:32 buFFy!#12
Quote:
Originally Posted by Ten$ion View Post
^this

Würde in dem Fall allgemein Hook bevorzugen weil es auch einfacher ist ( meiner Meinung nach ), extra dafür nen BreakPoint Handler zu verwenden finde ich etwas unnötig.
Hook ist ein allgemeiner Term. Das kann also auch ein Breakpoint sein.
Exceptions sind allgemein slow as fuck, klar ist da alles besser.

Mittlerweile detected so ziemlich jedes AC das Standardzeugs wie VEH etc..
Gibt also nahezu keinen Grund mehr sowas noch zu nutzen.

Der wohl beste Grund für einen "BreakPoint Handler" (Ich geh mal davon aus du meinst WaitForDebugEvent)
ist wohl, wenn man einen Debugger schreibt ;)
03/05/2014 17:00 MrSm!th#13
Quote:
Originally Posted by Doktor. View Post
Da ich noch nicht viel mit Hooks etc. gemacht hab, fiel mir mit deinem Beispiel das mit dem Breakpoint einfacher.
Das es langsam ist hab ich auch gemerkt, aber genügt fürs erste für mich.

Schaue mir erstmal Lena's Tuts weiter, damit ich mehr davon verstehe.
Einen ganz normalen Detour würde ich als simpler bezeichnen als einen Breakpoint.
Hol dir MS Detours und es ist gerademal ein Funktionsaufruf.

@buffy
Wenn ein AC im Spiel ist, kann man sowieso ohne Bypass schonmal alle direkten Hooking Techniken abschreiben. Ob man da nun nen int3 BP, nen Hardware BP oder nen normalen Detour setzt..
03/06/2014 18:37 buFFy!#14
Quote:
Originally Posted by MrSm!th View Post
Einen ganz normalen Detour würde ich als simpler bezeichnen als einen Breakpoint.
Hol dir MS Detours und es ist gerademal ein Funktionsaufruf.

@buffy
Wenn ein AC im Spiel ist, kann man sowieso ohne Bypass schonmal alle direkten Hooking Techniken abschreiben. Ob man da nun nen int3 BP, nen Hardware BP oder nen normalen Detour setzt..
Dann ist die Frage aber was du mit "direkt" meinst. VTable hux geht meistens klar.
03/06/2014 19:37 MrSm!th#15
Ein direkter Sprung am Start der Funktion, ein BP am Start der Funktion, etc.
Für VTable Hooks muss es erst einmal eine VTable geben und so undetected sind die mittlerweile auch nicht mehr.