2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

Editor發表於2020-11-03
無論是對於硬體廠商還是安全行業來說,通過逆向深入研究各種攻擊行為都十分有必要。


然而物聯網裝置和惡意軟體同時執行於各種不同的作業系統與CPU架構中。安全工程師需要費時費力搭建各種各樣的虛擬環境,大大降低了分析效率。

最關鍵的是,即使配置好了環境,現階段絕大多數二進位制分析工具或者框架都不支援進行更高層次的分析,這導致傳統的二進位制分析體驗,尤其是針對物聯網裝置和惡意軟體的分析體驗是完全支離破碎的。

而麒麟框架基於完全跨平臺的模擬,衝破種種傳統二進位制分析的束縛,在更高的層次上對不同的平臺提供統一的分析介面,為廣大安全研究人員帶來煥然一新的現代化逆向分析體驗。

下面就讓我們來回顧看雪2020第四屆安全開發者峰會上《麒麟框架:現代化的逆向分析體驗》的精彩內容。



演講嘉賓


2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

孔子喬,京東牧者安全實驗室安全工程師,Lancet戰隊成員,GeekPwn 2019名人堂,Blackhat Asia 2020演講者,Qiling和Unicorn的貢獻者,主攻二進位制分析和程式碼審計。

武晨旭,京東牧者安全實驗室安全工程師,麒麟框架主要貢獻者,BlackHat Asia 2020 演講者 BUUCTF Re方向Top1。


演講內容


以下為速記全文:

大家好,我是孔子喬。今天我和武晨旭為大家帶來的議題是“麒麟框架:現代化的逆向分析體驗”。

這是我們的目錄,第一部分是演講者介紹,第二部分是麒麟框架介紹,第三、四、五部分我們會分別給出3個例子來介紹麒麟框架怎樣給大家更好的逆向體驗。其中,第三部分會講一下MBR插樁分析,這是一個比較簡單的例子,主要用來展示我們麒麟的架構和它的設計。第四部分是麒麟框架除錯層支援,這個待會兒由武晨旭待來講。第五部分會說一下反OLLVM平坦化,這屬於一個反混淆的例子。第六部分的話會談一下我們的展望。


一.演講者介紹


首先是演講人介紹,剛才主持人已經介紹過我們兩個了,我就只介紹最後一位吧。雖然沒有站在臺上,但還是應該介紹一下他,KJ是我們京東牧者安全實驗室的創始人,也是各種安全會議演講常客。


二.麒麟框架介紹


然後進入我們的麒麟框架介紹。首先是總覽,麒麟框架本質上是在沙箱環境內模擬執行二進位制檔案,在模擬執行的基礎上提供統一的分析API,這個API包括插樁分析、快照、系統呼叫和API劫持等。它的優點是它是跨系統的,比如說Windows、MacOS、BSD等,當然它也是跨架構的,在x86或者在arm等架構上,它是可以模擬這些架構的。另外它也是跨二進位制的,常見的二進位制麒麟框架現在基本上都支援了。

等會兒武晨旭還會幫我們介紹它對GDB除錯的支援以及我們自己的除錯Qdb。同時IDA外掛也會為這個IDA提供一個動態插樁分析的能力。這樣幹講不直觀,所以我儘量用一張圖讓大家直觀瞭解什麼是麒麟框架。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

中間就是我們的麒麟框架,大家可以把它想成一個黑箱,左邊輸入你的Windows PE或者DOS COM等,什麼都行。比如Windows, UEFI Executable,實際上它也是一個PE,經過我們麒麟框架的模擬執行之後,框架能給些什麼呢?第一我們會給一個插樁API,利用這個插樁你可以在你想要的地方去獲得你的上下文,還有記憶體API和快照的API,另外還可以給出一些有關磁碟的API。

那我們模擬是怎麼實現的?一般計算機有三層,最底層的是CPU,然後它上面執行著系統,系統上面則執行著程式。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

麒麟框架的這種模擬實現其實跟這個是對應的,我們最下層是Unicorn,Unicorn是基於Qemu的CPU模擬器,它對上層系統是沒有任何感知的。當Unicorn遇到一個interrupt或者syscall,會直接停下來。

在這上層,麒麟框架會解析二進位制檔案,設定記憶體,同時實現關鍵的系統呼叫,然後再從二進位制檔案的入口點開始執行,不會去給你搞一個完整的系統。接下來我們怎麼設計一個架構呢?最底層,就是Arch層,它比較貼近底層,會設定暫存器、記憶體和棧,還會負責架構相關的底層實現,像x86的GDT就是我們在這裡實現的。

再上面一層就是Loader,Loader會去解析你輸出的二進位制,判斷系統的型別,比如說你現在是在Windows上跑還是在Mac上跑,你想跑的目標系統是一個posix還是UEFI,它的符號也會在這個地方解析,然後去重定位,同時會去解析程式碼段,把它載入進記憶體設定堆疊,總之他就是為這個程式跑起來做好一切的前期準備工作。

Loader上面的最後一層是OS層,這一層也可以說是我們的核心實現,包括系統呼叫實現,同時也提供作業系統常見的相關抽象,比如說磁碟、檔案路徑等。

接下來說說分析API,等會兒我們在MBR插樁分析部分會仔細講,在這裡先簡單提一下。圖上左邊可以看到暫存器、記憶體,包括我們引以為傲的插樁、磁碟和快照。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

為什麼我說引以為傲呢?因為對於所有麒麟支援的系統和架構組合,比如說你在Windows上想去模擬一個UEFI的PE或者你在Mac OS上想去跑一個Windows的PE,只要是這些組合我們都可以提供統一的分析API。



三.MBR插樁分析


接下來第三部分,我們會用一個相當簡單的例子,也就是MBR插樁分析,來展示麒麟框架是怎麼設計的。

MBR是磁碟的第一個上區,相信大家都很熟悉了。我們知道8086,它雖然是16位的,但是它開啟了分段並且有20位地址線,所以我們需要地址轉換,這是在Arch層做的。Loader層就是解析COM檔案或者MBR Dump,同時把硬碟對映給加上。而OS層主要是實現傳統的BIOS中斷。上一年代的分析員可能對這很熟悉,比如說我們用ncurse來實現BIOS圖形服務和鍵盤服務,然後我們可以通過硬碟對映來實現硬碟服務,因此可以說麒麟框架是目前唯一一個可以對MBR進行插樁分析的框架。

樣本分析呢是來自於Flare-On Challenge 8-doogie,這個大家都可以搜到。我們有一個工具叫qltool,跟Qemu usernmode有點類似,可以直接把它跑起來,不需要寫程式碼。如果能跑起來之後,你會看到它會等待一個輸入。這時候你隨便輸,一般會得到一些亂碼。但他這裡給了一個提示,會有一個日期顯示是1990年2月6號,我們後面會用到它。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

樣本分析MBR大家肯定也很熟悉,這個階段BIOS把MBR載入到 0x7c00開始執行,然後一般MBR會把自己的剩餘程式碼通過磁碟服務再往後載入一段到記憶體,然後從那地方跳轉執行,這個程式和其他的MBR程式碼的執行也是一樣的。

核心邏輯上我們關注的肯定是它跳轉之後的邏輯。之後的邏輯其實也非常簡單,第一部分首先通過中斷來獲取當前的時間,然後把當前的時間分成兩個word,把一段固定片語進行異或,接著讀取輸入,和一個固定欄位進行異或,這時候再輸出兩次異或的結果。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

接下來,我們的麒麟框架能怎樣逆向這個東西呢?最基礎的一點,我們可以把這個東西跑起來,去模擬MBR檔案的執行。第二點的話,我們去Hook BIOS中斷INT 1A 返回來改時間,就相當於它在跑的時候我們可以把它的時間改成那個時間,然後我們可以動態去讀寫記憶體,獲得它各個階段的緩衝區字串。同時我們還可以用快照快速地嘗試每個Key。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

我們可以看到它的flag不是唯一的。破解也是分三個階段的,第一階段我們首先獲取它和指定日期異或後的字串,這個用到了Hook API,部分執行以及FS Mapper。第二階段我們讀取記憶體,搜尋所有可能的Key,這個我們主要就是用Memory API來實現。最後一個階段我們會測試每一個Key對不對,這裡用的是Hook API,部分執行,Memory API以及快照API。

具體來說,第一階段就是用ql.set_api ,通過它來Hook BIOS中斷,設定時間,然後我們在ql.os.fs_mapper 裡對映磁碟。之後在和日期第一次異或完後就停止執行,因為這個時候我們需要獲得中間結果。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

第二階段我們用Memory API讀取記憶體,猜測Key的長度,然後在假設最後結果是可列印ASCII碼的情況下,把所有有可能的Key都搜尋一遍。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

最後一個階段部分執行就直接跳過輸入讀取,然後儲存快照,再通過 Memory API填入Key,把每一個都試一遍,然後再恢復快照,從讀取後開始部分執行到列印字元,最後觀察結果就可以得到一個Flag。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

接下來給大家播放一個視訊demo。我在這裡稍微具體講一下,這裡首先是第一階段,固定日期跟固定字串異或之後的結果,我可以給大家先執行一下看一下,這就是用qltool來進行執行的。然後可以看到它有一個輸入,同時有一個日期。

在執行它之前,首先我們需要用FS API把這個檔案掛載到我們模擬的系統上,接著通過Set API把時間給設定一下。在系統調用完成之後,我們覆蓋它原來返回的值,最後執行到讀取輸入之前,我們不讀取輸入,因為我們需要自動化地去破解這個工作,這是第一個階段。

到了第二階段,我們需要把第一次異或之後的結果拿出來,這裡用一個演算法。這個是地址,這個是結果,我們把結果拿出來之後,用一個演算法去猜這個Key的長度。我們會假設它的結果應該都是可列印的,在這個前提下把所有的Key拿到。

第三階段也是最關鍵的一個階段。因為它最後都是要列印的,Key肯定是不唯一的,所以我們要把每個Key試出來。這個階段主要分為兩步,先設計時間,然後再掛載硬碟。

這裡最關鍵的是,我們在執行的時候先用ql.save,先把Contex儲存下來,接下來我們把Key直接填入緩衝區,就我們跳入整個輸入的函式。可以看到這裡,直接把它填到緩衝區裡面,直接跳過輸入的函式,然後直接從輸入讀取完後開始執行,就只執行後面這半部分,Reading put全把它給跳過。執行一次之後返回,這時候再恢復剛才的上下文,再重新試下一個Key,接下來就是直接執行整個指令碼。

後面這是一個分析指令碼。這是第一階段,跟日期異或之後結果就結束,第二階段一下就跑完了,第三階段就是把每個Key列印出來,在這兒要觀察我們save/restore的速度。我們不會去儲存系統的東西,只儲存二進位制的東西,所以它非常快。這裡還有time.sleep一秒的延遲,所以這是一個非常方便的API。現在已經可以看到有些地方已經出Flag了,這裡就不再繼續播放了。

那麼接下來,就由武晨旭來介紹麒麟框架的除錯層。



四.麒麟框架除錯層支援


大家好,我是武晨旭,接下來由我來介紹麒麟框架除錯層的支援。我想先說一下當今逆向技術的痛點。首先來說PC端,PC端一直以來缺乏比較好用的HOOK工具。如果我們只有一臺比如說像Windows系統的裝置,但我們需要除錯多個架構的程式,我們就需要使用多個虛擬機器或者其它架構的實體機,這對於安全分析來說是有一定價格上的代價的。

對於這個痛點的話,麒麟框架有一個特點就是能夠相容很多架構,也就是說它能把主流的這些架構全部在一個機器上進行模擬。還有就是我們在麒麟框架裡引用了demigod模組,使麒麟可以直接去模擬核心模組,比如說.sys、.ko、.kext等,省去了雙機除錯的麻煩。

還有另一個痛點在loT方面,這方面主要就是逆向環境搭建比較困難,因為它大多數是ARM、ARM64、Mips這些架構。另外,在除錯方面我們的工具也是少之又少。舉一個例子,如果我們想要去逆向除錯路由器的話,首先我們要通過各種途徑去獲得韌體,拿到韌體後需要解包,那如何去除錯呢?我們需要用Qemu把韌體執行起來,執行起來以後我們再掛載GDB,去遠端除錯。

這其中還有一些問題,比如我們需要模擬一些裝置或者網橋,這些東西我們自己去定義,設定這些東西的話,我們針對一種韌體是可以的,但是換了另外一種韌體之後,我們又需要重新再去設定一遍,這樣的重複開發對於逆向除錯來說時間成本就非常高了。

而麒麟框架可以完全把這個程式放到使用者態去模擬,再進行任何方式的Hook,這其實是Qemu所做不到的東西。我們提供了非常多的Hook方式,比如說address hook、code hook,以及block hook等。

接下來展示一下我們麒麟框架現在支援的三種除錯手段,一個是GDBSever(遠端除錯),一個是社群提供的基於命令列的qdb,還有一個就是IDA外掛,是完全圖形化的。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

首先麒麟的GDBSever可以連線到原生的GDB,以及任何支撐GDB遠端除錯的工具,比如說IDA、R2這樣的。原生的GDB我們要去除錯的話,它的缺點是我們要編譯對應架構的GDBSever,然後還得放到對應架構的系統裡去,再連線。

而用了麒麟的GDBSever,我們只需要一臺機器就可以模擬所有主流的架構。但是在使用一段時間後,我們會發現麒麟的GDBSever也有一些複雜,比如說我們用GDB時,有些人會覺得反彙編的效果比較差,相比於IDA來說函式的分析沒那麼全,還有一個就是GDB可能對一些人來說比較難於操作。

於是我們後來又開發了IDA外掛。麒麟的IDA外掛功能方面主流的除錯功能都有,包括像模擬執行,就是我們選中任何一段指令去模擬它,還有就是像Step、Continue這種比較常見的操作。此外,IDA外掛還提供了實時的顯示,比如說像暫存器、棧還有記憶體,都可以實時顯示它當前執行的過程。最重要的一點前面孔子喬也提到了,我們有Binary級的快照功能,這個功能可以儲存我們當前可執行檔案的執行狀態。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

舉個例子,比如說我們想做漏洞挖掘,需要對一個關鍵的函式做重複的操作。在做這個重複操作的時候,我們希望它每次輸入變數的時候,函式所處的環境都是一模一樣的,比如說像CPU的上下文、記憶體全部完全一樣,這時我們就可以使用快照功能對它進行儲存。同時,通過麒麟進行Fuzz也是這個原理。我們把當前的狀態儲存,然後一遍一遍輸入變異的變數,從而發現漏洞。

通過麒麟與現代當今最主流靜態反彙編工具IDA實現動靜結合,能夠更好地幫助逆向人員進行逆向工程和程式碼理解,當然之後還有些高階的功能比如說像反混淆、反平坦化,會由孔子喬來繼續為大家分享。

這裡我還要說的是IDA還有一個非常有趣的特點,就是它可以繪製控制流圖中每一個block中指令的背景顏色。這個特點結合麒麟框架之後,我們就可以實現繪製程式的執行流程,這個功能對於一些垃圾程式碼,可能永遠不會跑到的一部分指令,我們可以很方便地識別出來之後去除。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

當然,麒麟的IDA外掛也實現了自定義指令碼,它可以將麒麟提供的所有的API以及IDA提供的所有API全部結合起來,放在這個指令碼里。這個是自定義指令碼的模板,一共有四個位置可以進行自定義,一個是在麒麟的初始化階段,還有一個是在Continue階段,也就是我們點選這個Continue時,以及後面點選Step時,還有一個是我們提到的可以選中任意一段程式碼去模擬執行時。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

使用qiling IDA外掛可以很方便地進行Hook,還可以再結合IDA讀取資訊,改寫記憶體,實現任何我們想要的操作。

接下來想給大家演示的是一個著名的loT殭屍網路病毒Mirai。這個病毒有一些加密資料,這些加密資料是在執行時才解密,每次解密使用完後立刻再加密,因此我們如果想要提取大量被解密的資料,可能需要重複除錯動作很多次,但是使用麒麟的話,只點幾下滑鼠就夠了。

這是我們最後寫好的自定義指令碼,我們只需要把IDA外掛載入IDA,當前這個例子只需要使用Continue、Step,在這兩個位置進行Hook就可以了。

我們現在已經定位到被加密的資料了,我們找到它在Data段裡面的地址,比如說我們現在選中了這一塊Data地址,這些資料我們想解密出來,我們只需要找到裡面的解密函式,把這段記憶體中的資料放進去即可,如果我們想解密的資料量非常大,可能有幾百K、幾兆的資料,也可以通過迴圈放進去,這樣就可以做到人力輕易不可能做到的事情。

我們現在定位到的是解密函式,為了讓大家看得更清楚,我們先在兩端都放上斷點,現在我們看到的就是它解密函式的演算法,其實這些演算法我們並不需要關心,我們只需要寫好指令碼,然後點選Continue。

現在來到了第一個斷點,先展示一下記憶體視窗,可以輸入任意一個地址,選擇我們想看的記憶體的大小就可以展示出來。我們把想要解密的資料全部放到這下面這塊記憶體中,等我們解密完之後也會把解密後的資料實時顯示在這一部分。接下來我們只需要再點選一次Continue,它就會把我們想解密的所有的資料解密出來。接下來就由孔子喬繼續為大家演示使用IDA外掛進行反平坦化。


五.反OLLVM平坦化


正如看經典資料加密解密一樣,混淆與反混淆基本上是一個更普遍的話題,今天有很多的議題也都是關於反混淆的。OLLVM是一個非常著名的混淆器,它被研究得很多了。它基於LVM,這個可能大家都熟悉,它是一個前端中間有IR然後到後端。而OLLVM相當於是多加了混淆Pass,它中間有一個非常有趣的特點叫平坦化。為什麼叫平坦化待會兒大家一看就知道了。

先講它怎麼工作的。首先它第一步是取所有的基本塊,這個基本塊會用一個大while和switch來控制基本塊之間的跳轉,大家來看左下角這個例子是LVM官方的例子,先取出a,如果a是0的話它返回1,否則返回10,如果都不是返回0。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

經過這個混淆之後,它引入了變數b,比如說b如果是1它跳轉到返回1,如果b是2它跳轉到返回10,也就是引入了一個跟原來邏輯無關的量,來控制真實的控制流。隨著邏輯變複雜,case快速增長,可以很好地迷惑逆向工程師。

這裡我們用的樣本比較簡單,是我自己寫的一段程式,是用NDK配合OLLVM來進行譯的,這個等會兒會給大家看視訊。反OLLVM平坦化第一步就是識別,其識別是識別四種塊。第一種是真實塊,包含混淆前程式裡面的真實邏輯,可能會有一次條件語句。第二種是虛假塊,它是沒有任何原邏輯的,僅僅負責switch case的實現,也就是我們剛剛引入的變數b它就會在這裡。第三種是返回塊,它會結束函式的執行。

最後一種就是分發塊,它相當於一個switch語句,決定控制流走向。事實上,反混淆的核心就是識別分發塊。我們可以看到右邊這一塊,如果是確定了分發塊,剩下的塊基本上都是可以直接退出來的。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

識別的話,由於所有的真實塊後期都是分發塊,因此分發塊可以簡單通過引用次數查詢的。後繼是真實塊而且指令大於1條的可以判斷它就是一個真實塊,而包含了返回語句的,比如說ret的,是一個返回塊,其餘的我們就都認為它是虛假塊。

在IDA外掛中我用四種顏色來表示,因為你可以手動調整這些結果,編譯引數不一樣或者說優化等級不一樣都會產生一些不一樣的結果,所以有的時候需要我們手動調整一下這個結果。

那在這裡,麒麟能幹什麼呢?剛才的一個議題說道量子執行混淆最大的特點是因為你不知道上下文,所以你不知道它接下的語句到底是幹什麼,但麒麟就能知道這個上下文,因為它能模擬執行,當前程式是幹什麼自然都知道。所以,在識別出各種塊之後,需要用麒麟帶著上下文尋找之前真實的控制流。

具體怎麼用麒麟框架呢?首先用部分執行和快照,我們先從函式頭開始儲存快照之後,從任意一個真實塊的起始開始執行,如果遇到分支就用強制執行各執行一次,直到遇到返回塊或者另一個真實塊停止,這樣我們就找到了原來程式控制流程裡面的一條路徑。接下來我們記錄下這條路徑,再恢復快照到剛才的狀態,然後再到下一個真實塊去找,找到所有的真實路徑。

此外,這裡面我們是需要Hook記憶體讀寫來跳過對堆的讀寫的,因為我們知道很多時候我們會去讀寫堆,或者全域性變數可能在堆上,要把這些讀寫遮蔽掉。
最後,我們再通過Keystone來patch,把原來的函式給patch掉,右邊就是我們反混淆之後的結果,可以看到只保留了真實塊和返回塊,黃色的是第一個塊,是設定堆疊的,不能刪了。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

這裡會有一些細節或者說難點。第一,真實塊內部是有外部函式呼叫的。第二,不同架構的條件指令也是有區別的。我們這個反混淆可以支援x86,也可以支援ARAM也就是ARM64,我們的解決方法是用IR。其實可以說一下,剛剛說過LLVM是有IR的,OLLVM是一個Pass,它在IR上進行操作,也就是說從LLVM IR到彙編再到IR,實際上它的邏輯是有一定的等價性的,所以我們可以通過IR去尋找一些固定的Pattern。

我們的具體實現是使用了IDA 7.1引入的微碼,實際上就是一個IR。我們通過微碼直接識別函式呼叫,然後設定PC跳過,就是我們剛剛說的Register API,把這些跳過。同時我們也會通過匹配一些微碼特徵來避免硬編碼識別不同架構的條件指令。

2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

比如說右邊是一個CSER,它是一個條件選擇指令,類似我們在x86常見的comve,下面就是你看到它在同一個地址生成了4條指令,這就相當於微碼用4條指令表示原來的一條指令。其實這在x86或者是其它的架構上都是類似的。

接下來就是用視訊給大家演示一下這個效果。首先原來的函式,可以看到相當平坦,所以叫平坦化。右邊是真實邏輯,這個時候直接按F5這個邏輯是沒法看的,這個邏輯有一個大while一個大switch,但是可以找到一些原來的蛛絲馬跡,原來有一些邏輯是在裡面的。

接下來第一步是要設定一下麒麟,因為我們需要一個Rootfs和一個自定義指令碼,這裡是用的example script,因為我們並不需要裡面有太多的功能。

第一步自動分析,可以看到,這個藍色的就是我剛才說的分發塊,可以看到上面有很多的箭頭,因為它的引用次數最多。接著就可以看到所有後期只要超過一條指令,我們都識別為真實塊。

但是,實際上像旁邊的Jump Location 978只有一條指令被識別為虛假塊,但它也可以是真實塊。這個不影響,我們也可以手動去進行調整。

再往上看這個虛擬塊,因為是switch case,每一次跳轉都是一個不同的case,再往上可以看到最初退出的那個case,也就是我們剛剛說的返回塊。

這裡我會故意把它設成真實塊,來展示我們可以手動地去設定不同的基本塊,而且這個是不影響的,僅僅是為了結果好看一些。接下來通過一個選項稍等一會兒就可以看到,這個在patch。大家也看到左下角控制流在飛速變化,因為我們在把虛假塊消滅,同時把控制流改成真實控制流。

這裡可以看到,相當於反平坦化之後的結果,只有真實塊和虛假塊,這個時候再按F5就可以看到邏輯恢復成了跟右邊的邏輯基本一致的狀態。以上就是反平坦化的例子。



六.展望


最後一部分是展望。目前麒麟框架還是一個開發非常活躍的框架,我們以後第一,最急的是要底層模擬同步Qemu5支援更多的架構和指令集,比如說ARM64以後可能會少一些指令,因為現在的QEMU有一點老了。

第二,我們會繼續做Android Java層模擬和插樁。因為目前我們是在Native層做的,之後還會做iOS模擬的支援(目前只做了一半)。

第三,我們會繼續完善Windows的支援。因為大家知道Windows是一個黑箱,做這個真的是很痛苦,我們希望引入一些外部的程式碼搞這個東西,目前打算是通過One和Cigaren來做。

第四,我們還會去做智慧合約模擬、微控制器模擬以及arm mac的模擬。

最後大家有什麼想交流的可以來專案地址給我們提PR和issue。大家如果覺得我們的專案不錯,給我們點一個星也是非常歡迎的。

也非常謝謝看雪給我們的機會,謝謝大家的聆聽。


本屆峰會議題回顧


2020看雪SDC議題回顧 | 逃逸IE瀏覽器沙箱:在野0Day漏洞利用復現

2020 看雪SDC議題回顧 | LightSpy:Mobile間諜軟體的狩獵和剖析

2020 看雪SDC議題回顧 | DexVmp最新進化:流式編碼

2020 看雪SDC議題回顧 | Android WebView安全攻防指南2020

2020 看雪SDC議題回顧 | 生物探針技術研究與應用

2020 看雪SDC議題回顧 | 世界知名工控廠商密碼保護機制突破之旅

2020 看雪SDC議題回顧 | 敲開晶片記憶體保護的最後一扇“門”

2020 看雪SDC議題回顧 | 基於量子邏輯閘的程式碼虛擬(vmp)保護方案

……

更多議題回顧盡情期待!!



注意:關注看雪學院公眾號(ikanxue)回覆“SDC”,即可獲得本次峰會演講ppt!

其他議題演講PPT,經講師同意後會陸續放出,請大家持續關注看雪論壇及看雪學院公眾號!



2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗
- End -



2020 看雪SDC議題回顧 | 麒麟框架:現代化的逆向分析體驗

相關文章