Bitte um Hilfe bei DLL byte patching mit ollydbg

06/12/2011 14:18 KendoMugen#1
Hi,

ich habe ein Problem mit einem Bytepatch und hoffe, ihr könnt mir da weiterhelfen. Für Tests muss ich eine DLL modifizieren, damit mich nicht eine hardgecodete Spielfunktion die ganze Zeit nervt. Ich habe einen ganzen Code als Patch bekommen mit folgendem Aufbau.

1******D .E9 A******0 JMP name.1******D

Wobei * = Ziffern sind und name ein Wort ist, welches genau so heißt wie die DLL heißt.

Den soll ich nun per Ollydbg (+DLL loader) in die DLL reinpatchen als Byte patch via ollydbg... aber wie mache ich das? Ich finde leider nichts, was annähernd dieser o.g. Syntax entspricht... :/ Könnt ihr mir da vielleicht bitte weiterhelfen?
Wäre auf jeden Fall sehr nett, vielen Dank schon mal ^^

mfg
KendoMugen
06/12/2011 15:01 xNopex#2
Quote:
1******D .E9 A******0 JMP name.1******D
Na das sieht doch mal so aus wie der Output von Olly:
Adresse|Op-Code/Operanden|Analyse

Kommt jetzt drauf an. Entweder du sollst an der Adresse "1******D" die Bytes mit "E9 A******0" überschreiben, oder das sind die original Bytes und du sollst diese mit "90 90909090" überschreiben. Ich vermute letzteres.
06/12/2011 17:07 KendoMugen#3
Hi, danke erstmal für die Antwort!

Also, der, der mir das sagte, drückt sich leider immer sehr kryptisch aus und ist seitdem auch nicht mehr erreichbar gewesen. Daher weiß ich auch nicht, wie herum das gemeint war.

Gesagt hat er mir nur: "Die DLL ist es, nimm Ollydbg und hier der Code: <s.o.>. Ist ein Byte Patch für die DLL, patch es rein und dann klappt alles."

Also daher kA, ob es so oder so ist. Problem ist aber auch, dass ich allein die Adresse nicht finde bisher. Dann hätte ich ja wenigstens sehen können, welche Daten da per default stehen. Ich hatte gemutmaßt, dass eine der Ziffernfolgen die Adresse sein müsste und habe mich mit "Go to" versucht, aber für diese Adresse, also die erste Ziffer der Zeile, wird "no memory" ausgegeben...

Nun, entweder hab ich was falsch verstanden, wie man in ollydbg sucht, oder die Adresse ist echt nicht vorhanden und ich patche sie quasi "dazu". In letzterem Falle wären es natürlich dann vermutlich echt die Zieldaten hinter E9...


EDIT: Übrigens fällt mir gerade auf, dass das so gleich aussieht: Die erste und die letzte Ziffer der Zeile fangen zwar je mit 1 an und hören mit D auf, sind aber nicht dieselben.
06/12/2011 17:31 xNopex#4
Quote:
Also, der, der mir das sagte, drückt sich leider immer sehr kryptisch aus
Er hat dir eigentlich ganz genau gesagt, was du tun musst:

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

So müsstest du an die Adresse kommen und sie verändern können. Einfach die Vorhandenen Bytes mit denen erstzen, die du geschickt bekommen hast.
06/12/2011 23:17 KendoMugen#5
Hi,

hab das mal so probiert - allerdings habe ich auch da "no memory" ausgegeben bekommen... ich versteh das alles nicht mehr ^^
06/13/2011 11:43 xNopex#6
Es kann durchaus passieren, dass die Dll nicht immer an der gleichen Adresse geladen wird. Jedoch verhält sich die gesuchte Adresse relativ gleich zu der Basis der Dll. D.h. du müsstest mal schauen, ob du anhand des geschickten Patch die Base-Adresse herausraten kannst und dann mit der Base-Adresse vergleichen, wenn du sie in Olly geladen hast und dann mit dem relativen Abstand den Absoluten ausrechnen.
Umständlich, aber es geht.