Wikipediaによるとリバースエンジニアとは「機械を分解したり、製品の動作を観察したり、ソフトウェアの動作を解析するなどして、製品の構造を分析し、そこから製造方法や動作原理、設計図などの仕様やソースコードなどを調査すること」。
実際の製品から、設計や仕様、ソースコードを導き出す手法を指していて、コンピューターの世界では、プログラムの実行解析をソースコードに戻す「逆コンパイル」等の手法が利用されます。
本日紹介する「Reverse Engineering resources」は、このリーバースエンジニアに必要なリソースを集めるGitHub上のリンク集です。
情報が少ないリバースエンジニアに関し、以下のようなジャンル別に、リンクが集められています。
- 書籍
- 講座
- 練習(マルウェアに注意)
- ヘックスエディタ
- バイナリフォーマット
- ディスアセンブラ
- バイナリ分析
- バイトコード分析
- インポートリコンストラクション
- 動的分析
- デバッギング
- Mac複合
- ドキュメント分析
- スクリプティング
- Android
- Yara(マルウェア解析・検知ツール)
この中で例えば書籍に関する情報は以下のようになっています。
- The IDA Pro Book
- Reverse Engineering for Beginners
- The Art of Assembly Language
- Practical Reverse Engineering
- Reversing: Secrets of Reverse Engineering
- Practical Malware Analysis
- Malware Analyst's Cookbook
- Gray Hat Hacking
- The Art of Memory Forensics
- Hacking: The Art of Exploitation
- Fuzzing for Software Security
- Art of Software Security Assessment
- The Antivirus Hacker's Handbook
- The Rootkit Arsenal
- Windows Internals Part 1 Part 2
- Inside Windows Debugging
- iOS Reverse Engineering
全て英語の書籍となっています。英語が苦手な方は、日本語に翻訳されていないかどうかチェックしてみると良いかもしれません。
デバッグツールに関してはWinDbgやOllyDbg、gdbなど、一般開発者にとっても割とお馴染みのツールが含まれています。
- WinDbg
- OllyDbg v1.10
- OllyDbg v2.01
- OllySnD
- Olly Shadow
- Olly CiMs
- Olly UST_2bg
- x64dbg
- gdb
- vdb
- lldb
- qira
- unicorn
リバースエンジニアリングという概念に馴染みのある方も、そうでないかたもリンクを確認すればどのような分野をカバーする技術なのかざっくりと理解することができそうです。
ソースコードが入手できないソフトウェアの動作を解析したい場合に有効なリバースエンジニアリングですが、商用ソフトウェアの場合、ライセンス契約などで、ソースコードの抽出などが禁止されている場合もあるようです。実際に作業する場合は、事前にソフトウェアのライセンスをよく確認しておくことをおすすめします。