OllyDB Funktionen Debuggen Fragen

Hi, ich habe zwei Frage....
1. Wie findet man Funktionen am schnellsten bzw. wie ist die vorgehensweise...
2. Gibt es eine funktion in OllyDB welche die zuletzt gecallte funktionsadresse anzeigt?

Ich denke das wars ersteinmal...schoneinmal vielen Dank :)
 
Original von valvepro
Hi, ich habe zwei Frage....
1. Wie findet man Funktionen am schnellsten bzw. wie ist die vorgehensweise...


Was für Funktionen? Allgemein alle existierenden Funktionen?
Wenn du eine bestimmte Funktion meinst, gibt es immer auch nur eine bestimmte Vorgehensweise zum auffinden. ;)

Original von valvepro
2. Gibt es eine funktion in OllyDB welche die zuletzt gecallte funktionsadresse anzeigt?

1. Prozess pausieren
2. Thread auswählen
3. Stack nach letzter Rücksprungadressen absuchen

Allerdings wirst du etwas enttäuscht sein. ;)
Deswegen muss man im Stack schon mal etwas "tiefer" graben um an die interessanten Funktionen im Main-Image zu kommen, die du sicherlich finden wolltest.
 
Ich meine eine bestimmte funktion... es geht um ein Spiel... wenn ich das game pausiere, kann ich ja kein knopf im Spiel drücken, sodass er zu dieser Funktion springt...

PS: Wie mache ich das genau? @3. Stack nach letzter Rücksprungadressen absuchen
 
Original von valvepro
Ich meine eine bestimmte funktion... es geht um ein Spiel... wenn ich das game pausiere, kann ich ja kein knopf im Spiel drücken, sodass er zu dieser Funktion springt...

Es werden die ganze Zeit etliche viele Funktionen von verschiedenen Threads aufgerufen. Nachdem du eine bestimmte Aktion im Spiel durchgeführt hast, kannst du dir absolut sicher sein, dass gleich danach zig-tausend andere Funktionen in der Zwischenzeit aufgerufen wurden. :D

Du musst dich also herantasten, Merkmale und Werte finden, die diese Funktionen benutzen könnte. Beschreib mal die Funktion. Was ändert sich objektiv nach dem ausführen deiner Aktion?
Ändert sich ein sichtbarer Wert? Wird ein String irgendwo angezeigt? Eine Position eines Spielers? Wird eine Grafik geladen? Ein Objekt? Ein Sound abgespielt?
Du brauchst Anhaltspunkte um die gewünschte Funktion zu finden.

Original von valvepro
PS: Wie mache ich das genau? @3. Stack nach letzter Rücksprungadressen absuchen

Nachdem du pausiert hast, schaust du dir den Stack an. Jeder Eintrag mit "Return to xxxxx" ist ein Indiz für ein Aufruf.
Also unterhalb des Stack-Pointers siehst du die letze genestete Aufrufkette seit der main().
In deinem Fall nicht besonders interessant, da möglicherweise in der Zeitspanne vom auslösen der Aktion im Spiel bis zum pausieren viel zu viel Zeit vergeht, sodass man den interessanten Aufruf nicht mehr sieht.
 
Es ändert sich die Position des spielers, sound werden sowieso massig abgespielt... und effekte tauschen auf.... habe schon versucht nach den werten zu beguggen, aber kann es auch sein, das die funktion so nicht aufrufbar ist?

EDIT: Wenn du magst kannst mir auch gern via ICQ ode rso helfen, dann kann ich das problem evtl. schneller lösen?!^^...
 
Hallo valvepro,

Beim Aufruf einer Funktion oder Prozedur wird immer in der Funktion der Basepointer in den Stack gepusht und in den Basepointer den Wert es Stackpointers verschoben. Am Ende der Funktion wird der Basepointer gepopt und mit RETN die jeweiligen Elemente aus dem Stack entfernt. Das hat den Vorteil, dass man in der Funtkion als auch nach und vor der Funktion soviel in den Stack pushen als auch popen kann. Das kann man schon anhand der calling convention sehen. Beim RETN wird auch die Adresse angezeigt wohin wieder Zurückgesprungen wird(Rücksprungadresse/EIP-Register...). Das Resultat befindet sich meist im EAX-Register bzw. auch in den Unter-Registern.

Du kannst auch genau so mit STRG + G zu der z.B. MessageBoxA-Funktion springen und dort einen Breakpoint setzen und am Ende bzw. RETN sehen wohin gesprungen wird. Das ist wohl die einfachste Möglichkeit. Alle Funktionen, die das Programm verwendet kann man in der IAT sehen. Dazu einfach im OllyDbg Search for -> All intermodular call wählen um sich alle Funktionen anzuzeigen. Oder man kann sich auch die API-Funktion anzeigen lassen: Search for -> Name(label) in in currentmodule. Wenn die Anwendung in Delphi programmiert worden ist, kann man einfach mit DeDe sich enie Liste exportieren und diese im OllyDbg importieren, so dass man an der Seite(wo die VA's sind) alle Funktionen übersichtlich ansehen kann.

the_uxreal
 
Original von the_uxreal
...Dazu einfach im OllyDbg Search for -> All intermodular call wählen um sich alle Funktionen anzuzeigen. Oder man kann sich auch die API-Funktion anzeigen lassen: Search for -> Name(label) in in currentmodule.....

Damit kann ich mir aber nur Funktionen die benutzt werden anschauen, welche in dlls sind (user23.dll etc..) Möchte jedoch die Funktionen der Main einsehen... ist das auch irgendwie möglich?

Vielen Dank schoneinmal...
 
Ich würde dir empfehlen IDA zu benutzen. IDA versucht mithilfe einer statischen Analyse des Codes alle Funktionen herauszufinden und aufzulisten.
Das werden aber ganz schön viele sein bei einem Spiel. Die alle durchzugucken wird kaum möglich sein.

Wie ich sagte: Merkmale finden.
Wenn sich also die Position des Spielers verändert bei dieser Aktion, werden da Geräusche abgespielt? Geräusche, die sonst NICHT abgespielt werden?
Jedenfalls könntest du die Soundausgabe dieses Geräuschs (WinAPI) dann möglicherweise auf die Funtion, die die Aktion bearbeitet, zurückverfolgen. (Nützlich sind da die IDA Call-Graph Funktionen)
 
Hallo valvepro,

wenn es sich um ein Spiel handelt, kann einfach z.B. den Wert der Munition im Arbeitsspeicher finden, was man mit z.B. TSearch machen kann. Im OllyDbg kann man anschließend einen Breakpoint auf Hardwarezugriffe setzen, so dass man der Funktion "näher" kommt.

Wie aber +++ATH0 schon sagte, ist es am besten nach Anhaltspunkten zu suchen. IDA ist meiner Meinung nach her nicht nötig. Mit dem OllyDbg kommt man auch so ganz gut aus.

the_uxreal
 
Zurück
Oben