老司機帶你玩轉Radare2

合天網安實驗室發表於2019-03-01

1、Radare2簡介

說起逆向,你想到的可能是IDA ProOllyDBG等。

Radare2是一款開放原始碼的逆向工程平臺,它的強大超越你的想象,包括反彙編、分析資料、打補丁、比較資料、搜尋、替換、虛擬化等等,同時具備超強的指令碼載入能力,並且可以執行在幾乎所有主流的平臺(GNU/Linux, .Windows *BSD, iOS, OSX, Solaris…)上。可謂是一大神器。

這裡我們使用Kali系統來學習它,因為Kali系統自帶了這個神器。

2、Radare2使用

開啟終端,使用radare2 -h 可以檢視其幫助資訊

圖片來源:合天網安實驗室

radare2裡面有個很牛逼的工具:rabin2

rabin2 可以獲取包括ELF, PE, Mach-O, Java CLASS檔案的區段、頭資訊、匯入匯出表、字串相關、入口點等等,並且支援幾種格式的輸出檔案。使用man rabin2 可以檢視rabin2的使用幫助文件。

然後我們通過破解一個crackme來學習神器radare2的使用。

首先使用 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.beetsym.rot13

接下來我們用 s main指令定位到main函式入口處,然後用pdf輸出反彙編程式碼

圖片來源:合天網安實驗室

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

因此我們去beet函式反彙編的部分看看 因此我們定位到beet

輸入pdf@sym.beet進行跳轉

圖片來源:合天網安實驗室

自動跳轉到beet函式的反彙編部分

圖片來源:合天網安實驗室

我們看到輸入的引數被拷貝到了一個快取空間裡,這個空間的地址是 ebp – local_88hlocal_88h就是十進位制的 136。由於4個位元組會被用來儲存 ebp 的地址,4個位元組被用來儲存返回地址,所以這個緩衝區得大小是 128個位元組.它們加起來剛好是 136. 我們輸入的引數被拷貝到緩衝區後被用來和 sym.rot13的返回結果作對比, Rot-13 是一個著名的替換密碼演算法,在ctfcrackme中被廣泛使用,這個函式接受了9個十六進位制值作為引數,但是上圖中看起來r2好像沒有識別出來到底是什麼字元,這裡我們需要用 ahi s 來做些處理.輸入

圖片來源:合天網安實驗室

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

圖片來源:合天網安實驗室

可以看到

  0x080485a3

  0x080485ad

  0x080485b7
複製程式碼

後面的字元都已經顯示出來了

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

這個二進位制檔案將我們傳入的引數來和經過 rot13 處理後的 Megabeets 作比較

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

圖片來源:合天網安實驗室
至此,程式的邏輯就很清楚了: Zrtnorrgf 就是用來和我們輸入的字串作比較,成功則返回success。我們驗證一下:接下來輸入ood?進入除錯模式 將Zrtnorrgf作為引數進行除錯,輸入dc檢視結果

圖片來源:合天網安實驗室

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

是不是躍躍欲試了呢?實踐才能學到真本領!戳下面的連結即可進行線上實操,無需自己搭建環境噢!

?????

Radare2實戰

3、說明

本文由合天網安實驗室原創,轉載請註明來源。

關於合天網安實驗室

合天網安實驗室(www.hetianlab.com)-國內領先的實操型網路安全線上教育平臺 真實環境,線上實操學網路安全 ; 實驗內容涵蓋:系統安全,軟體安全,網路安全,Web安全,移動安全,CTF,取證分析,滲透測試,網安意識教育等。

(本文來源:合天網安實驗室--領先的實操型網路安全線上教育平臺)

相關文章