天天看點

Angr及庫函數識别學習啟動篇

本部落格由閑散白帽子胖胖鵬鵬胖胖鵬潛力所寫,僅僅作為個人技術交流分享,不得用做商業用途。轉載請注明出處,未經許可禁止将本部落格内所有内容轉載、商用。

      最近好像摸魚摸得有點嚣張了(做了半個月比賽還拿到了參與獎,嘻嘻),畢設從開題到現在就沒怎麼做過,在這樣下去就要被導師打了,自己還誇下了6月底前有初步結果的海口,摸魚是摸不成了,進入高速學習模式吧。

一、什麼是Angr

      Angr是一個二進制代碼分析工具,能夠自動化完成二進制檔案的分析,并找出漏洞。他是一個能夠處理多種架構為禁止檔案的python架構,并且提供了符号執行、控制流回複、自動ROP構造、自動二進制檔案修補、自動exploit生成等多種靜态分析。

官方提供的文檔參考:https://legacy.gitbook.com/book/angr/angr/details

官方首頁: http://angr.io/index.html

同時推薦官方的讨論組Slacker: http://angr.io/invite.html

二、什麼是庫函數識别

     我們在程式設計中或多或少都會使用到第三方或是SDK中的庫,Java和Android是以jar包的形式存在,windows上使用的是lib和dll,linux上面使用的so會比較多。這些庫函數都是經過編譯的二進制代碼,而我們在調用函數時,直接出現庫函數的展開形式,不同編譯器以及不同架構編譯出來的指令不相同,我們在進行二進制分析過程中,正确識别庫函數将大大減少分析的工作量。庫函數識别工具,在IDA中,使用的是FLIRT,FLIRT使用簽名進行庫函數識别,經過實際測驗,識别率過低,同時需要人工标注大量沖突的簽名,這使得靜态分析自動化程度不高。而在使用Diaphora的過程中,他的識别效果仍然不足以支撐我們進行更準确地分析,是以我們需要對這些工具進行改進。上述兩個工具都是以IDA插件的形式存在的,我們需要找到一個接口對接Angr。此時Diaphora作為python開發的工具,成為目前的首選。

FLIRT: https://www.hex-rays.com/products/ida/tech/flirt/index.shtml

Diaphora: https://github.com/joxeankoret/diaphora

三、部落格的更新架構

      目前的想法分為三個部分:

①Angr的執行個體分析:使用Angr分析二進制檔案,學習Angr的分析流程以及代碼編寫流程;

②Angr源碼分析:知其然而知其是以然,我們需要了解Angr源碼,深入探究其分析的内幕,同時為自己的研究工作做好優化;

③庫函數簽名&識别算法分析及源碼分析:這一部分目前以解讀Diaphora源碼為主,中間穿插着論文、部落格、其他工具的分析工作。

      本内容一周至少更新兩期,順序可能會打亂,但是我會将文章分到對應的專欄中,如有疑問,請大家評論交流。同時做好監督工作,避免自己因為摸魚而忘記更新。

繼續閱讀