Frage

Ich versuche zu „knacken“ ein Konsolenprogramm, es zwingt etwas anzuzeigen. Das Problem ist, ich nicht eine neue Zeile (\r\n) drucken kann. Mit einem disassebler fand ich den Ort und die binären bearbeitet:

push 4ad0eb46                      ; the string (let's pretend "Hi guys")
push 4ad0eb80                      ; and the format ("%s")
call near ds:[<&msvcrt.printf>]    ; call printf
jmp 4ad0eb4f                       ; skip data

; now here I coded the strings

mov ds:[4ad289ec],eax              ; and here the program resumes

Wie gesagt, ich kann nicht eine neue Zeile drucken. Ich habe versucht, kodieren "\r\n" im Format-String (so es "%s\r\n" wird, wie ich es in C tun würde) und gedruckt "Hi guys\r\n" bekommen, und kodieren sie in der String selbst (so dass es "Hi guys\x13\x10") und get "Hi guys" und zwei seltsame Zeichen, wahrscheinlich die ASCII-Darstellung von 0x13 und 0x10.

War es hilfreich?

Lösung

Ihr zweiter Versuch, mit den Zeichen direkt in die String einbetten, war der richtige Ansatz. Allerdings haben Sie die falschen Zeichen Zahlen verwendet. Die Zahlen für die Rückgabe / Zeilenvorschub in ASCII 13 und 10 (dezimal), die 0x0d und 0x0A (hex) ist. Sie haben verwendet 0x13 und 0x10, die unterschiedliche Charaktere sind.

In der Tabelle unter Codepage 437 für die Zeichenzahlen. Die Zeichen 19 und 16 (dezimal) sind in der Tat ein Recht weisendes Dreieck und ein Doppel-Ausrufezeichen.

Andere Tipps

Ein Newline (in Windows) ist \r\n.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top