ID FLIRT / FLAIR
FLIRTは、IDAが提供する機能認識技術库文件快速识别与鉴定技术(Fast Library Identification and Recognition Technology)
です。このテクノロジーにより、IDAは一連のコンパイラー標準ライブラリー・ファイルで呼び出し関数を自動的に検出できるため、逆アセンブリー・リストが明確になります。たとえば、MFC
ライブラリ関数は逆アセンブルされる可能性がありますcall 40a936
が、IDAはFLIRTを介して関数の特性を識別できるため、関数にマークを付けて逆アセンブルウィンドウに表示できますcall CWnd::DestroyWindow
。これにより、コードの可読性が大幅に向上し、分析が高速化します。
FLIRTテクノロジーは、IDAが提供するsig署名ファイルを使用する必要があります。これは、IDAの機能識別の鍵となります。IDAのインストールパッケージの人気の開発ライブラリなどの関連するシグネチャファイル、多くの持ち運びMFC
、OWL
、BCL
などを。図には、いくつかのSIGファイルが示されています。
しかし、分析されたプログラムで使用されているライブラリの対応するSIGがIDAにない場合はどうなりますか?この時点で、FLAIR
このツールを使用して、FLIRTデータベースを生成する、つまり対応するSIGファイルを自分で作成することができます。
既存のSIGファイルを使用してライブラリ関数を識別する方法を見て、次に、含まれていないライブラリのSIGファイルを生成する方法を見てみましょう。
1.既存のSIGファイル認識機能を使用する
IDAがサポート可能なライブラリ関数を自動的に識別しない場合がありますが、現時点では、SIGファイルを手動で追加して、関連する関数を強制的に識別する必要があります。たとえば、次の状況:
次に、文字列ウィンドウを見て、MFCライブラリ関数に関連する文字列を確認します。または、関連する関数に精通している場合は、以下に属するライブラリ関数を視覚的に識別します。
次に、手動のSIGファイル(shift + f5)を結合します。使用したSIG署名ファイルと認識された関数(#func)を署名ウィンドウで表示できます。追加後、ほとんどのMFC関数が逆アセンブリウィンドウで正常に識別され、プログラム分析の効率が大幅に向上します。
次に、SIGファイルを生成します
IDAは、既存のSIGファイルの使用に加えて、FLAIR
ユーザーが識別ライブラリファイルを作成しやすくするためのツールも提供しています。ツールは個別にリリースされます。
署名を作成する手順は次のとおりです。
-
署名ファイルを作成する必要がある静的ライブラリを取得します
*.lib
。 -
FLAIRパーサーでライブラリのパターンファイル(
.pat
)を作成します。パターンファイルは、解析済みライブラリ内の関数を表す抽出されたパターンを含むテキストファイルです。-
plb.exe:OMFライブラリのパーサー(通常Borlandコンパイラーで使用されます)。
-
pcf.exe:COFFライブラリのパーサー(通常Microsoftコンパイラーで使用されます)。
-
pelf.exe:ELFライブラリのパーサー(一般にUNIXシステムで使用されます)。
-
ppsx.exe:Sony PlayStation PSXライブラリのパーサー。
-
ptmobj.exe:TriMediaライブラリのパーサー。
-
pomf166.exe:キールOMF 166オブジェクトファイルのパーサー。
ライブラリのパターンファイルを作成する場合は、ライブラリの形式に対応するパーサーを指定する必要があります。LIBに対応する静的ライブラリファイルがない場合は、IDB2PATを使用して
.LIB
ファイルを作成し、ファイルに変換.PAT
できます。 -
-
sigmake.exeを使用して
.PAT
ファイルを*.sig
署名済みファイルに変換すると、ファイルを使用できます。
さて、実際の運用について。たとえば、ランサムウェアウイルスを分析する場合、一部のファミリーウイルスはデータ暗号化にCryptoPP暗号化ライブラリを使用し、IDAには関連する署名ファイルがないため、SIGファイルを自分で作成できます。
Githubでプロジェクト をダウンロードし、VSが静的ライブラリCryptlib.libをコンパイルします(別の既存のlibライブラリの場合は、直接使用できます)。debug
コンパイルするときは、PATファイルを生成するときにパーサーが主にシンボルに基づいて分析するため、コンパイル方法を選択する必要があります。リリースバージョンの場合、シンボルは削除されるため、シンボルは削除され、関連する機能はスキップされます。
lib-> PAT
次のコマンドを実行します(ここではWindowsプラットフォームの選択pcf.exe
)。
pcf.exe Cryptlib.lib Cryptlib.pat
PAT
:実際には、レコードは機能になどのファイルlibに関連するファイルを、抽出されたテキストファイルです558BEC83EC44535657894DFC8B45FCC700........8B4DFC83C110E8........ 04 4256 002F :0000 ??1Exception@CryptoPP@@UAE@XZ ^0011 ??_7Exception@CryptoPP@@6B@ ^001C ??1?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ ^0024 ??1exception@std@@UAE@XZ ........5F5E5B8BE55DC3
。
PATレコード機能メソッドはpat.txt
、上記の例のように、FLIATツールキットで詳細に説明されています。
-
最初の64個の16進文字列
558BEC83EC44535657894DFC8B45FCC700........8B4DFC83C110E8........
は、マーク(関数)モジュールの最初の32バイトに対応し、.
任意の文字を示します。 -
04 4256
次の4バイトのCRC16
チェック値0x4256
。 -
002F :0000
(関数)モジュールの長さ(0x2fバイト)とモジュール内の関数名のオフセット(オフセット:0x0000)は、それぞれコロンの前と後に示されます。 -
1Exception@CryptoPP@@UAE@XZ
関数の記号名です。 -
^0011 ??_7Exception@CryptoPP@@6B@
シンボル_7Exception @ CryptoPP @@ 6B @が関数0x11のオフセットで参照されることを示します。 -
........5F5E5B8BE55DC
このため、モジュールの残りのバイトについては、一部の長い関数の特性が非常に長くなります。
PAT-> SIG
PATファイルを正常に生成した後、次のコマンドを実行します(互換性のために、出力ファイル名は8バイトを超えてはなりません)。
sigmake.exe Cryptlib.lib Cryptlib.sig
多くの場合、PATの一部の関数は同じ特性、つまり操作は同じですが、関数名に一貫性がないため、今回は競合が発生します。
この場合、sigmakeは、競合グループを同じディレクトリEXC
(この例ではCryptlib.exec )にある同じ名前の(除外)テキストファイルに書き込みます。同じ名前のexecファイルがすでに存在する場合は、ファイルの末尾に追加されます。
このファイルの競合グループを変更する必要があります。各グループ:
- ロゴ
+
は、指定されたシンボル名が署名が検出されたときに使用されることを意味します。- ロゴ
-
は、IDA逆アセンブリの関数名を変更するものではなく、コメントとして表示されます。- 処理を行わない場合、指定したタグを認識した後は何も行いません。
次に、同じコマンドを実行してsigファイルを生成します。競合がある場合は、上記の操作を繰り返します。変更中に式が多すぎる場合は、エディターでそれらを通常のマッチングに置き換えることができます。
次のことに注意してください。
-
競合を最小限に抑えるに
*.exc
は、除外されたファイル()の先頭にある4つのコメント行を削除します。 -
最大で、競合する関数グループ内の1つの関数のみをアタッチできます
+/-
。 -
競合する関数に含まれる関数が1つだけの場合は、関数の前に追加せず、
+/-
そのままにしておきます。
参照:
「暗号化と復号化(第4版)」の第3章
「IDA Pro Definitive Guide」の第12章