1. 程式人生 > >靜態分析工具androguard

靜態分析工具androguard

雖然在windows端免費版的IDA、VTS等工具都可用來靜態分析,但相對來說這些工具用來人工分析在合適不過,但對於專案開發,相對來說都忽視很好擴充套件。而在androguard卻很適合進行擴充套件或者移植成為自己專案的某一模組,雖然早有耳聞,但也最近才動手體驗幾把。當然,androguard也被很多人再次開發過了,包括一些提供上傳入口的檢測網站,靜態分析部分感覺都有使用該模組,很多靜態分析工具都基於它,其中還有一款ApkInspector也很出名。

androguard主要用來進行靜態分析,其預設採用ded作為反編譯的軟體,同時提供了很多模組供分析人員使用。專案地址 https://code.google.com/p/androguard/

 安裝方法見wiki部分。如果覺得麻煩可以下載santoku,該系統是訂製Ubuntu,主要用於移動裝置,包括很多分析工具集合androguard、drozer也在其中,類似於kali。

這次主要是對其中幾個模組進行了初步使用:

  1. androrisk.py 該模組用於分析apk危險級別
  2. androapkinfo.py該模組分析apk列出其中的檔案型別、許可權、4大元件、是否NDK反射等資訊
  3. androaxml.py該模組用於展示apk androidmanifest.xml
  4. androgexf.py該模組生成函式呼叫圖
  5. apkviewer.py該模組生成指令級別的呼叫圖
  6. androlyze.py該模組為互動分析環境
下面篇幅採用一個樣本作為分析目標以展示androguard初級使用 1.首先我們先使用androrisk.py快速判斷該應用是否可以,利用如下命令./androrisk.py -i ./sample.apk

可以看出該用本 dex中存在反射 許可權中有5個為隱私許可權 2個與扣費有關1個聯網 3個簡訊等等 而這些許可權是根據其自身的配置檔案進行分類,位於./tools/permissions/AndroidManifest.xml

2.我們根據簡單的特徵可以判斷出該樣本確實許可權很大,進而可以採用androapkinfo.py以及androaxml.py進行分析

如下命令./androaxml.py -i ./sample.apk                                 ./androapkinfo.py -i ./sample.apk > ./sample.apk.info

前者就只是androidmanifest.xml的展示而後者內容較多,最好重定向到文字中vim檢視,內容列舉如下(除了許可權、檔案以外還多瞭如下):


當我看到羅列的資訊後突然覺得好想有些檢測網站的結果也類似,所以估計是整合進了專案裡的,列舉內容還算詳細可以用來參考

3.有時候我們需要分析函式呼叫流程,那androgexf.py就用上了 ./androgexf.py -i ./sample.apk -o ./sample.apk.gexf 

開啟後選擇流程Yifan Hu 執行生成分析圖:


從資料資料中進行查詢,我們要查詢KC2011這個類的呼叫流程,在資料資料中搜索KC2011然後右鍵選擇之後,點選概覽就出現了流程:


之後自己拖動一下,函式流程就清晰的出來了,但是我有一些問題,這個好像只判斷拿了重這個函式呼叫了那些函式,呼叫順序好像沒有體現,看著有點憂傷。。。不知道有人能否指點


命令如下:./apkviewer.py -i ./sample.apk -o ./sample

該模組生成了很多圖片,對應於每一個類,當然也有一個彙總的呼叫關係圖,一樣可以用gephi開啟,雖然看著也一樣很憂傷,就不截圖了。但是該模組實現的呼叫流程用來做後期改進還是一個不錯的選擇

5.剩下就是androlyze.py互動模組了命令./androlyze.py -s 

進入互動視窗後,我們可以採用apk,d,dex = AnalyzeAPK("./sample.apk")

分別獲得獲得apk物件、dex物件、分析結果物件

對於這些物件的操作.之後tab可以列舉出對應的很多方法,d,dex也類似具體大家可以去了解


例如apk物件就可以通過get_xxxx獲取對應的資訊包括檔案,許可權,元件等等,其實這些函式正式androguard工作的核心類,有興趣的可以研究下./androguard/core下的程式碼

x

除了以上列出來的模組,還有幾個模組也挺有意思的:androsign.py androcsign.py 一個用於檢測apk資訊是否在資料庫中,一個用於將apk一些特徵資訊加入資料庫中,類似特徵庫,而androdiff.py用來比較兩個APK間的差異