在學習IDA Pro之前先了解一些用於逆向工程二進制文件的工具。
一、分類工具
1. file命令:檢查文件中的某些字段來確認文件的類型。能夠識別數種Ascii文本文件、各種可執行文件和數據文件。其magic file規定了檢查規則。
2.PE Tools: 是一組用於分析windows系統中正在運行的進程和可執行文件的工具。用戶可以將一個進程的內存映像轉儲到某個文件中,也可以使用PE Sniffer實用工具確定可執行文件由何種compiler構建,或該文件是否經過某種已知的模糊使用工具的模糊處理。
3.PEid: windows工具,主要用戶識別構建某一特定windows PE二進制文件所使用的編譯器,並確定任何用於模糊windows PE二進制文件的工具。
二、摘要工具
1. nm命令:列舉目標文件中的符號。使用nm檢查中間目標文件(非可執行文件)時,默認輸出結果時在這個文件中聲明的任何函數和全局變量的名稱。若列舉可執行文件中的符號,可以得到更多信息。
2.ldd命令:列舉任何可執行文件所需的動態庫。在mac上替代工具是otool,用otool -L可以得到文件中用到的動態鏈接庫。(otool在XCode的ToolChains中)
3.objdump 顯示與目標文件相關的信息,如每節的摘要信息,內存分布信息,調試信息,符號信息,反匯編代碼清單等。在Linux freebsd windows下用。 objdump依靠二進制文件描述符庫libbfd來訪問目標文件,因此能夠解析libbfd支持的文件格式(elf, pe等)。
readelf 也可以解析elf文件,其大多數功能和objdump相同,區別在於readelf不依賴於libbfd.
4. otool OS X下類似於objdump的工具。
5.dumpbin 微軟visual studio套件中的使用工具,和otool和objdump類似。
6.c++filt 支持重載的語言在編譯時需要有一種機制來區分同一個函數的不同版本,以避免在目標文件中有兩個名稱相同的函數。編譯器將參數類型信息合並到原始的函數名中,從而為重載函數生成唯一的函數名稱。用c++filt可以得到這些函數的原始名稱。
三、深度檢測工具
1.strings輸出文件中所有出現的字符串 使用-e參數可以使strings搜索更廣泛的字符,如16位unicode字符。
2.兩個用於x86指令集的流式反匯編器:ndisasm 和 diStorm。