●Defined Strings
解析で見つかった文字列を表示します。
プログラム動作時に名前解決で用いる文字列や、スクリプトのコマンド文字列など、機能を知るための助けになる文字列や、IoCに使える文字列が含まれていることがあり、静的解析ではStringsは必ず確認すると言ってもいいでしょう。少なくとも私は見ていますね。
もっとも、他でも述べている通り、最近ではマルウェア全体をパッキングしていることが多いです。この場合、アンパックした後の文字列を見る必要があります。
文字列を暗号化していて使用の都度復号化するケースもあります。一昔前に見たランサムウェアも、一部のAPIの利用を秘匿するために、Importテーブルに載せず、GetProcAddressで取得していました。このときの関数名も暗号化されており、直前に復号、GetProcAddress後に関数名を破棄していました。このような場合では、どうしてもDefined Stringsには表れず、デバッガでの追跡が現実的になります。
雑なランサムウェアの場合、アンパックし、メモリに展開された領域に、暗号化対象とする拡張子を平文で格納しているものもあります。
デバッガ機能が追加され、任意のタイミングでStringsを再解析できるような機能がついたら、大化けしそう・・・と妄想してみる。
●Disassembled View
逆アセンブルコードを表示します。
・・・が、Listingの画面とどう違うの?がちょっと良く分かりませんでした。
●Equates table
パラメータに名前を付ける機能(Equate)で付けられた名前と値を一覧表示します。
解析された値に意味がある場合、それに名前を付けておくことで、解析者に値の意味を分かりやすくする目的の機能です。
機能の使用例:
- Listingの画面で、名前を付けたい数値にカーソルを合わせ、右クリックでポップアップメニューを表示し、「Set Equate...」をクリック。
- 「Set Equate」ダイアログの「Equate String」に付ける名前を入力し、OKをクリック。
- 値が文字列に変更されている。