連載
» 2012年04月19日 00時00分 公開

リバースエンジニアリング入門(6):API名のハッシュ化テクニックを理解せよ! (1/3)

コンピュータウイルスの解析などに欠かせないリバースエンジニアリング技術ですが、何だか難しそうだな、という印象を抱いている人も多いのではないでしょうか。この連載では、「シェルコード」を例に、実践形式でその基礎を紹介していきます。(編集部)

[青木一史,日本電信電話株式会社]

一筋縄にはいかないAPI名の取得

 第5回「PEフォーマットを解釈せよ!」までで、download_execのシェルコードを一通り読みきりました。特に、前回はたくさんのアセンブリコードを読みましたので、だいぶ解析に慣れたのではないか思います。

 さて、今回はdownload_exec以外のシェルコードを読みながら、シェルコードでよく用いられるAPI名ハッシュ化テクニックを解説します。ここではシェルコードで使われる一例として解説しますが、マルウェアにはこういった類のハッシュ化テクニックを使うものがありますので、しっかり理解しておきましょう。

IDA Tips 1:スタックポインタの表示

 ここでちょっとだけ脱線して、解析を少しやりやすくするためのIDAの設定方法や操作方法についてお話しします。たくさんの検体を素早く解析するには、解析ツールを使いやすくする、自分の手になじむ形にする、ということも大切です。

 前回解説したように、逆アセンブル結果を追うときには、各時点でのスタックやレジスタの内容を把握することが大切です。スタックを介したレジスタ値の変更を把握する際には、pushやpopといった命令に目を向ける必要があります。

 push命令でスタックに積まれた値をpop命令で取り出す、というのはよく行われる処理です。このpush命令で取り出す値が何なのかを知るには、どのタイミングにどの値がスタックに積まれたかを把握しなければなりません。そこで、処理を行う中でスタックポインタがどのように変化するのかを追いやすくなるように、表示の設定を変えてみましょう。

 メニューバーを[Options]→[General]とたどり、「IDA Options」の「Disassembly」タブの「Display disassembly line parts」を見てみると、「Stack pointer」というチェックボックスが確認できます。ここにチェックを入れると、IDAが関数として認識している範囲において、スタックポインタの増減が逆アセンブリ表示の左側に出るようになります。pop命令が実行されるときのスタックポインタの値を把握した上で逆アセンブリのコードをさかのぼって見てみれば、どの値をpopしようとしているかをすぐに把握することができます(図1)。

図1 スタックポインタの表示(クリックすると拡大します) 図1 スタックポインタの表示(クリックすると拡大します)

IDA Tips 2:グラフビューへの切り替え

 IDAでは、関数として認識されている範囲において、分岐がグラフで表示される「グラフビュー」を利用できます。キーボードの「スペース」を押すと、グラフビューに切り替えることができます(図2)。関数全体の把握や、分岐でどのように制御が移るかといった事柄が一目で把握できるので、こちらの方が解析しやすいという方もいるでしょう。

 ただ、IDAが関数の領域を関数として認識してくれていない場合もあります。その場合は、関数のエントリポイントにカーソルを合わせてキーボードの「p」を押してみましょう。これは、カーソル位置より後の処理部分を関数として定義するためのショートカットキーです。うまくいけばIDAに関数として認識させることができます。

図2 グラフビューでの表示(クリックすると拡大します) 図2 グラフビューでの表示(クリックすると拡大します)

 非常に簡単な設定、表示の切り替えについて説明してきましたが、その他にも独自のショートカットキーを設定したり、表示の色を変えたりと、さまざまな設定を行うことができます。設定やカスタマイズについては、IDAのオフィシャルサイトに簡単なチュートリアルが掲載されているので、興味があればこちらも確認してみるとよいでしょう。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。