はじめに
ソフトウェア開発やリバースエンジニアリングの世界では、バイナリを直接扱う技術が不可欠です。
デバッグ、最適化、解析、さらにはセキュリティの分野でも、低レイヤーの知識があるかどうかで
そのアプローチの幅が大きく変わります。
そんなバイナリ操作の実践的なテクニックを集めた書籍が『Binary Hacks Rebooted』です。
本書は、2006年に発売された『Binary Hacks』の続編として登場しました。
近年の環境変化に伴い、新たな技術やツールを取り入れたアップデートが行われています。
本記事では、『Binary Hacks Rebooted』の内容を紹介し、特に注目すべきポイントや学べること、
読者にとってのメリットを掘り下げていきます。
バイナリの世界に足を踏み入れたい人、より高度なテクニックを身につけたい人にとって、
本書がどのような価値を提供するのかをレビューしていきます。
Binary Hacks Rebooted の概要
『Binary Hacks Rebooted』は、全89個のハックが収録されています。
バイナリ解析や低レイヤープログラミングのテクニックを学べる書籍で、リバースエンジニアリング、
アセンブリ解析、バイナリ編集、デバッグなど、バイナリを扱う幅広い技術を実践的に紹介しています。
初心者から上級者まで活用できるよう、基礎から高度なテクニックまでバランスよい内容です。
本書の構成
本書は、以下のような章立てになっています。
- イントロダクション
バイナリの基礎として、読み方、アセンブリ入門など - ELF(Linux などで使われる実行ファイルなどの保存形式)
ELF ファイルの構造、バイナリ書換えなど - OS(Linuxが主)
procfs / sysfs、KVM、カーネル、QEMU、Chromebook など - コンテナ技術
docker の基盤技術に関する cgroup、chroot、root のように振舞う方法など - デバッガ・トレーサ
gdb Tips、ftrace、Intel PT など - セキュリティ
seccomp、サンドボックス、不正メモリアクセス、Intel CET など - 数値表現とデータ処理
整数表現、浮動小数点、SIMD 命令、SIMD 並列化など - 言語処理系
LD_PRELOAD、ABI、libffi、GCC / Clang 組み込み関数など - その他
用語集、Binary Hacks に必要なツールなど
各章のハックは独立しており、気になる部分から読み進められる構成になっています。
特定のツールや技術を重点的に学びたい場合にも適しています。
説明に用いられるコード群
本書の中で使用されているサンプルコードなどは、以下の GitHub リポジトリで公開されています。
こだわりのページ番号
本書の特徴のひとつが、ページ番号が16進数(Hex)と2進数でも記載されている点です。
通常の10進数ではなく、バイナリを扱う技術者にとって馴染み深い16進数と2進数で書かれているため、
ページ番号を見るだけで「バイナリの世界に入り込んでいる」感覚を味わえます。
こうしたユーモアある細かいこだわりからも、本書が単なる技術書ではなく、
バイナリ好きの人のための一冊であることが伝わってきます。
対象読者
『Binary Hacks Rebooted』は、以下のような人におすすめです。
対象読者
- バイナリ解析やリバースエンジニアリングに興味がある人
- アセンブリや低レイヤーのスキルを向上させたい人
- OSやCPUに近いデバッグノウハウを学びたい人
本書は、読者が UNIX 系システムのコマンドライン上で基本的な操作ができることを前提としています。
また、サンプルコードが主にアセンブラと C 言語で記載されているため、
これらの言語に馴染みが無い方は、読むのに少し根気が必要かもしれません。
最後の第9章『文献案内』や、要所で Web サイトの情報も紹介されているため、
必要に応じて参照しながら読み進めることは可能だと思います。
特に注目したいHack
私が本書を読んで、特に気に入った Hack をいくつかピックアップして紹介します。
Hack 10:TLS のしくみを理解する
TLS(Thread Local Storage)と、その ELF における実現方式が解説されています。
TLS には Local Executable、Initial Executable、General Dynamic、Local Dynamicアクセスモデルがあり、
各アクセスモデルの実際の動作が詳解されています。
gdb でデバッグしている際、TLS 変数へアクセスする方法が分からず苦労したことがありますが、
この Hack を頼りに調査すれば、アクセス方法が確立できそうです。
Hack 17:LIEF を使って ELF バイナリを書き換える
Linux の ELF(Executable and Linkable Format)、Windows の PE(Portable Executable)、
macOS の Mach-O などのバイナリを編集できる LIEF というツールの解説です。
シンボルのリネーム、関数の差し替え方が詳解されています。
プログラムや実行環境が複雑になり、シンボルの書換えすら非常に手間がかかる昨今、
このような専用ツールが存在することを知れただけでも収穫でした。
Hack 38:cgroup でプロセスのリソースを管理する
Docker などのコンテナ技術で活用されている cgroup の機能と操作方法の解説です。
CPUコア、CPUサイクル、メモリ、PID、I/O のコントロール方法が詳解されています。
ただし、I/O 量のコントロールに関しては、必ずしも思い通りにはできなさそうです。
これまで I/O Scheduler で制御することしか知らなかったため、別の手段を知れて良かったです。
Hack 43:/proc/PID/root からコンテナ内のファイルに直接アクセスする
Docker コンテナ内のファイルに外部(HOST側)から直接アクセスする方法の解説です。
OverlayFS の仕組みや、/proc/PID/root の挙動について、詳解されています。
これまで docker exec や docker cp を使って、毎回コンテナ内から外へコピーしていましたが、
本 Hack によって、より効率的なアプローチが可能であることを学べたのは大きいです。
Hack 49:ftrace を使ってカーネル内で起こっていることをトレースする
Linux カーネルのトレーシングツールである ftrace の解説です。
ftrace を利用するための準備から始まり、トレーシングの仕組みの解説、
関数コールグラフやイベントトレーシングの方法、GUI による可視化まで詳解されています。
過去に KernelShark や trace-cmd を使った経験がありますが、目的を明確に定めて利用しないと、
逆に分析の方向性を見失いかねないので、使いどころを慎重に見極めることが重要だと感じました。
その他のHackについての所感
第6章:セキュリティ
ツールを活用して gdb で動作を追いかける流れの解説が多く、手法としては有用であるものの、
「Hack」と呼べるハッキング的な試行錯誤の要素は薄いと感じました。
第7章:数値表現とデータ処理
整数表現や浮動小数点の丸め方などの数値表現と、画像処理などで活用される SIMD 命令セットを
解説しているのですが、『必須の知識』という印象は持てませんでした。
まとめと評価
まとめ
『Binary Hacks Rebooted』は、バイナリ解析や低レイヤー技術に
関心のあるエンジニアにとって非常に有益な一冊です。
600 ページを超えるボリュームはあるものの、実践的かつ実用的な Hack が多く収録されており、
公開されているコードを活用しながら手を動かして学ぶこともできます。
一方で、一部の Hack については『プログラムはどのように実行されるのか』といった
前提知識が無いと理解が難しい部分もあるかもしれません。
とはいえ、バイナリを扱うエンジニアであれば、ぜひ一読しておきたい必読書と言えるでしょう。
最終評価
本書の総合評価を以下のようにまとめました。
| 項目 | 評価 |
| 内容の実用性 | ★★★★★(5/5) |
| 分かりやすさ | ★★★★☆(4/5) |
| 初心者向け度 | ★★★☆☆(3/5) |
| 上級者向け度 | ★★★★★(5/5) |
| 遊び心・こだわり | ★★★★★(5/5) |
総合評価:★★★★☆(4.4/5)
『Binary Hacks Rebooted』は、低レイヤー技術に興味があるエンジニアにとって価値のある一冊です。
実践的な Hack を通じて、バイナリの世界に深く踏み込みましょう。