講座03 〜プログラム改造〜

〜はじめに〜

やっと、プログラム改造です。
第1回で逆アセンブラやプロセスエディタを紹介したので、いきなりそれらを使っても良いのですが
今回はプログラムで使われているメッセージを書き替えるという基礎的な内容で行きたいと思います。

プログラムで使われているメッセージ

実行ファイルをバイナリエディタで覗くと、アスキーダンプ(バイナリエディタの右側)に、
「バージョン情報」とか「**が開けません」のような文字列が見られると思います。
実行時に表示されているメッセージはここを参照しているものですので、もちろん、
この部分を書き替えてしまえば、任意のメッセージを表示させることが可能になります。
…それだけのことです(笑

今回のターゲット

ウインドウズには、ゲームとしてマインスイーパというのが付属しています。
(OEM版Win98だとカスタムインストールしないと入りませんけど…)
WINDOWSフォルダに WINMINE.EXE というファイルがあれば当たりですんで、
それをどこか別フォルダにコピーしてください。
(無くても「コントロールパネル→アプリケーションの追加と削除」でインストールできます)

バイナリエディタで開いたら、アスキーダンプにそれらしい文字列が表示されるまでスクロールします。
ちなみに、作成時刻が98年06月12日、データサイズが24,251バイトの場合、
オフセット 00005746以降に見つかります。

では、それを任意のメッセージに書き替えてしまいましょう。
バイナリエディタStiringを使えば、アスキーダンプ部分に直接入力できますのでオススメです。
ただし、「絶対に、元の文字数を越えないように」気をつけましょう。
増えた分だけ後のメッセージの位置がズレて、データが壊れてしまいます。
あと、元の文字数よりも少ないメッセージを書き込むのなら、余った部分を 00 に書き替えてください。
(代わりにスペースで埋める…という手もOKです)

…というわけで、その方法を使って書き替えた結果が以下の画像です。


ま、こーいうこともできる〜ということで…

さいごに

おっしゃ、この知識の応用でゲームのキャラの台詞を書き替え〜〜
…なんてことは、滅多にうまくいきません(苦笑
この方法では、必ずメッセージがプログラムに格納されている必要があります。
あくまで「パラメータと同じく、プログラムも書き替えることができる」という考え方を
覚えるために紹介したもので、実践ではあまり使わないのであしからず〜です。

ってわけで、次回から逆アセンブラを使った内容を紹介してゆきます。
ではでは。

>>NEXT STEP