情報システム実験B「バイナリプログラムの解析」(2025年度)
担当教員: 大山恵弘 (筑波大学 システム情報系)
実験の概要
バイナリプログラムを解析するための基本的な技術やツールを学ぶ.受講者は具体的には以下の事項を実行する.
- 解析のためのツールや解析を妨害するためのツールの使い方を学ぶとともに.解析現場における問題を模した問題をそれらのツールによって実際に解決する.
- それらのツールを改造して機能を拡張したり,それらのツールの核となる部分だけを有するような小さいツールを実装する.
- バイナリプログラムの解析のための,規模がある程度大きいシステムを最終課題として開発し,発表会でそれについてのプレゼンテーションを行う.
最終課題とは別に,2週に1回程度のペースで小さい課題についてのレポートを課す予定である.
manabaのコースページ
- 情報システム実験B(ソフトウェアサイエンス実験B,知能情報メディア実験Bと共通)
- K-15 バイナリプログラムの解析 (この実験テーマを選択した学生のみがアクセス可)
実験の資料,参考書
教科書は指定しない.各週の実験についての資料をmanaba上で配布する.
実験を行うにはそれだけで十分であるが,さらに深く学びたい人には,以下の書籍を参考書として薦める.
どれも相当レベルが高く難解なので,時間をたっぷり確保して,覚悟して読んだほうがいい.
- Dennis Andriesse, "Practical Binary Analysis," No Starch Press,2018.
和訳:
Dennis Andriesse 著,株式会社クイープ/遠藤美代子 訳,「実践バイナリ解析 バイナリ計装、解析、逆アセンブリのためのLinuxツールの作り方」,ドワンゴ,2022.
- Reginald Wong, "Mastering Reverse Engineering," Packt,2018.
- Monnappa K A, "Learning Malware Analysis," Packt,2018.
和訳:
Monnappa K A 著,石川 朝久 訳,「初めてのマルウェア解析」,オライリー・ジャパン,2020.
上記3冊を最も薦めるが,他には以下の書籍を薦める.
- 河田 旺, 小池 悠生, 渡邉 慶一, 佐伯 学哉, 荒田 実樹 著, 鈴木 創, 中村 孝史, 竹腰 開, 光成 滋生, hikalium, 浜地 慎一郎 寄稿,
「Binary Hacks Rebooted 低レイヤの世界を探検するテクニック89選」,オライリー・ジャパン,2024.
- 姜 秉卓 著, 金 輝剛 監修, 金 凡峻 翻訳,「リバースエンジニアリングバイブル」,インプレス,2013.
- Digital Travesia管理人 うさぴょん 著, 「デバッガによるx86プログラム解析入門【x64対応版】」,秀和システム,2014.
実験のスケジュール(予定)
受講者の技術レベルに応じて臨機応変に変更する.
- 第1回: ガイダンス,プログラムのメタデータ
- 第2回: 逆アセンブルと逆コンパイル
- 第3回: マルウェア解析Webサービス
- 第4回: パッカー
- 第5回: シグネチャマッチング,難読化
- 第6回: 動的解析
- 第7回: ファジングとコードカバレッジ
- 第8回: 解析回避と環境fingerprinting
- 第9回: シンボリック実行
- 第10回: 最終課題のシステムの実装(1)
- 第11回: 最終課題のシステムの実装(2)
- 第12回: 最終課題発表会
最終課題(予定)
バイナリプログラムの解析に関連する既存のツールや機構のクローン,改造版,機能限定版などを実装する.
実装するのは,解析する側のツールや機構でもよいし,解析される(ことを回避する)側のツールや機構でもよい.
いわゆる「〇〇もどき」「なんちゃって〇〇」「〇〇インスパイア」と呼ばれるツールを作る.車輪の再発明をする.
実装を通じて解析ツールや解析に関連する知識についての理解を深める.
例: 独自PEファイル情報表示ツール,独自アセンブラ,独自逆アセンブラ,独自デバッガ,独自トレーサ,独自サンドボックス,独自パッカー,独自難読化器,独自エミュレータ
参考:
2023年度の最終課題の優秀レポート: excellent-report-2023.pdf
2022年度の最終課題の優秀レポート: excellent-report-2022.pdf
関連するツール,資料,記事(随時更新)
これらのツールが100%安全であることは保証できません.
ツールを自分の環境にインストールするときには,十分に情報を収集して納得した上で,自分の責任においてインストールして下さい.
VirtualBoxなどの仮想マシンやWindows Sandboxなどのサンドボックスの利用も検討して下さい.
- 全体
- 第1週:ガイダンス,プログラムのメタデータ
- PEファイル情報出力ツール
- Linuxでファイルのメタデータの表示に使えるコマンド: objdump, readelf, nm, file, strings
- Linuxでファイルのダンプに使えるコマンド: od, hexdump, xxd
- PEフォーマット
- ELFフォーマット
- バイナリエディタ
- 汎用ツール
- 第2週:逆アセンブルと逆コンパイル
- 第3週:マルウェア解析Webサービス
- 第4週:パッカー
- オープンソース
- 無料
- 商用(ただし多くは無料の評価版も提供)
- Packing/unpacking関連の資料
- 第5週:シグネチャマッチング,難読化
- シグネチャマッチング
- 無料の難読化ツール
- 有料の難読化ツール
- 難読化についての関連情報
- 第6週:動的解析
- トレーサ
- デバッガ
- バイナリinstrumentation
- サンドボックス
- コンテナ基盤
- エミュレータ
- ハイパバイザ,仮想マシンモニタ
- 第7週:ファジングとコードカバレッジ
- Fuzzer
- Code coverage tools
- Fuzzing関連の資料
- 第8週: 解析回避と環境fingerprinting
- 第9週:シンボリック実行
Copyright (C) 2025 Yoshihiro Oyama All rights reserved.