1. 程式人生 > >IDA Pro 權威指南學習筆記(六) - 次要的 IDA 顯示窗口

IDA Pro 權威指南學習筆記(六) - 次要的 IDA 顯示窗口

方便 dump 可能 沒有 匯編 關系 布局 提高 整數

十六進制窗口

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 顯示窗口