IDA使用方法-----1

0x01 啟動IDA

在這里插入圖片描述

  • new:反匯編一個新文件
  • go:運行,直接進入IDA
  • Previous:載入一個我們以前編譯過的程序

如果不想每次都看到這個對話框,可以取消該對話框底部的Display at startup(啟動時顯示),如果沒有勾選這個,下次啟動IDA時,IDA會認為我們單擊了go選項。如果我們沒有勾選這個,下次希望使用這個時,我們可以按照下圖做,就又可以顯示了。
在這里插入圖片描述

文件加載

使用File—>open命令打開一個新文件時,會看到下圖所示的加載對話框。IDA會自動生成一個可能的文件列表,并顯示這個列表,這個列表中將顯示最適合處理選定文件的IDA加載器。
在這里插入圖片描述

  • Windows PE加載器(pe.ldw)
  • MS-DOS EXE加載器(dos.ldw),PE文件格式是MS-DOS EXE文件格式的拓展形式
  • Binary File(二進制文件):這個選項會一直顯示,不論加載什么文件,因為它是IDA加載無法識別的文件默認選項,它提供最低級的文件加載方式
  • 如果IDA提供幾個加載器,我們一般選擇第一個,其他選項我們也一般默認

0x02 界面介紹

默認界面:
在這里插入圖片描述
1、工具欄區域:
在這里插入圖片描述
包含與IDA的常用操作對應的工具,我們可使用 VIew–>Toolbars----->Advance mode打開高級模式工具欄,高級模式工具欄包含三排工具按鈕
在這里插入圖片描述

2、彩色的水平帶是IDA的概括導航欄,也叫導航帶,是被加載文件地址空間的線性視圖。我們可以右擊導航帶任何位置,并選擇一個可用的縮放選項。不同的顏色表示不同類型的文件類型,如數據或代碼。在導航帶上,會有一個細小的當前位置指示符(默認為黃色)指向當前反匯編窗口中顯示地址范圍對應的導航帶地址。我們可以通過options—>colors自定義導航帶使用的顏色。
在這里插入圖片描述
3、IDA為當前打開的每一個數據顯示窗口都提供了標簽。數據顯示窗口中包含從二進制文件中提取的信息,他們代表數據庫的各種視圖。
在這里插入圖片描述
通過View—>Open Subviews菜單可打開其他數據顯示窗口
在這里插入圖片描述
4、反匯編視圖是主要數據顯示視圖,兩種形式:圖形視圖(默認)和列表視圖。我們可以使用空格鍵在圖形樣式和列表樣式之間切換。
在這里插入圖片描述
如果希望列表視圖作為默認視圖,則必須通過Options---->General菜單打開IDA Options復選框,取消Graph選項卡下的Use graph view by default
在這里插入圖片描述
5、使用圖形視圖時,顯示區很少能夠一次顯示某個函數的完整圖形。這時,圖形概況視圖可提供基本圖形結構的縮小快照,其中虛線矩陣表示其在圖形視圖中的當前顯示位置。
在這里插入圖片描述
6、輸出窗口顯示的是IDA輸出的信息
在這里插入圖片描述
7、函數窗口是默認IDA顯示窗口的最后一部分
在這里插入圖片描述

IDA 桌面提示和技巧
  • 使用View–>Open SubViews恢復無意中關閉的數據顯示窗口
  • 使用Windows—>reset desktop命令可迅速將桌面恢復到原始布局
  • 利用windows—>Save desktop命令保存你認為特別有用的當前桌面布局。使用Windows—>load desktop命令迅速打開你之前保存的一個桌面布局
  • Disassembly窗口是唯一一個可以修改其顯示字體的窗口,使用Options—>fonts命令可以設置字體

0x03 IDA數據顯示窗口

基本規則:

  • IDA不提供撤銷功能。如果不小心按下某個鍵,導致數據庫文件發生意外,這是,我們必須將顯示窗口恢復到以前的狀態
  • 幾乎所有的操作都有其對應的菜單項、熱鍵和工具欄按鈕。
  • IDA提供方便的、基于上下文的鼠標右鍵操作菜單

IDA主要的數據顯示窗口

在IDA中,ESC鍵是一個非常有用的熱鍵。在反匯編窗口中,ESC鍵的作用與web瀏覽器的后退按鈕類似。因此,它在導航反匯編窗口非常有用。遺憾的是,在打開其他的窗口時,ESC鍵用于關閉窗口。

1、反匯編窗口

反匯編窗口也叫IDA-View窗口,它是操作和分析二進制文件的主要工具。
反匯編窗口有兩種顯示窗口:圖形和列表

IDA圖形視圖
圖形視圖將一個函數分解成許多基本塊,以生動顯示該函數由一個塊到另一個塊的控制流程。IDA使用不同彩色箭頭區分函數塊之間各種類型的流。在條件跳轉位置終止的基本塊可能會生成兩種流:

  • 紅色:No邊的箭頭,不執行分支
  • 綠色:Yes邊的箭頭,執行分支
    還有一個藍色箭頭,指向下一個即將執行的塊
    在這里插入圖片描述
    我們可使用Ctrl+鼠標滑輪來調整圖形的大小。
  • 平移:通過單擊圖形概述和拖動圖形視圖的背景來定位圖形
  • 重新調整塊位置。通過單擊指定塊的標題欄并將其拖到一個新的位置,用戶還可以移動每一個塊的位置
  • 創建其他反匯編窗口:可以通過View–>Open subviews—>disassembly命令打開另一個反匯編空口。這樣打開的第一個反匯編窗口叫做IDA View A。隨后的反匯編窗口叫做IDA View B、IDA View C,以此類推。每個反匯編窗口都獨立于其他窗口。我們可以在一個窗口中查看一個圖形,在另一個窗口查看文本列表。
2、IDA文本視圖

面向文本的反匯編窗口是查看和操作IDA生成的反匯編代碼的傳統顯示窗口。文本顯示窗口會顯示一個程序的完整反匯編代碼清單,用戶只有通過這個窗口才能查看一個二進制文件的數據部分。
在這里插入圖片描述
顯示窗口的左邊部分叫做箭頭窗口,用于描述函數中的非線性流程。實線箭頭表示非條件跳轉,虛線箭頭表示條件跳轉。如果一個跳轉將控制權交給程序中的某個地址,這時會使用粗線(實線或虛線)。出現逆向流程,通常表示程序中存在循環

函數窗口

Functions窗口用于列舉IDA在數據庫中識別的每一個函數
在這里插入圖片描述

十六進制窗口

默認情況下,十六進制窗口顯示程序內容和列表的標準十六進制代碼,每行顯示16個字節。我們可以打開幾個十六進制窗口。
在這里插入圖片描述
第一個16進制窗口會與第一個反匯編窗口同步。如果一個反匯編窗口與一個十六進制窗口同步,在一個窗口滾動鼠標,另一個窗口也會滾動到相應位置(同一個虛擬地址)。如果在反匯編窗口選中一個項目,十六進制窗口中的對應字節也將突出顯示。
在這里插入圖片描述
有時候,十六進制窗口顯示的全部是問號,這表示IDA無法識別給定的虛擬地址范圍內的值。

導出窗口

導出窗口列出文件的入口點
在這里插入圖片描述

導入窗口

導入窗口的功能與導出窗口的功能正好相反。它列出由被分析的二進制文件導入的所有函數
在這里插入圖片描述

結構體窗口

結構體窗口用于顯示IDA決定在一個二進制文件中使用的任何復雜的數據結構的布局。
在這里插入圖片描述

枚舉窗口

如果IDA檢測到標準枚舉數據類型,它將在枚舉窗口列出該數據類型
在這里插入圖片描述

其他IDA顯示窗口

下面討論的窗口并不是你當前需要的信息,因此,IDA一開始并不開開這些窗口。

1.Strings 窗口

我們可以通過View —> Open SubViews —> Strings命令打開
在這里插入圖片描述
Strings窗口中顯示的是從二進制文件中提取出的一組字符串,以及每個字符串所在的地址,雙擊Strings窗口中的任何字符串,反匯編窗口將跳轉到該字符所在的地址。IDA默認掃描的字符串類型為至少包含5個字符的C風格、以Null結尾的7位ASCII字符串。
在這里插入圖片描述
每次打開Strings窗口,IDA都會掃描或重新掃描整個數據庫,查找其中的字符串。掃描字符串的操作遵照Strings窗口的設置來完成,我們右擊該窗口,在出現的菜單中選擇setup,即可開始設置

在這里插入圖片描述

  • Display only defined strings (僅顯示已定義的字符串)。這個選項使Strings窗口僅顯示IDA自動創建或用戶手動創建的已命名字符串數據項。
  • Igonre instructions/data definitions(忽略指令/數據定義)。這個選項會使IDA掃描指令和現有數據定義中的字符串
2、names窗口

列舉一個二進制文件的所有全局名稱。雙擊Names窗口的名稱,可立即跳轉到顯示該名稱的反匯編視圖。
在這里插入圖片描述
Name窗口顯示的名稱采用了顏色和字母編碼。其編碼方案:

  • F,常規函數。IDA認為這些函數不屬于庫函數
  • L,庫函數。IDA通過簽名匹配算法來識別庫函數
  • I,導入的名稱,通常為共享庫導入的函數名稱
  • C,命名代碼。
  • D,數據
  • A,字符串數據
3、段窗口

段窗口顯示的是在二進制文件中出現的段的簡要列表。該窗口顯示的信息包括段名稱、起始和結束地址以及許可標志。
在這里插入圖片描述
雙擊段窗口的任何條目,IDA將跳轉到反匯編窗口中該段的起始位置。右擊一個條目,IDA將顯示一個上下文菜單,你可以添加新段、刪除現有段或者編譯現有段的屬性。
在這里插入圖片描述

4、簽名窗口

IDA利用一個龐大的簽名庫來識別已知的代碼塊。簽名用于識別編譯器生成的常用啟動順序,以確定可能已被用于構建給定二進制文件的編譯器。
在這里插入圖片描述

0x04 反匯編導航

基本IDA導航

1、雙擊導航

反匯編程序時,程序的每個位置都分配一個虛擬地址。只要提供希望訪問的位置的虛擬地址,就可以導航到程序的任何地址。然而,記住大量地址并非易事。這促使早期的程序員給他們希望引用的程序位置分配符號名稱。這大大簡化了他們的工作。我們只需雙擊這些名稱就可跳轉。

2、跳轉到地址

使用jump —>jump to address命令或在處于活動狀態的反匯編窗口按下熱鍵G,均可打開Jump toAddress對話框
在這里插入圖片描述

3、導航歷史記錄

IDA的另一項類似于傳統web瀏覽器的功能,是它的前進和后退導航功能(基于你瀏覽反匯編窗口的順序)。每次你導航到反匯編窗口中的一個新位置,你當前的位置就會添加到位置列表中。有兩種方式菜單操作可用于遍歷這個列表。首先,Jump —>Jump to previous Position
或者使用ESC(只能在反匯編使用,其他窗口為關閉當前窗口),或者使用工具欄上的導航按鈕
在這里插入圖片描述

搜索數據庫

在IDA中,你可以輕松導航到你知道的位置

1、文本搜索

IDA文本搜索相當于對反匯編列表窗口進行子字符串搜索。通過Search—>Text命令啟動文本搜索或者Alt+T。搜搜限制于僅查找完整的詞,并且能夠匹配反匯編行中的任何完整的詞,包括操作碼助記符或常量。最后使用Ctrl+T或者Search—>Next Text命令可重復前一項搜索,以找到下一個匹配。
在這里插入圖片描述

2、二進制搜索

二進制搜索僅搜索十六進制視圖窗口。根據指定搜索字符串的方式,可以搜索16進制或ASCII字符串。
Search —>Sequence of Bytes或者Alt+B即可進行二進制搜索
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/380059.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/380059.shtml
英文地址,請注明出處:http://en.pswp.cn/news/380059.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

郵箱驗證JS代碼

方法一,用JSfunction finish_onclick() { var username document.getElementById("username");var pwhidden document.getElementById("pwhidden");if(username.value"") { alert("請填寫您的企業郵箱地址!");username.f…

objdump命令詳解

objdump命令是用查看目標文件或者可執行的目標文件的構成的gcc工具。 選項 --archive-headers -a 顯示檔案庫的成員信息,類似ls -l將lib*.a的信息列出。 -b bfdname --targetbfdname 指定目標碼格式。這不是必須的,objdump能自動識別許多格式,比如…

Java——異常(try...catch...finally)

public class Demo5_Throwable {public static void main(String[] args) {try{System.out.println(1/0);}catch(Exception e){System.out.println(e.getMessage());//獲取異常信息,返回字符串;System.out.println(e.toString());//獲取異常類名和異常信息&#xff…

Python程序反轉給定數字(2種不同方式)

Take input number from the user and print its reverse. 從用戶處獲取輸入號碼并打印其反面。 Example: 例: Input:12345Output:54321Here, we are implementing program to reversing a given number using 2 different ways. 在這里,我們正在實施程…

外匯期貨學習專帖(轉)

一篇好文,值得深思! (轉) 我的一些所看所想,和大家聊聊 ; d: R ^6 c* A2 e X" y8 y4 Bhttp://www.fx998.cn 說來慚愧,很久以前,俺在期貨公司混事,95年以前國內期貨公司從外盤棉花到咖啡....,外匯期指到原油.都能*作.是一派欣欣向榮之景.95年之后,按國家規定都轉了內…

《Pro ASP.NET MVC 3 Framework》學習筆記之四【領域模型介紹】

主題:應用領域驅動開發(Applying Domain-Driven Development) Domain Model是MVC程序的"心臟",其他的一切,包括Controllers和Views僅僅是用來跟Domain Model交互的一種方式,ASP.NET MVC并沒有限制使用在Domain Model上面…

Java——集合框架(List)

集合框架(List的三個子類的特點) A:List的三個子類的特點 ArrayList: 底層數據結構是數組,查詢快,增刪慢。 線程不安全,效率高。 Vector: 底層數據結構是數組,查詢…

一步一步學pwntools(適合新手)

序 pwntools是一個二進制利用框架。官方文檔提供了詳細的api規范。然而目前并沒有一個很好的新手教程。因此我用了我過去的幾篇writeup。由于本文只是用來介紹pwntools使用方法,我不會過于詳細的講解各種二進制漏洞攻擊技術。 Pwntools的“Hello World” 棧溢出無…

關于J2EE中死鎖問題的研究(1)

大多數重要的應用程序都涉及高度并發性和多個抽象層。并發性與資源爭用有關,并且是導致死鎖問題增多的因素之一。多個抽象層使隔離并修復死鎖環境的工作變得更加困難。 通常,當同時執行兩個或兩個以上的線程時,如果每個線程都占有一個資源并請…

python變量分配內存_Python | 聲明任何變量而不分配任何值

python變量分配內存Since, Python is a dynamic programming language so there is no need to declare such type of variable, it automatically declares when first time value assign in it. 由于Python是一種動態編程語言,因此無需聲明此類變量,它…

UVA 10004 - Bicoloring

模擬染色&#xff0c;因為只有兩種顏色&#xff0c;所以分別用 0、 1 代表這兩種顏色&#xff0c;然后從0開始深搜&#xff0c;如果 每個點都能染上色&#xff0c;且相鄰兩點的顏色不同&#xff0c;則符合要求。 #include<stdio.h>#include<string.h>#define MAXN …

標志寄存器:CF、PF、AF、ZF、SF、TF、DF、OF

注&#xff1a;下面說到的標志寄存器都是縮寫&#xff0c;C就是CF&#xff0c;其他也一樣 標志寄存器&#xff1a;C、P、A、Z、S、T、D、O的內容只會是0或1&#xff0c;0表示假&#xff0c;1表示真 O&#xff1a;溢出標志 一個寄存器如果存放的值超過所能表示的范圍&#xf…

揭秘:銷售人員26個致命弱點

銷售人員有許多積極的態度需要學習&#xff0c; 同時也有許多不良的習慣應該避免&#xff0c;以免影響個性及專業能力。仔細看看這些缺點&#xff0c;反省你自己&#xff0c;還需要改善的畫&#xff0c;直到你給自己一百分為止。找一位深知你的好 友&#xff0c;讓他誠實地給你…

Java——集合(練習題)

例題1&#xff1a;產生10個1~20之間的隨機數&#xff0c;要求隨機數不能重復 import java.util.HashSet; import java.util.Random; public class Test1 {/*** 產生10個1~20之間的隨機數&#xff0c;要求隨機數不能重復* * 分析&#xff1a;* 1,有Random類創建隨機數對象* 2&a…

模塊化 組件化 工程化_軟件工程中的模塊和軟件組件

模塊化 組件化 工程化The module in software is a small part of the software that is responsible for performing any kind of functionality. Sometimes, the term sub-program is also used to refer to the term module. 軟件中的模塊是軟件的一小部分&#xff0c;負責…

Firefox2狂占CPU解決辦法

https://images.cnblogs.com/cnblogs_com/Tisty/138006/o_firefox3.jpg 看了一下&#xff0c;不知道 "jpeg_free_large" 是干啥的&#xff0c;遂用 "Firefox jpeg_free_large" Google 一下&#xff0c;出來的一堆東西里有帖子說可能和 Apple 的 QuickTime …

PUSHAD和POPAD,以及PUSHA和POPA

PUSHAD PUSHAD也叫保護現場&#xff0c;就是把我們的寄存器壓入棧中 pushad是把eax&#xff0c;ecx&#xff0c;edx&#xff0c;ebx&#xff0c;esp、ebp&#xff0c;esi&#xff0c;edi依次壓入棧中&#xff0c;ESP會減少32&#xff0c;相當于&#xff1a; push eax push ec…

Java——n個數的全排列

例題&#xff1a; 輸入一串字符串&#xff0c;將該字符串中的字符元素進行全排列&#xff0c;然后&#xff0c;一串輸出結果。 例如&#xff1a; 輸入&#xff1a; ABCD 輸出&#xff1a; ABCD ABDC ACBD ACDB ADBC ADCB BACD BADC BCAD BCDA BDAC BDCA CABD CADB CBAD CBDA…

一段個性化stringgrid的代碼

需要注意的是 該段程序使用了 canvas。 procedure TW_CkbTaiZhang.KhLstDrawCell(Sender: TObject; ACol,ARow: Integer; Rect: TRect; State: TGridDrawState);begin if ARowkhlst.Row then with khlst.Canvas do //畫 cell 的邊框 begin Pen.Color : $00ff0000; …

dp 扔雞蛋_使用動態編程(DP)的雞蛋掉落問題

dp 扔雞蛋Problem statement: You are given N floor and K eggs. You have to minimize the number of times you have to drop the eggs to find the critical floor where critical floor means the floor beyond which eggs start to break. Assumptions of the problem: 問…