
Ghidra headless向けの包括的なツールキット。
このプロジェクトは本当に楽しく、初めての「大きな」プロジェクトでした!より優れた、よりスマートな、より強力なソリューションが現在存在します:https://github.com/LaurieWired/GhidraMCP
また会おう、スペースカウボーイ
このGhidra Toolkitは、Ghidraをヘッドレスモードで実行する際のさまざまなタスクを効率化・自動化するために設計された包括的なツールスイートです。このツールキットは、Ghidra内およびGhidraと連携して実行できる多種多様なスクリプトを提供し、脆弱性ハンティング、ChatGPTによる疑似コードコメント作成、分析コードベースのデータ可視化レポートなどを可能にします。ユーザーは独自のスクリプトを読み込み・保存し、スクリプトの組み込みAPIと連携することもできます。
ヘッドレスモードの自動化: ツールキットを使用すると、Ghidraをシームレスに起動してヘッドレスモードで実行でき、コード分析タスクの自動化とバッチ処理が可能です。
スクリプトリポジトリ/管理: ツールキットには、Ghidra内で実行可能な事前構築済みスクリプトのリポジトリが含まれています。これらのスクリプトはさまざまな機能をカバーし、ユーザーが多様な分析・操作タスクを実行できるようにします。ユーザーは独自のスクリプトを読み込み・保存でき、特定の分析要件に合わせた柔軟性とカスタマイズオプションが提供されます。スクリプトコレクションの管理・整理も簡単に行えます。
柔軟な入力オプション: ツールキットを使用して、個別のファイルまたは複数ファイルを含むフォルダ全体を分析できます。この柔軟性により、小規模から大規模なコードベースまで効率的に分析できます。
このプロジェクトを使用する前に、以下のソフトウェアがインストールされていることを確認してください。
pip install sekiryu を使用します。スクリプトを使用するには、実行したいオプションを指定してバイナリに対して実行するだけです。
sekiryu [-F FILE][OPTIONS]なお、Ghidra(または他の製品)でバイナリ分析を実行するのは比較的遅い処理です。そのため、ホストのパフォーマンスによってはバイナリ分析に数分かかることを想定してください。 非常に大規模なアプリケーションや大量のバイナリファイルに対してSekiryuを実行する場合は、待つ覚悟をしてください。
基本的に "server.py" は、スクリプトがGhidra同士やホストシステムと連携できるように構築されています。
ユーザーは簡単に独自のスクリプトを開発し、スクリプトフォルダに読み込んで保存し、APIの既知の関数を使用してGhidraと連携できます。
使用するには、ユーザーはスクリプト内で xmlrpc をインポートし、例えば proxy.send_data のように関数を呼び出す必要があります。
スクリプトは /modules/scripts/ フォルダに保存されます。スクリプトをそこにコピーするだけです。
ghidra_pilot.py ファイルには、ヘッドレスGhidraスクリプトを実行するための以下の関数があります。
def exec_headless(file, script):
"""
Execute the headless analysis of ghidra
"""
path = ghidra_path + 'analyzeHeadless'
# Setting variables
tmp_folder = "/tmp/out"
os.mkdir(tmp_folder)
cmd = ' ' + tmp_folder + ' TMP_DIR -import'+ ' '+ file + ' '+ "-postscript "+ script +" -deleteProject"
# Running ghidra with specified file and script
try:
p = subprocess.run([str(path + cmd)], shell=True, capture_output=True)
os.rmdir(tmp_folder)
except KeyError as e:
print(e)
os.rmdir(tmp_folder)
使用方法は非常に簡単です。独自のスクリプトを作成し、ghidra_pilot.py に次のような関数を追加するだけです。
def yourfunction(file):
try:
# Setting script
script = "modules/scripts/your_script.py"
# Start the exec_headless function in a new thread
thread = threading.Thread(target=exec_headless, args=(file, script))
thread.start()
thread.join()
except Exception as e:
print(str(e))
cli.py ファイルはコマンドラインインターフェースを担当し、次のように引数と関連コマンドを追加できます。
analysis_parser.add_argument('[-ShortCMD]', '[--LongCMD]', help="Your Help Message", action="store_true")
xmlrpc.server モジュールは、悪意を持って構築されたデータに対して安全ではありません。信頼できない
または認証されていないデータを解析する必要がある場合は、XMLの脆弱性を参照してください。
Bushido Securityの詳細については、Webサイトをご覧ください:https://www.bushido-sec.com/。