printf()を呼び出して、実行可能ファイルを編集します
-
09-10-2019 - |
質問
コンソールプログラムを「クラック」しようとしており、何かを表示するように強制しています。問題は、新しいラインを印刷できないことです(\r\n
)。 Disasseblerで私はその場所を見つけて、バイナリを編集しました:
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表現。
解決
2回目の試みは、文字をストリングに直接埋め込むことで、正しいアプローチでした。ただし、間違った文字番号を使用しました。 ASCIIのリターン/ラインフィードの数値は13および10(小数)で、0x0Dおよび0x0A(16進数)です。 0x13と0x10を使用しました。これは異なる文字です。
のテーブルを参照してください コードページ437 文字番号の場合。文字19と16(小数)は、実際には右の指の三角形であり、二重の感嘆符です。
他のヒント
新しいライン(Windows)はです \r\n
.
所属していません StackOverflow