2

これは私の最初の投稿であり、アセンブリとデバッグは初めてなので、ご容赦ください。

Windows 7 メモ帳の実行可能ファイルにコード (MessageBoxA への小さな呼び出し) を挿入しようとしていました。しかし、アドレスの問題に遭遇しました。まず、OllyDbg で exe を開き、「notepad.pdb」の ASCII テキストを含む行に移動しました。次に、その下に ASCII 文字列を配置します (たとえば、「INJECTED NOTEPAD」)。次に、その下に、次の asm コードを入力しました。

PUSH 0
PUSH address_of_ASCII_string ; In this case, 00A6B668C
PUSH address_of_ASCII_string ; In this case, 00A6B668C
PUSH 0
CALL MessageBoxA

次に、プログラムのコードの最初の行に移動しました (単純に右クリックして [Go to Origin] を押します (またはテンキーで * を押します))。次に、最初の行を最初のアドレスへの JMP 命令に置き換えました。挿入されたコードで 0 をプッシュします。次に、差し込んだコードの最後に、置き換えた命令を挿入します。その後、挿入されたコードにジャンプする JMP 命令の後のコード行に JMP 命令を配置します (はい、コードケーブまたは一種を記述しました)。実行するとすべて正常に動作します。ただし、変更したコードを新しい実行可能ファイルに保存し、OllyDbg で再度実行すると、機能しません。入力した ASCII 文字列を参照しようとすると、アドレスが完全に間違っています。例を以下の写真に示します。

ご覧のとおり、文字列をスタックにプッシュしますが、変更したプログラムをデバッガーに再度読み込むと、文字列のアドレスは変更されますが、私のコードは変更されません。したがって、MessageBoxA 関数を呼び出すと、Text および Caption 引数に間違ったアドレスをロードしたため、エラーが発生します。これを修正するにはどうすればよいですか?

4

1 に答える 1