Ollydgb - Einsteiger braucht Hilfe

04/09/2012 22:53 TheCherry#1
Hallo liebe pvpers,

ich bin seid heute an dem Thema OllyDbg dran.
Mein Ziel ist es einen Bot für das Spiel Nostale zu schreiben, dieser soll jedoch durch dll inject oder ähnliches call Funktionen des Spieles ansprechen.

Bisher habe ich es geschafft gewisse Fixe werte zu ändern um so z.B. Punkte die ich von einem Minispiel bekomme hoch zu setzen.

Um mich nun an den oben beschrieben Bot zu machen, wollte ich als erstes den Call raus finden der das Target wechselt (ist ein klick spiel, also so wie in WoW).
Nun habe ich in Cheat Engine erst einmal die Adressen gesucht die sich ändern sobald ich das Target denn wechsel und somit auch über "Find out what writes to this adress" die richtige Assembler stelle heraus gefunden.

Nun noch der richtige Breakpoint in OllyDbg und tada ich kann beim wechseln des Targets einen anderes vorschreiben (ich wähle im Spiel Target 1, nach break und 1 step, wechsle ich in CE die ID, Target 2 ist gewählt)

Doch wie kann ich nun herausfinden welcher Call notwendig ist um von Außen das Target zu wechseln?
Kann ich Calls in OllyDbg selbst herbei führen (zur laufzeit)?

Ich bin echt noch neu in dieser Abteilung und mir raucht der Kopf nach 5 Stunden rumprobieren :D Habe besonders nie was mit Assembler gemacht.
Ich hoffe ihr könnt mir was weiterhelfen. Tut's und Anregungen was ich als nächstes erst mal üben sollte, wäre nett.

Danke :)
04/09/2012 23:15 MoepMeep#2
braik, alles klar. ;o
04/09/2012 23:26 TheCherry#3
legastheniker ich darf das :P
04/09/2012 23:53 Tyrar#4
ollydbg selbst kann soweit ich weiss nichts callen, dazu wäre der ida debugger besser geeignet
04/10/2012 01:51 TheCherry#5
Quote:
Originally Posted by HeavyHacker View Post
ollydbg selbst kann soweit ich weiss nichts callen, dazu wäre der ida debugger besser geeignet
gibts denn noch ne andere Möglichkeit? Oder muss ich dann DLL inject machen?
Würde halt gerne einfach mal ein Paar calls ausprobieren, um auch die richtige zu finden.
04/10/2012 02:11 MrSm!th#6
IDA ist ein statischer Disassembler, wie kommst du auf die Idee?

Natürlich geht das mit Olly, mit Codecaves.

Aber ich verstehe nicht ganz das Problem. Du hast doch mit nem Breakpoint die Adresse gefunden, wo das Target gewechselt wird. Schau doch einfach auf den Stack und gehe in der Hierarchie zurück, bis du zu einer Funktion kommst, die du selbst (zb. aus einer Dll) angenehm aufrufen kannst.
04/10/2012 02:20 TheCherry#7
Quote:
Originally Posted by MrSm!th View Post
IDA ist ein statischer Disassembler, wie kommst du auf die Idee?

Natürlich geht das mit Olly, mit Codecaves.

Aber ich verstehe nicht ganz das Problem. Du hast doch mit nem Breakpoint die Adresse gefunden, wo das Target gewechselt wird. Schau doch einfach auf den Stack und gehe in der Hierarchie zurück, bis du zu einer Funktion kommst, die du selbst (zb. aus einer Dll) angenehm aufrufen kannst.
Wie gehe ich in der Hierachie zurück ohne mir ein Bein auszubrechen, weiß noch nicht ganz wie das geht.
Eine "Funktion" ist doch ein Call auf eine Prozedur oder? Wie kann ich diese denn genau "aufrufen"?

Ich habe mir halt gedacht das ich die Call Prozeduren einfach mal aus dem Olly aufrufe, um zu sehen ob der Call den ich mir raus suche, auch der richtige ist.

Kannst du das mal mit dem Codecaves etwas genauer erklären? :)
04/10/2012 16:46 Tyrar#8
Quote:
Originally Posted by MrSm!th View Post
IDA ist ein statischer Disassembler, wie kommst du auf die Idee?

Natürlich geht das mit Olly, mit Codecaves.

Aber ich verstehe nicht ganz das Problem. Du hast doch mit nem Breakpoint die Adresse gefunden, wo das Target gewechselt wird. Schau doch einfach auf den Stack und gehe in der Hierarchie zurück, bis du zu einer Funktion kommst, die du selbst (zb. aus einer Dll) angenehm aufrufen kannst.
ida hat einen integrierten debugger (soweit ich weiss), damit kann man z.b. das EIP register auf eine beliebige adresse setzen

Quote:
Originally Posted by TheCherry View Post
Wie gehe ich in der Hierachie zurück ohne mir ein Bein auszubrechen, weiß noch nicht ganz wie das geht.
Eine "Funktion" ist doch ein Call auf eine Prozedur oder? Wie kann ich diese denn genau "aufrufen"?

Ich habe mir halt gedacht das ich die Call Prozeduren einfach mal aus dem Olly aufrufe, um zu sehen ob der Call den ich mir raus suche, auch der richtige ist.

Kannst du das mal mit dem Codecaves etwas genauer erklären? :)
bei jedem function call werden nicht nur parameter auf den stack gepusht, der prozessor legt noch einen wert auf den stack, an den bei der nächsten ret instruction gesprungen wird. funktioniert wie jmp [esp]! in olly wird das auf dem stack rot markiert (return from xxxx)
04/10/2012 17:07 TheCherry#9
Ok habs geschafft gestern Nacht, nachdem ich erfolgreich (nach ca. 3 stunden) endlich eine DLL mit asm code injected habe. Mensch hatte ich Kopfschmerzen danach :D

Danke soweit :)
04/10/2012 17:37 MrSm!th#10
Quote:
Originally Posted by HeavyHacker View Post
ida hat einen integrierten debugger (soweit ich weiss), damit kann man z.b. das EIP register auf eine beliebige adresse setzen
das ist kein call
04/10/2012 19:00 Tyrar#11
Quote:
Originally Posted by MrSm!th View Post
das ist kein call
ist es auch nicht, nur man kann so einen umsetzen!
return adresse auf den stack pushen + EIP ändern = win :)
04/10/2012 23:36 MrSm!th#12
+ Die Funktion wird elendig versagen, weil eventuelle Parameter fehlen und die Calling Convention Probleme machen könnte = win, oh ja
04/11/2012 00:32 Tyrar#13
Quote:
Originally Posted by MrSm!th View Post
+ Die Funktion wird elendig versagen, weil eventuelle Parameter fehlen und die Calling Convention Probleme machen könnte = win, oh ja
die eventuellen würden auch bei nem call fehlen wie hier:
Code:
call 0x13371337
man kann natürlich die parameter auch mit auf den stack pushen und auch wieder runter hauen :|
dann wäre das kein problem, aber das ist hier ja wohl nicht das thema :p
04/11/2012 01:52 MrSm!th#14
Zu einem Funktionsaufruf gehört aber nunmal auch das Pushen von Parametern und darum ging es ja hier und nicht um das simple Ausführen einer Call Instruktion.
Aber richtig, das schweift nun langsam ab.