IDAの操作メモ - メニュー編(その1) - | reverse-eg-mal-memoのブログ

reverse-eg-mal-memoのブログ

サイバーセキュリティに関して、あれこれとメモするという、チラシの裏的存在。
medium(英語):https://sachiel-archangel.medium.com/

IDAの各メニューをざっくり紹介します。

各機能まで書くと大分時間がかかるので、とりあえず割愛します。

(後日、気が向いたら書くかもしれない・・・けど、見れば分かっちゃうのが多く、あんまり需要なさそう。)

ちょっとした注意事項として、IDAはUIが非常にきめ細かいです。

メニューの内容も、カーソルや選択範囲に対して、実行できる機能をメニューに表示します。そのため、カーソルを当てている画面や対象によって、メニューの表示内容が変わります。

今回は、マルウェア解析で主に使うIDA Viewでコードにカーソルを当てている場合のメニューを主に示しています。

 

●「File」メニュー

基本的に、プロジェクトのオープンとセーブなどといったプロジェクトのファイル操作と、スクリプトファイルのオープンなどを行います。
自分はスクリプトは使ったことが無いのと、プロジェクトのオープンはIDAの開始時するだけで、あまり別のプロジェクトを開くことはありませんね。プロジェクトの保存はある程度使いますが、マルウェアの解析の場合、解析中の環境も残すために、VMのスナップショット使っちゃってることが多い気がします。
 
 

●「Edit」メニュー

編集関連のメニューです。
IDAでは(私の理解では)IDA View上に表示するうえでの編集と、コード自体を改変する編集の2種類があります。
 
下図の「Code」~「Rename」は、IDA上で表示が変わるようになっています。つまり、IDA Viewでコードと解析されている場合でも、カーソルで選択して「Data」を押すと、16進数のバイナリデータ表示に変わります。
 
「Operand type」以降については、マルウェア解析ではあまり使ったことがない機能(=まだまだ使いこなせていない)が多いです。もっとも、セグメントや関数の追加機能などは、マルウェア解析の場合は基本的に検体のコードそのままで解析することが多く、関数など機能を追加することはないということもあります。
 
例外的にたまに使うのが「patch program」で、これはコード自体を編集します。つい真上で「基本的に検体のコードそのままで解析することが多く、関数など機能を追加することはない」と書いておきながら、背反することを直後に書いてしまっていますが。コードをパッチするのは、「マルウェアを騙すため」に行うケースがあります。マルウェアは、自身が発見されないため、または行動を制御するために、様々なギミックを入れていることがあります。
例としては、「WannaCry」では「キルスイッチ」がありました。これは、マルウェアが起動直後、インターネット接続を試み、特定のURLにアクセスが成功した場合、活動を止める、というギミックです。このギミックの真の目的は判然としておらず、サンドボックス解析でマルウェアが通信を試みた際に、fakednsで模擬的に応答する仕組みがあったり、サンドボックスが実際にインターネットに接続して通信を試みた場合、解析を失敗させる目的だったとも言われています。もしくは、開発者が、自身の環境でうっかり起動させてしまったとき、開発環境内でそのURLに応答するfakednsを仕掛けておくことで、事故を防ぐためだったのかもしれません(数多の暗号化型ランサムウェアがあるなかで、開発中に自爆したお間抜けさんもいくらかはいたんだろうなぁ)。
もしこのギミックを騙すのであれば、条件分岐の判定を逆にする、もしくは条件分岐処理をなくして処理を続行させるようにパッチすれば、解析を進めることができるようになるわけです。
 
なお、このパッチを行っただけでは、あくまでデバッガ上で差し替えられただけで、本体の実行ファイルには反映されません。本体のファイルへ反映させる場合、「Patch program」の「Apply patches to input file...」で反映させることが可能です。元来、これはリリース版のプログラムで、アセンブラレベルで修正したい場合に使う機能なのだと思います。
え?そんなのソースコード修正してリビルドでおk? ははははは!君は、ソースコードやデベロップ環境が失われた古いプログラムが、まだ本番運用で使われていて、それを修正しなければいけないという、IT開発業界の闇を知らないね?w 世の中、消費税率や西暦-和暦計算、タイムゾーン計算などをオンコードで書いてるDQN開発者とか、ソースや開発環境を管理できない管理職は、結構な数いるんだぜ??
 
 
 
比較的よく使うRenameの機能では、リネームしたい関数名や変数名をカーソルで選択してメニューの「Rename」を押すと、以下のようなダイアログが表示されます。IDA View上の場合、「N」キーがショートカットになっているので、覚えておくと便利です。
(各チェックボックスのチェックによる動作の違いは調べてないです・・・解析では、以下のデフォルトのままの使用で、問題ないですが。)
 
 
 

●「Jump」メニュー

IDA Viewの表示画面を、指定の場所にジャンプする機能です(そのまんま)。
ジャンプする要因が、アドレス指定だったり関数名だったりと、状況に合わせて選択できるのが強みです。
 
 
 
私の場合、解析では結構アドレスと機能を開発言語の構文っぽくメモしていくので、気になる機能があれば、そのメモしているアドレスが分かるようにしているため、アドレス直接指定は割りと使います。アドレス指定のジャンプは、メニューの「Jump to Address...」でダイアログが表示されます。ショートカットも「G」のみなので、憶えておくと便利です。なお、アドレスの指定は、「401000」など、16進数のアドレス値だけを入力するだけでOKです。
 
 
 
また、呼び出している関数に対し、同様に呼び出している別の箇所を調べる、あるいは呼び出されている関数が、自身を呼び出している箇所を調べる「Cross reference」機能は便利なので覚えておくといいでしょう。
「call sub_xxx」でsub_xxxを呼び出している他の箇所を調べる場合、関数名のラベルにカーソルを合わせてメニューの「Jump to xref to operand...」でダイアログが表示されます。ショートカットは「X」です。
呼び出される「sub_xxx」関数を画面表示している場合、関数の先頭もしくは関数名のラベルにカーソルを合わせて、メニューの「List cross reference to ...」でダイアログが表示されます。ショートカットは「Ctrl + X」です。
いずれも、同じウィンドウが表示されます。また、それぞれの行をダブルクリックすることで、当該箇所にジャンプすることができます。
関数の機能が判明した場合、その呼び出し元を追うことで、どの処理で何をやっているのかが見えてくるとがあり、とても便利な機能なので、憶えておくと解析に役立つと思います(私はめっちゃ使う)。