〜はじめに〜やっと講座4回目で、逆アセンブラの使い方の紹介です。今回はDisassemの使い方を解説します(Diswinの使い方は次回予定です) ただしOSはWindows98を対象とし、逆アセンブルリストの出力には、 DOSプロンプトから直接指定というレトロな方法を用いています。 今更DOSを覚えても仕方ないかもしれませんが、知っておいていても損はありませんし、 過去の技術というのも、結構面白いものですしね♪ 〜Disassem編〜ダウンロードしてきたzipファイルを解凍すると、Dis.exe (※バージョンにより異なります) という実行ファイルが展開されますので、これを使えるようにしましょう。 そのためにパスの通ったフォルダへ、ファイル Dis.exe をコピーします。 …分からない人は、とりあえず WINDOWS フォルダにコピーしちゃいましょう。 (以後の解説は、WINDOWSフォルダにコピーした…ということを前提に解説を進めます) とりあえず、DOSを使ってみるそして、「スタート」→「プログラム」→「MS-DOSプロンプト」の順にメニューを選択し、MS−DOSプロンプトを起動します。
では、以下のように入力してENTERを押してみましょう。
一階層下…つまり上記のコマンドは「C:\ に移動せよ」という意味になります。これで、
上記のように変われば成功です。 では、さらにそこでもDis.exeを実行してみましょう。
(.EXEが省略されていますが、プログラムなどの場合は拡張子を省略できます)。 特定のフォルダにある実行ファイルを、別のフォルダからでも実行できるようにする… とまぁ、これがパスを通す利点です。 ちなみに、ドライブを移動するには…
どんなフォルダやファイルがあるか見たいときは、さらに…
色々と表示されますが、<DIR>という文字がくっついているのがフォルダ名で、 それ以外は全てファイル名になります。 仮に、Dドライブの GAME というフォルダに移動したかったら…
DOS窓を閉じるには、
逆アセンブルリストを出力してみる逆アセンブラは、拡張子EXEの実行ファイルもしくはDLLなどを解析し、リスト化して出力することを目的とされています。 というわけで今度は、その方法を説明します。 仮に、Cドライブのフォルダ GAME にあるプログラム START.EXE を対象 という場合、 手順は以下のようになります。
動作としては「DIS START.EXE」で、START.EXEを対象に逆アセンブル、 「> LIST.ASM」で、ファイル LIST.ASM へ結果を出力…となります。 つまり「DIS START.EXE > START.TXT」と指定すれば、 START.TXTというファイル名で出力することができます。 閲覧方法ファイルを出力できたなら、今度は内容を確認してみましょう。で、閲覧するためにはテキストエディタが必要になります。 ベクターのサイトを見れば、たくさんの方が登録されてますので、色々と探してみましょう。 なお、逆アセンブルリストは数十メガバイト単位まで巨大化する場合もありますので、 出来るだけ動作が軽快なものをオススメします。 (ちなみに、ワードパットでも閲覧できますが、死ぬほど重いです) 出力内容テキストエディタを手に入れたら、逆アセンブルリストを開いて見ましょう。前半に色々と複雑なことが書いてありますが、とりあえずそれらは無視して、 +++++++++++++++++++ ASSEMBLY CODE LISTING +++++++++++++++++++ と書いてある行が見られるまでスクロールさせましょう。 そして、その数行後から、
命令の意味は今後説明しますが、とりあえず読み方を説明しておきます。 1行目を例に挙げると… :00401000 … アドレスです。 55 … そのアドレスにあるデータです。 push ebp … データをアセンブラ言語の命令に翻訳したものです。 と、なります。 もしDBxSTANDでアドレス 00401000 を見ると、そこに 55 というデータがあります。 また、アドレス 00401001 を見ると、8B EC というデータがあります。 8B EC ということで2バイト使っていますので、その次の命令である sub esp, 00000208 は、 アドレス 00401003 から始まっています。 ま、このくらいを覚えておけば一通り読み方が分かりますね。 〜さいごに〜今回紹介した方法は、超が付くほど非合理的ですが、まぁ、こういうやり方もある…ということで。というわけで、次回はDiswin編です。 お楽しみに〜 >>NEXT STEP |