IDA Pro 權威指南學習筆記(六) - 次要的 IDA 顯示窗口
十六進制窗口
IDA 十六進制窗口可以配置為顯示各種格式,並可作為十六進制編輯器使用
默認情況下,十六進制窗口顯示程序內容和列表的標準十六進制代碼,每行顯示 16 個字節,以及其對應的 ASCII 字符
和在反匯編窗口中一樣,用戶也可以同時打開幾個十六進制窗口
第一個十六進制窗口叫做 Hex View-A,第二個十六進制窗口叫做 Hex View-B,接下來的窗口叫做 Hex View-C,依次類推
默認情況下,第一個十六進制窗口會與第一個反匯編窗口同步
如果一個反匯編窗口與一個十六進制窗口同步,在一個窗口中滾動鼠標,另一個窗口也會滾動到相同的位置(同一個虛擬地址)
如果在反匯編窗口中選中一個項目,十六進制窗口中的對應字節也將突出顯示
在反匯編窗口中,光標指向地址 0040E60D,這是一個 mov 指令,在十六進制窗口中,構成這個指令的全部 3 個字節均突出顯示
右擊十六進制窗口的任何位置,出現十六進制窗口的上下文菜單
使用這個菜單,可以指定與某個特殊的十六進制窗口同步的反匯編窗口(如果有的話)
如果取消選中同步選項,那麽在滾動十六進制窗口時,將不會有任何反匯編窗口隨之滾動
擇 Edit 菜單項可將十六進制窗口轉變為十六進制編輯器,完成編輯後,你必須提交或取消更改才能返回查看模式
可以使用 Data Format 菜單項選擇各種顯示格式,如 1、2、4、8 字節十六進制,帶簽名的十進制或不帶簽名的十進制整數及各種浮點格式
可以使用 Columns 菜單項更改顯示的列數
使用 Text 選項打開或關閉文本塊
如果十六進制窗口中顯示的是問號,這表示 IDA 無法識別給定的虛擬地址範圍內的值,如果程序中包含一個 bss 節,就會出現這種情況
通常,bss 節並不占用文件的空間,但加載器會擴展這一節,以適應程序的靜態存儲要求
bss 節由編譯器創建,用於保存程序的所有未初始化的靜態變量
既然沒有為這些變量指定初始值,就沒有必要在程序的文件鏡像中為它們分配空間,只需在程序的一個頭文件中註明它的大小
當程序執行時,加載器會為其分配所需的空間,並將整個數據塊的初始值設為 0
導出窗口
導出窗口列出文件的入口點
這些入口點包括程序的執行入口點(在程序的文件頭部分指定),以及任何由文件導出給其他文件使用的函數和變量
通常,用戶可在共享庫(如 Windows DLL 文件)中找到導出的函數
導出的項目按名稱、虛擬地址和序數(如果可用)排列
共享庫可能會使用導出序數,以方便用戶通過序數而非名稱訪問函數
使用序數可以加快地址查詢速度,並允許程序員隱藏函數的名稱
Windows DLL 即使用導出序數
對於可執行文件,導出窗口中至少包含一個項目:程序的執行入口點,IDA 將這個入口點取名為 start
與許多其他 IDA 窗口一樣,雙擊導出窗口中的一個條目,IDA 將會跳轉到反匯編窗口中與該項目有關的地址
導出窗口提供與 objdump (-T) 、 readelf (-s) 和 dumpbin (/EXPORTS) 等命令行工具類似的功能
導入窗口
導入窗口的功能與導出窗口的功能正好相反
導入窗口列出由被分析的二進制文件導入的所有函數
只有在二進制文件使用共享庫時,IDA 才需要用到導入窗口
靜態鏈接的二進制文件不存在外部依賴關系,因此不需要導入其他內容
導入窗口中的每個條目列出一個導入項目(函數或數據)的名稱,以及包含該項目的庫的名稱
由於被導入的函數的代碼位於共享庫中,窗口中每個條目列出的地址為相關導入表條目的虛擬地址
雙擊第一個條目,IDA 將跳轉到反匯編窗口的 00412168 地址處
在十六進制窗口中,這個內存位置的內容顯示為 ?? ?? ?? ??
因為 IDA 是一種靜態分析工具,它無法獲知程序在執行時會在這個內存位置輸入什麽地址
導入窗口還提供與 objdump (-T) 、 readelf (-s) 和 dumpbin (/IMPORTS) 等命令行工具類似的功能
導入窗口僅顯示二進制文件想要動態加載器自動處理的符號,二進制文件選擇使用 dlopen/dlsym 或 LoadLibrary/GetProcAddress 等機制自行加載的符號將不會在導入窗口中顯示
結構體窗口
結構體窗口用於顯示 IDA 決定在一個二進制文件中使用的任何復雜的數據結構(如 C 結構體和聯合)的布局
在分析階段,IDA 會查詢它的函數類型簽名擴展庫,設法將函數的參數類型與程序使用的內存匹配起來
雙擊數據結構的名稱,IDA 將展開該結構,這樣你就可以查看該結構的詳細布局,包括每個字段的名稱和大小
結構體窗口的兩個主要用途包括:
為標準數據結構的布局提供現成的參考;
提供一種方法,在發現程序使用的自定義數據結構時,幫助創建自己的、可用作內存布局模板的數據結構
枚舉窗口
如果 IDA 檢測到標準枚舉數據類型(C enum ),它將在枚舉窗口中列出該數據類型
可以使用枚舉來代替整數常量,提高反匯編代碼的可讀性
在枚舉窗口中也可以定義自己的枚舉類型,並將其用在經過反匯編的二進制代碼中
IDA Pro 權威指南學習筆記(六) - 次要的 IDA 顯示窗口