radare2入門


關於Radare2:

      radare2是一個開源的逆向工程和二進制分析框架,包括反匯編、分析數據、打補丁、比較數據、搜索、替換、虛擬化等等,同時具備超強的腳本加載能力,它可以運行在幾乎所有主流的平台(GNU/Linux, .Windows *BSD, iOS, OSX, Solaris…)並且支持很多的cpu架構以及文件格式。 radare2工程是由一系列的組件構成,這些組件可以在 radare2 界面或者單獨被使用–比如我們將要在接下來實驗中使用到的rahash2, rabin2, ragg2三個組件,所有這些組件賦予了 radare2 強大的靜態以及動態分析、十六進制編輯以及溢出漏洞挖掘的能力。

Kali已經自帶radare2

 

 

熟悉常用命令:

      我們可以輸入-h查看幫助

 

 

  I開頭的命令主要用來獲取各種信息

 

 

 A系列的命令用於分析文件

 

 

 

介紹下r2 框架里最強的一個工具 :rabin2.

      rabin2 可以獲取包括ELF, PE, Mach-O, Java CLASS文件的區段、頭信息、導入導出表、字符串相關、入口點等等,並且支持幾種格式的輸出文件.

      我們可以使用它來獲取二進制文件的基本信息

      輸入man rabin2查看更多用法

 

 

 

 

 

 對於反匯編,我們可以輸入vv進入圖形化界面

 

 

 

 

 

     輸入q則可以退出圖形化界面,回到shell

 

 

 


 通過破解一個crackme來進行radare2具體的學習

      首先rabin2加上-I 參數 來讓 rabin2 打印出二進制文件的系統屬性、語言、字節序、框架、以及使用了哪些 加固技術

 

 

 

  我們可以看到這是一個32位的 elf 文件,沒有剝離符號表並且是動態鏈接的

      接下來我們嘗試運行它

 

 

  可以看到,不論是否加參數都會顯示wrong。

接下來我們使用radare2來進行破解

 

 

 

可以黃色輸出了一個地址 (0x08048370),這就是它自動識別的程序入口點

      或者我們也可以使用ie命令手動打印出入口點

 

 

 接下來輸入aa或者aaa進行細致的分析

 

 

 

分析完成之后, r2會將所有有用的信息和特定的名字綁定在一起,比如區段、函數、符號、字符串,這些都被稱作 'flags', flags 被整合進 <flag spaces>,一個 flag 是所有類似特征的集合

      接下來我們看看所有的flag

 

 

  我們打印出imports下面的信息

 

 

 為了獲取更多的信息,我們可以再列出數據段里的字符串

 

 

 

出現了關鍵字,一個是success,一個是我們之前運行時的wrong….

      那我們接下來就跟着success走,看看哪兒進行了調用

      輸入命令axt @@ str.*

 

 

 

'axt' 命令用來在 data/code段里找尋某個地址相關的引用(更多的操作,請看 'ax?').

      '@@'就像一個迭代器,用來在地址空間里不斷地匹配后面一系列相關的命令(更多操作,請看 '@@?')

      'str.*' 是一個通配符,用來標記所有以 'str.'開頭的信息,不光會列出字符串標志,同時也包括函數名,找到它們到底在哪里以及何處被調用。

      接下來我們看看radare2分析出來哪些函數

 

 

 

 看到兩個引起我們注意的sym.beet和sym.rot13

      接下來我們用 's main'  指令定位到main函數入口處,然后用 'pdf'輸出反匯編代碼

 

 

 

 分析函數的執行流程,我們知道二進制程序是通過獲取 beet函數的返回結果來判斷是否正確

      因此我們去beet函數反匯編的部分看看

      因此我們定位到beet

      輸入pdf@sym.beet進行跳轉

 

 

 自動跳轉到beet函數的反匯編部分

 

 

  我們看到輸入的參數被拷貝到了一個緩存空間里,這個空間的地址是 ‘ebp – local_88h’ 。 'local_88h' 就是十進制的 136。由於4個字節會被用來保存 ebp 的地址,4個字節被用來保存返回地址,所以這個緩沖區得大小是 128個字節.它們加起來剛好是 136. 我們輸入的參數被拷貝到緩沖區后被用來和 sym.rot13的返回結果作對比, Rot-13 是一個著名的替換密碼算法,在ctf和crackme中被廣泛使用,這個函數接受了9個十六進制值作為參數,但是上圖中看起來r2好像沒有識別出來到底是什么字符,這里我們需要用 'ahi s' 來做些處理.

 輸入

 

 

  ahi s 是用來設置字符串特定的偏移地址(使用 ahi? 獲取更多用法),@@是一個迭代器,可以用來接受后面輸入的多個參數,執行完這條命令后,圖形視圖會自動刷新

 

 

 

可以看到

      0x080485a3

      0x080485ad

      0x080485b7

      后面的字符都已經顯示出來了

      我們已經看到了之前無法識別的字符串'Megabeets'(根據字節序反向壓棧順序得到).

      這個二進制文件將我們傳入的參數來和經過 rot13 處理后的 'Megabeets' 作比較

      接下來我們通過rahash2求出這個字符串的校驗值

 

 

 

至此,程序的邏輯就很清楚了:

      'Zrtnorrgf' 就是用來和我們輸入的字符串作比較,成功則返回success

      我們驗證一下:

      接下來輸入ood?進入調試模式

      將Zrtnorrgf作為參數進行調試

      輸入dc查看結果

 

 

 

 

  輸出了success,我們成功破解了這個小軟件,也借此掌握了radare2的基本用法

 

 

Crackme網址:https://github.com/ITAYC0HEN/A-journey-into-Radare2/blob/master/Part%201%20-%20Simple%20crackme/megabeets_0x1

radare2官網:www.radare.org

r2入門指南:https://www.megabeets.net/a-journey-into-radare-2-part-1/

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM