- 2009-02-17 (火) 23:31
それでは最後にOllyDbgの使い方について学びましょう。
取り敢えず前準備として、OllyDbgの本体と日本語パッチ+プラグインのダウンロードを行います。
○OllyDbg本体…Odbg110.zip
http://www.ollydbg.de/
○日本語パッチ…OllyDbg1.10用日本語化パッチ
Digital Travesia
http://hp.vector.co.jp/authors/VA028184/
日本語化については同梱されている説明書を見ながら行ってください。
それでは早速画面の説明から
左上にあるのがDisassemblerペインで逆アセンブルされたコードが表示されます。EBP=0012ff94と表示されている場所には今現在のフォーカスがあるコマンドの情報が表示されます。
次に、右上にあるのはRegisterペインで現在のレジスタの状態が確認できます。フラグについてはダブルクリックで変更できます。そして、左下にあるのがMemory Dumpペインで、メモリーの内容を確認できます。最後に、右下にあるのがスタックペインで、スタックの状態が確認できます。
とまぁ、取り敢えず画面の構成に関してはこのくらいでおいといて使い方を実際に簡単なアプリケーションを解析しながら覚えてみましょう。それでは以下のURLから練習用のソフトをダウンロードして、OllyDbgから開いてください。
http://security.symphonic-net.com/archive/test/crackme.zip
まずは普通に実行してみて、どんな動作をするか確認してみましょう。F9を押すか、メニューの「解析→実行」を押してください、アプリケーションが実行されます。起動が完了したら、適当に入力してOKボタンを押してみましょう。どうでしょうか?「不正解」というMessageBoxが表示されたと思います。今回はこのパスワードを解析してみましょう。Ctrl+F2を押すか、メニューの「解析→再スタート」を押してください。
ではまず、この不正解という文字列がどこで使われているのかを調べることにします。Disassemblerペインで右クリックをして「検索→すべての参照文字列」を選択します。すると、このアプリケーションの中で使用されている文字列がリスト化されます、どうでしょう?「正解です」や「不正解です」等の文字列が見つかるかと思います。そのうちの「不正解です」をダブルクリックすると、それが参照されているアドレスにジャンプします。
0040143D . 68 20304000 PUSH crackme.00403020 ; ASCII “不正解です”
そこからちょっとずつ上に上がっていくと
004013B0 > /6A FF PUSH -1
↑ここが見つかるでしょう。どうやらこれが関数の一番初めと見て間違いないです。それではここにブレークポイントをセットしてみましょう。フォーカスを合わしてF2を押すか右クリックを押して「ブレークポイント→セット」で一番左のアドレスのところが赤くなるのが確認できると思います。それでは早速実行させてみましょう。
今度はtestと入力してからOKを押してみましょう。ちゃんと004013B0で止まりましたか?
これからステップ実行で一つ一つの処理を見ていきます。F8を押して、進めていってください。
004013EF . /75 48 JNZ SHORT crackme.00401439
↑ここでジャンプしてしまいます。ジャンプ先を見ると、どうやら不正解みたいです、さぁどうしましょう。その前の命令を見てみましょう。
004013EB . 8378 F8 0A CMP DWORD PTR DS:,0A
と0xaとを比べて異なる場合はジャンプするのが分かります。今度はここにブレークポイントをセットして、前のブレークポイントは消していまいましょう。消し方は、消す場所にフォーカスを合わせてブレークポイントをセットするのと同じ事をすると消せます。
今は、処理が止まったままなのでF9を押すか、メニューの「解析→実行」を押してください。
もう一回アプリケーションのOKを押しましょう。
DS:<001B2B40>=00000004
↑こんな感じの情報が表示さていますか?さてさて、これは何でしょうか?4、何か心当たりがありませんか?そう、入力した文字数です。つまり、入力した文字数=0xa=10ならばジャンプしないわけです。
それでは、今度はジャスト十文字の「1234567890」と入力して実行してみます。今度はジャンプせずにそのまま処理が続行されていきます。
00401408 . FF15 B0214000 CALL NEAR DWORD PTR DS:<<&MSVCRT._mbscmp>; \_mbscmp
↑ここまで進ませて、スタックペインを見てください。
0012F740 002C2B98 |s1 = “34567″
0012F744 00403038 \s2 = “krack”
この関数の引数が”34567″と”krack”という文字列だというのが分かり、また呼び出している関数名はmbscmpつまり文字列比較を行う関数です。ここでピキーンときてください。10文字で三文字目から七文字目なら”krack”ならOKなんじゃない?
というわけで今度は「12krack890」と入力してみます。やっと「正解です」が表示されました。
結論としてこのアプリケーションのパスワードは「??krack???」です。
とまぁこんな感じで色々と解析していきます。初心者向け講座はこれにて終了です。色んなアプリケーションを解析して見るなり、本を読むなり、サイトの講座をみるなりして技術を磨いてみてください。
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://security.symphonic-net.com/%e5%88%9d%e5%bf%83%e8%80%85%e5%90%91%e3%81%91%e8%ac%9b%e5%ba%a7/%e3%83%87%e3%83%90%e3%83%83%e3%82%ac%e3%81%aa%e3%81%a9%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9/trackback
- Listed below are links to weblogs that reference
- デバッガなどの使い方 from Security Ark