<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    IDA的基本用法

    IDA為Interactive Disassembler公司的反編譯與除錯工具的產品。常用于逆向工程。在CTF比賽中經常用于靜態分析,超強的工具。我們經常需要用到其F5反編譯功能,但是網絡上的資源大多數版本落后或者沒有F5功能
    這里我們提供資源方便同學們下載使用學習(??????)?
    提供的IDA為windows下的,因為大多數linux或者mac的反編譯F5功能并沒有,這里我們提供wine工具,方便在Linux操作系統中使用Windows程序。

    如何通過wine安裝Windows軟件大家自行Google就好。
    具體細節的教程大家可以看開發者的博客https://www.hex-rays.com/blog/, 我們這只是針對于CTF比賽常用的方法進行介紹。

    常用快捷鍵

    IDA中的快捷鍵都是和菜單欄的各個功能選項一一對應的,基本上你只要能在菜單欄上找到某個功能,也就能看到相應的快捷鍵,這里記錄幾個常用的:

    a:將數據轉換為字符串
    f5:一鍵反匯編
    esc:回退鍵,能夠倒回上一部操作的視圖(只有在反匯編窗口才是這個作用,如果是在其他窗口按下esc,會關閉該窗口)
    shift+f12:可以打開string窗口,一鍵找出所有的字符串,右擊setup,還能對窗口的屬性進行設置
    ctrl+w:保存ida數據庫
    ctrl+s:選擇某個數據段,直接進行跳轉
    ctrl+鼠標滾輪:能夠調節流程視圖的大小
    x:對著某個函數、變量按該快捷鍵,可以查看它的交叉引用
    g:直接跳轉到某個地址
    n:更改變量的名稱
    y:更改變量的類型
    /:在反編譯后偽代碼的界面中寫下注釋
    \:在反編譯后偽代碼的界面中隱藏/顯示變量和函數的類型描述,有時候變量特別多的時候隱藏掉類型描述看起來會輕松很多
    :在反匯編后的界面中寫下注釋
    ctrl+shift+w:拍攝IDA快照
    u:undefine,取消定義函數、代碼、數據的定義

    常用設置

    拍攝快照

    由于IDA不提供撤銷的功能,如果你不小心按到某個鍵,導致ida數據庫發生了改變,就得重新來過,所以要記得在經常操作的時候,加上快照:file–>take database snapshot
    加完快照后,會生成一個新的ida數據庫文件,本質上是有點像另存的操作
    快捷鍵:ctrl+shift+w

    菜單欄常用設置

    view–>open subviews: 可以恢復你無意中關閉的數據顯示窗口

    windows–>reset desktop: 可以恢復初始ida布局

    option–>font: 可以改變字體的相關屬性

    在流程視圖中添加地址偏移

    IDA中的流程視圖可以說是非常的好用,簡單明了地能看出程序的執行流程,尤其是在看if分支代碼和循環代碼的時候,能夠非常直觀

    IDA的基本用法

    但是,我們還可以改得更加好用,在這個視圖中添加地址偏移的話,我們取地址就非常方便,不再需要按空格切換視圖去找,在菜單欄中設置:option–>general

    IDA的基本用法

    IDA的基本用法

    自動添加反匯編注釋

    這個功能對于萌新來說非常友好,在剛剛初學匯編的時候, 難免遇到幾個不常用的蛇皮象拔蚌匯編指令,就得自己一個個去查,很麻煩,開啟了自動注釋的功能后,IDA就可以直接告訴你匯編指令的意思

    同樣是在菜單欄中設置:option–>general

    IDA的基本用法

    IDA的基本用法

    常用操作

    創建數組

    在操作IDA的時候,經常會遇到需要創建數組的情況,尤其是為了能方便我們看字符串的時候,創建數組顯得非常必要,以下我隨便找了個數據來創建數組

    首先點擊選中你想要轉換成數組的一塊區域:

    IDA的基本用法

    接著在菜單欄中選擇:edit–>array,就會彈出如下的選項框

    SnLeTydORB.png!large 下面來解釋一下各個參數的意思:

    Array element size 這個值表示各數組元素的大小(這里是1個字節),是根據你選中的數據值的大小所決定的

    Maximum possible size 這個值是由自動計算得出的,他表示數組中的元素的可能的最大值

    Array size 表示數組元素的數量,一般都根據你選定的自動產生默認值

    Items on a line 這個表示指定每個反匯編行顯示的元素數量,它可以減少顯示數組所需的空間

    Element print width 這個值用于格式化,當一行顯示多個項目時,他控制列寬

    Use “dup” construct :使用重復結構,這個選項可以使得相同的數據值合并起來,用一個重復說明符組合成一項

    Signed elements 表示將數據顯示為有符號數還是無符號數

    Display indexes 顯示索引,使得數組索引以常規的形式顯示,如果選了這個選項,還會啟動右邊的Indexes選項欄,用于選擇索引的顯示格式

    Create as array 創建為數組,這個一般默認選上的

    創建好了以后,就變成了這樣:

    IDA的基本用法

    可以看到這些數據已經被當成一個數組折疊到了一起,或許會遇到n dup(0xff)這樣的,表示有n個重復的數據0xff。

    流程圖

    折疊流程圖中的分支

    在流程視圖中,分支過多的時候,可以在窗口標題處右擊選擇group nodes,就能把當前塊折疊起來

    IDA的基本用法
    分支可以自定義命名,方便與逆向理解。

    函數調用圖

    菜單欄中:view–>graphs–>Function calls(快捷鍵Ctrl+F12)

    IDA的基本用法

    這個圖能很清楚地看到函數之間是如何相互調用的

    函數流程圖

    菜單欄中:view–>graphs–>flowt chart(快捷鍵F12)

    IDA的基本用法

    這個其實跟IDA自帶的反匯編流程視圖差不多,他可以導出來作為單獨的一張圖

    創建結構體:

    手工創建結構體

    創建結構體是在IDA的structures窗口中進行的,這個操作在堆漏洞的pwn題中經常使用

    IDA的基本用法

    可以看到,這里已經存在了三個結構體,程序本身存在的,可以右擊選擇hide/unhide,來看具體的結構體的內容

    IDA的基本用法

    創建結構體的快捷鍵是:insert (d 增加結構體變量,n重命名結構體變量)

    導入C語言聲明的結構體

    實際上,IDA有提供一個更方便的創建結構體的方法,就是直接寫代碼導入

    在View–>Open Subviews–>Local Types中可以看到本地已有的結構體,在該窗口中右擊insert

    可以添加新的結構體:

    5QguNVVxoZ.png!large

    這樣就導入了新的結構體:

    IDA的基本用法
    接著我們需要對著my_structure右擊,選擇 synchronize to idb。如果沒有這一步的話,同學們會發現structure視圖里面,并沒有這個結構體。

    IDA的基本用法
    這里涉及到結構體的內存對其問題。ida默認統一4字節對齊,結構體的大小為0x18。

    IDA導出數據文件

    在菜單欄中,這里有個選項可以生成各種不同的輸出文件

    IDA的基本用法

    這里簡單的介紹前兩個文件,后面的大家可以自己去生成測試一下用途,我這里就不詳細介紹了

    .map文件描述二進制文件的總體結構,包括與構成改二進制文件的節有關的信息,以及每個節中符號的位置。

    .asm文件,也就是匯編了,直接能導出ida中反匯編的結果,這個非常實用,有的時候在逆向中經常遇到大量數據加解密的情況,如果在從IDA中一個個慢慢復制可就太沒效率了,直接導出生成asm,在里面復制數據快很多

    IDA常見命名意義

    IDA經常會自動生成假名字。他們用于表示子函數,程序地址和數據。根據不同的類型和值假名字有不同前綴

    sub 指令和子函數起點
    locret
    返回指令
    loc 指令
    off
    數據,包含偏移量
    seg 數據,包含段地址值
    asc
    數據,ASCII字符串
    byte 數據,字節(或字節數組)
    word
    數據,16位數據(或字數組)
    dword 數據,32位數據(或雙字數組)
    qword
    數據,64位數據(或4字數組)
    flt 浮點數據,32位(或浮點數組)
    dbl
    浮點數,64位(或雙精度數組)
    tbyte 浮點數,80位(或擴展精度浮點數)
    stru
    結構體(或結構體數組)
    algn 對齊指示
    unk
    未處理字節

    IDA中有常見的說明符號,如db、dw、dd分別代表了1個字節、2個字節、4個字節

    參考

    本文章首發在 網安wangan.com 網站上。

    上一篇 下一篇
    貢獻者:1
    討論數量: 0
    只看當前版本


    暫無話題~
    亚洲 欧美 自拍 唯美 另类