Hex zahlen an Addresse auslesen
-
Stimmt, ich irre mich wohl. Ich sehe an Adressen, wo Programmvariablen sind, in OllyDbg in der CPU-Ansicht OP-Code, allerdings ändert der sich, wenn sich der Variablenwert ändert. Also OllyDbg zeigt die Werte einfach als OP-Code an, reine Interpretationssache (Wobei ich mir immer noch einbilde, an selber Adresse wie einer Programmvariablen _gültigen_ OP-Code gesehen zu haben, aber da irre ich mich wohl).
-
fricky-Fake schrieb:
[...]aber da irre ich mich wohl).
tust du, ganz sicher

Je nach Form der da abgelegten Variablen kann Olly da durchaus mehr oder weniger sinnvollen Code interpretieren.greetz KN4CK3R
-
hallo!
TCHAR buff[6]; HANDLE hproc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 15); ReadProcessMemory(hproc, address, buff, 6, 0); MessageBox(0, buff, buff, 0);warum bekomme ich dadurch nur seltsame zeichen?
Wenn ich es statt mit char, int mache klappt es. Dann kann ich die ersten 4 bytes auslesen. Aber ich brauche die ersten 6 bytes also geht es mit int nicht.
Also warum klappt dieser code oben nicht?
-
- Stimmt die Prozess-ID (15) ?
- Was ergibt sizeof(buff) ?
- Lesen (und verstehen) was EOP geschrieben hat.
-
ja die pid stimmt sicherlich. (nehme sie immer neu ausm task manager)
Aber wie interpretiere ich es richtig als hex? ich kann ja char nicht als hex interpretieren...
-
Tobi@loggedoff schrieb:
Aber wie interpretiere ich es richtig
Das hängt nun davon ab, was die eingelesenen Bytes darstellen sollen. Einmal angenommen, es soll sich um einen "OP-Code" handeln. Dann geht es in etwa weiter wie folgt:
if (buff[0] == 0x68) { // dann Opcode "PUSH" // buff[1] bis buff[4] könnten interessant sein }Eine vollständige Referenz gibt es irgendwo im Assemberforum oder gleich bei Intel (oder AMD)(oder x86-SelfBurned-CPU).
Tobi@loggedoff schrieb:
ich kann ja char nicht als hex interpretieren...
Aber eventuell als "hex" ausgeben lassen. In etwa wie folgt:
TCHAR buff2[40]; wsprintf (buff2,"%02X %02X%02X%02X%02X",buff[0],buff[1],buff[2],buff[3],buff[4]); MessageBox(0,buff2,buff2,0);
-
danke +gjm+

jetzt bekomme ich schon mal normale Zahlen als Ausgabe. Verstehe sie aber nicht wirklich, da sind so viele FFFF dabei und ich kann nicht unterscheiden, was zu den opcodes gehört und was nicht
-
die Ausgabe stimmt jedenfalls:
Originale Opcodes:
8B0d0498aB00
opcodes aus dem Programm:
FFFFFF8BD4FFFFFF98FFFFFFAB0
jetzt muss ich nur noch die F wegbekommen, außerdem werden die nullen falsch interpretiert 0d wird z. B. zu D und 00 zu 0
-
Offenbar ist das ominöse "TCHAR" vorzeichenbehaftet.

Probier mal "unsigned char buff2[40]".
-
danke!! leider werden aber immernoch die Nullen verschluckt, aber dagegen kann man wohl nichts machen
-
aber das ist egal das passt so auch danke nochmal +gjm+!!
-
das mit dem 0 bekommst du weg, indem du entweder sowas machst:
for(int i = 0; i < sizeof(buf); i++) if(buf[i] < 0xF) //mach ne 0 dazu etcoder du benutzt "%.2X" im sprintf Code, dann sollten 0en dabei sein.
greetz KN4CK3R