IDAPro用のYet Another Golangバイナリパーサー
英語 | 中文
注記:
現在の最新のmasterブランチはPython3版です。以前のmasterブランチはpy2ブランチに変更され、一時的にメンテナンスされていません。
Python3ブランチの説明
このバージョンはmacOS/Windows、IDA7.4+、Python3.8.xで開発・テストされています。他のプラットフォームやバージョンで問題がある場合は、issueやPull Requestを送信してください。
さらに、macOS上のIDA7.4はデフォルトでインストールされたPython3を使用するため、自分でインストールしたサードパーティライブラリが読み込めない可能性があることに注意してください。brewでインストールしたPythonに切り替える必要があります。具体的な切り替え方法についてはこのスクリプトを参照してください。
golang_loader_assistとjeb-golang-analyzerに触発されて、IDAPro用のより完全なGoバイナリ解析ツールを作成しました。
主な機能:
- Goバイナリファイル内のfirstmoduledata構造体を特定して解析し、各フィールドにコメントを付けます。
- firstmoduledataに基づいてpclntab(PC Line Table)を特定して解析します。その後、pclntab内の関数名とソースファイルパスを見つけて解析・復元します。ソースファイルパスはIDAProの出力ウィンドウに表示されます。
- 文字列と文字列ポインタを解析し、各文字列にコメントを付け、各文字列ポインタにdrefを作成します。
- firstmoduledataに基づいて各typeを見つけて解析し、typeの各属性にコメントを付けます。これにより、マルウェア研究者が複雑な型やデータ構造定義を解析するのに非常に便利になります。
- itab(インターフェーステーブル)を解析します。
Goバイナリのリバースエンジニアリング作業に役立つ情報:

また、go_parserには2つの便利な機能があります:
- ファイルヘッダー情報、特にセクションヘッダー情報が不正なバイナリでも正常に動作します。
- 上記のすべての機能は、buildmode=pieでビルドされたバイナリでも有効です。
DDGMiner v5029 (MD5: 95199e8f1ab987cd8179a60834644663) の設定データ構造体の解析結果は以下の通りです:

そして、ユーザー定義のソースファイルパスリスト:

プロジェクトファイル:
- go_parser.py :エントリファイル。[Alt+F7] を押して、このファイルを選択して実行します。
- common.py: 共通変数と関数の定義。
- pclntbl.py: pclntab(PC Line Table)を解析します。
- strings.py: 文字列と文字列ポインタを解析します。
- moduldata.py: firstmoduledataを解析します。
- types_builder.py: typesを解析します。
- itab.py: itab(インターフェーステーブル)を解析します。
さらに、str_ptr.pyは文字列ポインタの開始アドレスと終了アドレスを手動で指定して文字列ポインタを解析します。
注意事項
- このツールはPython3で書かれており、IDA7.4+でテストされています。
- 文字列解析モジュールはgolang_loader_assistから移植され、文字列ポインタ解析機能を追加しました。現時点ではx86(32bitおよび64bit)アーキテクチャのみサポートしています。
参考
- Analyzing Golang Executables
- Reversing GO binaries like a pro
- Reconstructing Program Semantics from Go binaries.pdf
- Go二进制文件逆向分析从基础到进阶——综述
- Go二进制文件逆向分析从基础到进阶——MetaInfo、函数符号和源码文件路径列表
- Go二进制文件逆向分析从基础到进阶——数据类型
- Go二进制文件逆向分析从基础到进阶——itab与strings
- Go二进制文件逆向分析从基础到进阶——Tips与实战案例