〜はじめに〜前回で分岐命令について、判定分岐や無条件分岐といった基本を紹介しました。というわけで今回は、これらを書き替える方法を解説します。 判定分岐→無条件分岐まずは、判定分岐を無条件分岐(jmp)に書き替えてみましょう。これの効果は「条件に関係無くジャンプするようになる」ですね。 …と言ってもそんな複雑なことはしません。 前回、判定分岐のバイナリデータが 7xyy で、無条件分岐が EByy であると紹介しましたが、 言いかえると 7x の部分を EB にすれば強制的に無条件分岐になるということがわかります。 たとえば、
これで上にどんな判定処理があろうとも、必ずアドレス 004010A6 に飛んでしまいます。 分岐命令→無効化今度は、判定分岐・無条件分岐を無効化してジャンプしないようにする方法を紹介します。(無条件分岐はむやみに書き替えないほうが良いと思いますが…) ってわけで無効化です。 これについては、すでに講座6回目で紹介してますね。 つまり、分岐命令は nop 命令で無効化できるってわけです。 たとえば、
それで、上の判定分岐 jne 00401064 を潰して、必ず下の jmp 004010A6 を実行させたいとすると…
ところで、今更言わなくても分かってると思いますが、 テキストエディタで逆アセンブルリストを書き替えても、何も起こらないので注意です。 ちゃんと、プロセスエディタで上記のアドレスを書き替えるか、バイナリエディタでサーチしたオフセットを 書き替えてくださいな(友人に、勘違いしている人が居たので念のため…) 私の解説で逆アセンブルリストの記述を書き替えたように表記しているのは、 書き替える前と後の逆アセンブルリストの出力結果を表しているためです。 さいごに…今回解説予定だったCDチェック解除は、次回になります。まぁ、これは今回の講座第8回に積めこみすぎるのを防止するためっす。 (しかも、タイトルが「分岐処理を書き替える」ですし(汗)) ご了承くださいな。 >>NEXT STEP |