本章導言#

如果光看網路上傳輸的資料就能分析出整個協定,那你的工作相當單純。但有些協定並非如此,尤其是那些採用自訂加密或壓縮機制的協定。這時只要能取得用戶端或伺服器的執行檔,就能透過二進位逆向工程(binary reverse engineering, RE)反推協定的運作方式,順帶尋找漏洞。

逆向工程主要分兩類:靜態逆向工程(static reverse engineering) 是把編譯後的執行檔反組譯(disassemble)成原生機器碼,再從程式碼理解它的行為;動態逆向工程(dynamic reverse engineering) 則是實際執行應用程式,用除錯器(debugger)、函式監控等工具觀察它在執行期的動作。

本章會帶你拆解執行檔,找出負責網路通訊的程式碼區域。內容以 Windows 平台為主——因為在 Windows 上比在 Linux 或 macOS 更容易遇到沒有原始碼的應用程式——但絕大多數技巧在各平台都通用。在進入逆向技術之前,會先鋪陳開發者如何產生執行檔、無所不在的 x86 架構長什麼樣子,以及作業系統(特別是網路功能)的基本原理。

逆向工程是一門需要長期累積的技藝,一個章節不可能涵蓋全貌。把本章當成「找到網路協定程式碼」的實務入門,而非完整的逆向工程教材。