1

コンソールプログラムを「クラック」して、何かを表示させようとしています。問題は、改行(\r\n)を印刷できないことです。分解装置を使用して、場所を見つけ、バイナリを編集しました。

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

私が言ったように、私は改行を印刷することができません。"\r\n"フォーマット文字列でエンコードして( "%s\r\n"Cの場合と同じように)、印刷"Hi guys\r\n"して、文字列自体でエンコード(作成"Hi guys\x13\x10")して"Hi guys"、2つの奇妙な文字(おそらく0x13と0x10のASCII表現)を取得してみました。

4

2 に答える 2

2

文字を文字列に直接埋め込む2回目の試みは、正しいアプローチでした。ただし、間違った文字番号を使用しました。ASCIIでのリターン/ラインフィードの数値は13と10(10進数)で、0x0dと0x0a(16進数)です。異なる文字である0x13と0x10を使用しました。

文字番号については、コードページ437の表を参照してください。文字19と16(10進数)は、実際には右向きの三角形と二重の感嘆符です。

于 2011-01-10T18:15:47.770 に答える
1

(Windowsの)改行は\r\nです。

于 2011-01-10T17:58:22.320 に答える