反汇编基础学习(四)
DIA數據顯示窗口
在將文件加載到IDA中完成初步分析后,需要手動分析。鎖業需要對IDA用戶界面有充分的了解。
IDA用戶界面的基本規則:
IDA不提供撤銷功能: 意外操作需要手動恢復到上一步
幾乎所有操作都有其對應的菜單項,熱鍵和工具欄按鈕: 可以根據需要自定義顯示哪些按鈕,或增加哪些按鈕
IDA提供方便的、基于上寫下文的鼠標右鍵操作菜單: 可以用來執行一些常見操作
IDA主要的數據顯示窗口
默認情況下會對文件的初始加載分析階段創建七個顯示窗口,包括三個已經顯示的IDA-view window、Functions window、Output window(反匯編窗口、函數窗口、消息輸出窗口) 。如果意外關閉窗口,可以通過View->Open Subviews菜單重新打開。
反匯編窗口(IDA-view)
反匯編窗口是操作和分析二進制文件的主要工具。反匯編窗口有兩種顯示格式:默認的基于圖形的視圖和面向文本的列表視圖。可根據偏好選擇,若想用文本列表作為默認匯編視圖可用Option->General->IDA Options->Graph->取消Use graph view by default(默認使用圖形視圖)選項,也可用空格鍵在兩種模式之間切換。
IDA圖形視圖
圖形視圖與流程圖相似,它將一個函數分解成許多基本塊,以生動地顯示該函數由一個塊到另一個塊的控制流程。
基本塊:指一個不包含分支,從頭執行到尾的最大指令序列。因此,每個基本塊都有唯一的入口點(塊中第一條指令)和退出點(塊中最后一條指令)。基本塊中第一條指令通常是分支指令的目標,而最后一條指令則往往是一條分支指令。
在視圖中不同顏色箭頭代表函數之間各種類型的流,根據測試條件,在跳轉位置終止的基本塊可能生成兩種流:Yes邊的箭頭(執行分支)默認為綠色;No邊的箭頭(不執行分支)默認為紅色;只有一個后繼的基本塊會利用一個(藍色箭頭)正常邊,指向下一個即將執行的塊。
流:表示某個指令如何繼續執行,正常流(普通流)表示指令默認連續執行,跳轉流表示當前的指令跳轉到(或可能跳轉到)某個非連續性位置,調用流表示當前指令會調用一個子進程。
可根據需要,用View->OpenSubviews->Disassembly打開另一個反匯編窗口,用不同類型同時查看不同的部分。但每次只能顯示一個函數,而且相應的,圖形中隱藏詳細的信息。也可以通過Options->General->Disassembly選擇后綴為(graph)的選項,可以看到
IDA文本視圖
面向文本的反匯編窗口是查看和操作IDA生成的反匯編代碼的傳統顯示窗口,文本顯示窗口會顯示一個程序的完整反匯編代碼清單,只有通過這個窗口才能查看一個二進制文件的數據部分。
在文本視圖中,反匯編代碼分行顯示,虛擬地址默認顯示,通常格式是 [區域名稱]:[虛擬地址],如圖中 .text:004010E0。
圖中1.叫做箭頭窗口,用于描述函數中的非線性流程,實線表示非條件跳轉,虛線箭頭代表條件跳轉,當出現 一個(條件或非條件)跳轉將控制權轉交給程序中的某個之前的地址,這時會使用粗線(實線或者虛線),一般出現這類逆向流程,就表示程序中存在循環。
圖中2.處的聲明,是IDA對函數幀棧布局的最精確估算。IDA會對函數棧指針及函數使用的任何棧幀指針的行為進行仔細分析,從而計算出該函數的幀棧的結構。
幀棧(或激活記錄):是指在程序運行時棧中分配的一個內存塊,其中包含傳遞給一個函數的參數和該函數聲明的局部變量。幀棧在函數的入口點位置分配,在函數退出時釋放。
圖中3.為注釋,以分號開頭屬于交叉引用,圖中是代碼交叉引用(不是數據交叉引用),表示另一個程序將控制權轉交給交叉引用注釋所在位置的指令。
交叉引用詳解
函數窗口
函數窗口用于列舉IDA在數據庫中識別的每一個函數,如下圖所示。
可以通過雙擊跳轉到相應的函數所在的位置。
由這一行可以得出:函數名為sub_17EDD2F,函數位置在.rdata部分地址為00000000017EDD2F 函數長為336字節(十六進制為DE字節)。
IDA次要的顯示窗口
除反匯編、函數和輸出窗口外,IDA還在桌面上打開許多選項卡式的窗口。這些窗口用于提供備選或專門的數據庫視圖,是否使用還是取決于二進制文件的特點和對IDA的熟練程度。
十六進制窗口
可以顯示各種格式的代碼,默認為十六進制代碼,每行顯示十六個字節,以及對應的ASCII字符,和反匯編窗口一樣,用戶也可以同時打開多個十六進制窗口Hex View-1、2、3……默認情況各窗口時同步的,且與反匯編窗口也是相對應的,一個窗口的翻頁和選中會在十六進制窗口也同步翻頁和突出顯示相應內容。在反匯編窗口選中一個項目,十六進制窗口的回應字節也會突出顯示。
在十六進制窗口內右鍵->Synchronize with->取消選中IDA View-A 可以停止上述的同步,右鍵->Edit 可以轉換為十六進制編輯小窗口,右鍵->Date Format 可以選擇不同的顯示格式,如1、2、4、8字節十六進制,帶簽名的十進制,或不帶簽名的十進制幀數及各種浮點格式。也可通過右鍵->Columns菜單項更改顯示的列數,右鍵->Text選項打開或關閉文本塊。
有時十六進制窗口顯示的全是問號,這表示IDA無法識別給定的虛擬地址范圍內的值。如果程序中包含一個bss節,就會出現這個情況,通常bss節不占用文件空間,但加載器會擴展這一節,以適應程序的靜態存儲要求。
bss節: bss節由編譯器創建,用于保護程序的所有未初始化的靜態變量。因為沒有為這些變量指定初始值,所以沒有必要在程序文件鏡像中為它們分配空間;只需在程序的一個頭文件中注明其大小。當程序執行時,加載器會為其分配所需的空間,并將整個數據塊的初始值設為0。
導出窗口
導出窗口列出文件的入口點。這包括程序的執行入口點(在程序的頭文件部分指定),以及任何由文件的導出給其他文件使用的函數和變量。通常,用戶可在共享庫(例如Windows DLL文件)中找到導出的函數。導出的項目按名稱、虛擬地址和序列(如果可用)排列。對于可執行文件,導出窗口中至少包括一個項目:程序的執行入口點。IDA將這個入口點取名為start。導出窗口中
總結
以上是生活随笔為你收集整理的反汇编基础学习(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网站变灰 filter: graysca
- 下一篇: 企业如何确定是否需要BPM(出自:计世网