Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
AlphaGolang — Golangバイナリを解析するためのIDApythonスクリプト | Kitploit
ツール/GitHubGitHub/sentinelabs/alphagolang
静的分析リバースエンジニアリングデバッガマルウェア分析バイナリ解析
GitHubsentinelabs/alphagolang

AlphaGolang

Golangバイナリを解析するためのIDApythonスクリプト

リポジトリを見る
672732年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

AlphaGolang

作成者: Juan Andres Guerrero-Saade (JAG-S @ SentinelLabs)

説明:

AlphaGolangは、マルウェアリバースエンジニアがGoバイナリを習得するためのIDAPythonスクリプト集です。このスクリプトを具体的なステップに分割することで、脆くて巨大なスクリプトを避け、アナリストがGoバイナリに取り組む際の手法を模倣しています。

スクリプトはGPLライセンスの下で公開されています(Tim Strazzere氏のオリジナルのGolangLoaderAssistに敬意を表し、それをPython3用にリファクタリング・更新しました。Timさんに感謝!)。コントリビューションを歓迎します!

必要条件: IDA Pro (理想的にはv7.6+) と Python3 (うんざり) 最初の2つのステップ(recreate_pclntab と function_discovery_and_renaming)はIDA v7.5-でも動作しますが、それ以降のスクリプトはIDAv7.6+が必要です。新しいバージョンは今後のスクリプトの理想的なターゲットです。

オリジナル参考資料: Mandiant Cyber Defense Summit 2021 講演 (動画準備中)

AlphaGolang 分析手法

  • ステップ 0: Goバイナリを識別するYARAルール (PE/ELF/MachO)

    • identify_go_binaries.yara
      • シンプルなヘッダチェック + GoビルドID文字列の正規表現。
      • ビルドIDの長さの範囲を改善できる可能性あり。
  • ステップ 1: pclnテーブルの再構築

    • recreate_pclntab.py (IDA v7.5- 互換)
      • ヒューリスティックからgopclntabセクションを再構築します。
      • 主にIDA v7.5-で有用です。
  • ステップ 2: pclnテーブルをウォークして関数を発見し、すべてに名前を追加

    • function_renaming.py (IDA v7.5- 互換)
      • golang_loader_assistから分割
      • pclnテーブルに基づいて欠落している関数を総当たりで発見
      • py3移行時の関数名クリーニングの問題を修正
      • Go v1.18向けにAkamaiのPanchan!を基に改善をリファクタリング。Alex (CycleOfTheAbsurd)に感謝。
  • ステップ 3: ユーザー生成関数を表示

    • categorize_go_folders.py (IDA v7.6+ 必須)
      • 関数を自動的にフォルダに分類します
      • IDAv7.6+が必要で、関数ビューで「フォルダを表示」を有効にする必要あり
      • 更新日 2022.05.16: IDA v7.7のフォルダソートとの競合を修正
      • このプラグインを実行する前にLuminaからメタデータを元に戻すことを強く推奨します。
  • ステップ 4: 文字列参照の修正

    • fix_string_cast.py
      • golang_loader_assistから分割
      • 新しい文字列を定義する前に既存の文字列ブロブを未定義にするロジックを追加
      • 新しい健全性チェックにより効果が大幅に向上
  • ステップ 5: 型情報の抽出 (作成者: Ivan Kwiatkowski)

    • extract_types.py
      • newobject、makechanなどの呼び出しの引数にコメントを付ける
      • これらのオブジェクトに適切なC型を適用し、名前を変更
      • 人間が読める名前を取得し、コメントとして追加

未解決の修正とコントリビューションの余地:

  • fix_string_cast.py - リファクタリングとより良い文字列ロードヒューリスティックがまだ必要 - 巨大なバイナリでロックアップする可能性あり - いくつかの間接的な文字列ロードメカニズムが欠落している
  • extract_types.py
    • 現在はPEおよびMach-Oファイルで動作し、ハードコードされた .rdata または __rodata セクション名を探します
    • varintエンコードされたサイズの適切なチェック/実装が必要

次のステップ:

  • ユーザー生成関数による文字列参照の追跡
  • ユーザー生成関数に基づくYARAシグネチャの自動生成
  • ユーザー生成関数のHex-Rays疑似コード出力の生成
  • 動的解析のための引数へのブレークポイント自動設定
  • ???

謝辞:

  • Tim Strazzere氏: オリジナルのgolang_loader_assistを公開してくれたこと
  • Milan Bohacek (Avast Software s.r.o.)氏: idatree APIの理解において貴重な助けを提供してくれた
  • Joakim Kennedy (Intezer)
  • Ivan Kwiatkowski (Kaspersky GReAT)氏: ステップ5の作成
  • Igor Kuznetsov (Kaspersky GReAT)
  • Alex (別名 CycleOfTheAbsurd) (ESET)氏: Go v1.18サポートのためにステップ2をリファクタリング
ツールをダウンロード