日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開(kāi)發(fā)Android → APK靜態(tài)分析工具androguard的部署使用和原理分析

      APK靜態(tài)分析工具androguard的部署使用和原理分析

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:西西整理時(shí)間:2013/11/22 23:03:00字體大小:A-A+

      作者:西西點(diǎn)擊:560次評(píng)論:9次標(biāo)簽: 靜態(tài)分析

      • 類(lèi)型:反編譯(譯逆工程)大小:85.6M語(yǔ)言:中文 評(píng)分:7.2
      • 標(biāo)簽:
      立即下載

      Android應(yīng)用程序分析主要有靜態(tài)分析和動(dòng)態(tài)分析兩種,常見(jiàn)的靜態(tài)分析工具是Apktool、dex2jar以及jdgui。今天突然主要到Google code上有個(gè)叫做androguard的工具,提供了一系列的Apk以及dex、odex、arsc等文件的分析處理功能。很值得學(xué)習(xí)和分析。

      androguard項(xiàng)目主頁(yè):http://code.google.com/p/androguard/

      androguard是基于python的,將Apk文件中的dex文件,類(lèi),方法等都映射為python的對(duì)象,項(xiàng)目主頁(yè)介紹了androgurad的特性,簡(jiǎn)單來(lái)說(shuō),androguard提供了apk文件的反向工程,惡意軟件檢測(cè)和威脅評(píng)估,還有程序行為可視化。功能相當(dāng)豐富,是分析apk的好幫手。

      androguard的部署配置

      androguard是基于python的,所以無(wú)論windows,linux還是mac os,只要能運(yùn)行python的都可以運(yùn)行androguard。

      我的軟件環(huán)境是Ubuntu12.04 64位、java 1.6、 python 2.7.

      androguard的安裝可以參考Wiki,我基本按照這個(gè)步驟進(jìn)行,有些地方是需要注意的。

      1. 獲得androguard。 我是從Downdload里直接下載的zip包,并沒(méi)有采用hg工具clone,也沒(méi)有使用pre-installed Virtual Machine。將zip包放到工作目錄下,解壓縮。

      2. 安裝所需的python模塊。 為了能夠使用所有的功能,需要安裝很多的python模塊,例如androdd.py需要pydot來(lái)生成圖片,androrisk.py需要pyfuzzy,akpiewer.py需要networkx。這些模塊有的可以直接apt-get install安裝,有些找不到,可以直接百度搜索,然后下載zip包解壓縮后執(zhí)行python setup.py install來(lái)安裝。具體需要的模塊請(qǐng)參考Wiki,安裝不全的也可以在運(yùn)行時(shí)根據(jù)錯(cuò)誤提示再進(jìn)行安裝。

      3.in elsim/elsign/formula/Makefile: add the appropriate include directory where to find muParser.h. For example:

      CFLAGS += -I/usr/include/muParser

      in elsim/elsign/libelsign/Makefile, add the appropriate include directory for muParser.h and python. Example:

      CFLAGS += -I/usr/include/muParser -I/usr/include/python2.7

      4. 進(jìn)入androguard目錄,執(zhí)行make。

      至此,androguard的安裝工作完成,androguard目錄下的所有py文件都是一個(gè)工具,用-h查看幫助,例如:

      androguard的使用

      上圖中所有綠色的py文件都是可用的工具,下面我介紹說(shuō)明常用到的幾個(gè)。

      androcsign.py:

      androcsign.py用于添加apk文件的簽名信息到一個(gè)數(shù)據(jù)庫(kù)文件中。Androguard工具目錄下的signatures/dbandroguard文件為收集的惡意軟件信息數(shù)據(jù)庫(kù)。在開(kāi)始使用androcsign.py前需要為apk文件編寫(xiě)一個(gè)sign文件,這個(gè)文件采用json格式保存。前文提到次工具可以檢測(cè)惡意程序,是因?yàn)橛袗阂獬绦虻暮灻麕?kù),是signatures目錄下的dbandroguard文件,此目錄中的.sign文件為提供了json簽名文件的范例,我看這個(gè)文件只能是手動(dòng)去寫(xiě)了。

      json范例:

      [
          {
              "SAMPLE":"apks/5aff5198c2fe5798bd7f1519dab0cd4ee737d5d2.apk"
          },
          {
              "BASE":"AndroidOS",
              "NAME":"Plankton",
              "SIGNATURE":[
                  {
                      "TYPE":"METHSIM",
                      "CN":"Lcn/plankton/device/android/service/AndroidMDKService$SNChecker;",
                      "MN":"isRegistered",
                      "D":"()Z"
                  }
              ],
              "BF":"0"
          }
      ]

      SAMPLE指定需要添加信息的apk文件。BASE指定文件運(yùn)行的系統(tǒng),目前固定為AndroidOS。NAME是該簽名的名字。SIGNATURE為具體的簽名規(guī)則,其中TYPE用來(lái)指定簽名的類(lèi)型,METHSIM表示的是方法的簽名,此外還有CLASSSIM表示為類(lèi)簽名;CN用來(lái)指定方法所在的類(lèi);MN指定了方法名;D指定了方法的簽名信息。BF用來(lái)指定簽名的檢測(cè)規(guī)則,可以同時(shí)滿足1條或多條,例如,使用SIGNATURE定義了3條簽名規(guī)則,當(dāng)軟件的代碼同時(shí)滿足規(guī)則1或規(guī)則2且滿足規(guī)則3時(shí)說(shuō)明樣本符合檢測(cè)條件,那么BF可定義為“"BF" : "(0 or 1) and 2"”。

      在Androguard目錄下新建一個(gè)apks目錄,將apk復(fù)制進(jìn)去,然后將plankton.test.sign文件復(fù)制到Androguard的signatures目錄下,在終端提示符下執(zhí)行下面的命令:

      ./androcsign.py -i signatures/plank.test.sign -o signatures/dbandroguard

      即可將簽名信息添加進(jìn)數(shù)據(jù)庫(kù)。

      -l選項(xiàng)可以將數(shù)據(jù)庫(kù)中的信息展示出來(lái)

      androgexf.py

      androdd.py用來(lái)生成apk文件中每個(gè)類(lèi)的方法的調(diào)用流程圖。可以選擇生成.dot格式的,另外還可以在PNG和JPG中的一種,其中DOT是一種圖形描述語(yǔ)言,使用次方法要注意的一點(diǎn)是Wiki上提示的選擇圖形格式時(shí)“-f PNG”使用的大寫(xiě)字母,實(shí)際運(yùn)行時(shí)發(fā)現(xiàn)會(huì)報(bào)錯(cuò)。如下圖:

      可見(jiàn)選擇png還是jpg會(huì)和write拼成一個(gè)函數(shù),而這個(gè)函數(shù)是小寫(xiě)的,所以必須用下寫(xiě)的參數(shù)才行。

      這個(gè)功能可以在-o指定的目錄下生成控制流圖,從目錄結(jié)構(gòu)可以看出對(duì)每個(gè)類(lèi)的每個(gè)方法會(huì)創(chuàng)建一張圖,圖樣如下所示:

      androgexf.py

      androgexf.py用來(lái)生成APK的GEXF格式的圖形文件。該文件可以使用Gephi查看。Gephi軟件可以改變圖形的布局,顯示和隱藏Label,調(diào)節(jié)圖形線條粗細(xì)和字體大小,也可以選擇只查看數(shù)據(jù),更多功能留給讀者自行發(fā)現(xiàn)。

      androxgmml.py

      androxgmml.py用來(lái)生成apk/jar/class/dex文件的控制流程及功能調(diào)用圖,輸出格式為xgmml。此格式的圖可以使用Cytoscape軟件打開(kāi)查看。

      androapkinfo.py

      androapkinfo.py用來(lái)查看apk文件的信息。該工具會(huì)輸入apk文件的包、資源、權(quán)限、組件、方法等信息,輸出的內(nèi)容比較詳細(xì)。

      androdiff.py

      androdiff.py用來(lái)比較兩個(gè)apk文件的差異。-i選項(xiàng)后接兩個(gè)文件作為參數(shù)。

      前幾天參加的第十二屆軟件與應(yīng)用學(xué)術(shù)會(huì)議上,北大的一篇檢測(cè)Repackage應(yīng)用的文章分為兩個(gè)步驟,首先檢測(cè)應(yīng)用和官方應(yīng)用是否相似,然后看簽名是否相同,他們檢測(cè)相似性是用兩個(gè)應(yīng)用的變量和每個(gè)變量出現(xiàn)次數(shù)的矩陣來(lái)比較的,我想這個(gè)diff工具也可以提供一些參考,還有androsim.py,這個(gè)就是計(jì)算兩個(gè)APK的相似度。

      androrisk.py

      檢測(cè)應(yīng)用程序的風(fēng)險(xiǎn),使用比較簡(jiǎn)單,輸出如下:

      root@shuai-Inspiron-One-2320:~/DevTools/androguard-1.9# ./androrisk.py -d ../ApkForTest/
      ../ApkForTest/8f7bf37face686ac456c21dc1dad132f077ce626.apk
          RedFlags
              DEX {'NATIVE': 1, 'DYNAMIC': 0, 'CRYPTO': 0, 'REFLECTION': 0}
              APK {'DEX': 0, 'EXECUTABLE': 0, 'ZIP': 0, 'SHELL_SCRIPT': 0, 'APK': 0, 'SHARED LIBRARIES': 0}
              PERM {'PRIVACY': 6, 'NORMAL': 2, 'MONEY': 0, 'INTERNET': 2, 'SMS': 0, 'DANGEROUS': 10, 'SIGNATUREORSYSTEM': 0, 'CALL': 0, 'SIGNATURE': 0, 'GPS': 0}
          FuzzyRisk
              VALUE 50.0
      ../ApkForTest/5aff5198c2fe5798bd7f1519dab0cd4ee737d5d2.apk
          RedFlags
              DEX {'NATIVE': 0, 'DYNAMIC': 1, 'CRYPTO': 0, 'REFLECTION': 1}
              APK {'DEX': 0, 'EXECUTABLE': 0, 'ZIP': 0, 'SHELL_SCRIPT': 0, 'APK': 0, 'SHARED LIBRARIES': 0}
              PERM {'PRIVACY': 3, 'NORMAL': 1, 'MONEY': 0, 'INTERNET': 1, 'SMS': 0, 'DANGEROUS': 8, 'SIGNATUREORSYSTEM': 0, 'CALL': 0, 'SIGNATURE': 0, 'GPS': 0}
          FuzzyRisk
              VALUE 86.6666666667

      androlyze.py

      androlyze.py與其它的py文件不同,它不是單一功能的腳本,而是一個(gè)強(qiáng)大的靜態(tài)分析工具,它提供的一個(gè)獨(dú)立的Shell環(huán)境來(lái)輔助分析人員執(zhí)行分析工作。

      在終端提示符下執(zhí)行“./androlyze.py -s”會(huì)進(jìn)入androlyze 的Shell交互環(huán)境,分析人員可以在其中執(zhí)行不同的命令,來(lái)滿足不同情況下的分析需求。androlyze.py通過(guò)訪問(wèn)對(duì)象的字段與方法的方式來(lái)提供反饋結(jié)果,分析過(guò)程中可能會(huì)用到3個(gè)對(duì)象:apk文件對(duì)象、dex文件對(duì)象、分析結(jié)果對(duì)象。這3個(gè)對(duì)象是通過(guò)androlyze.py的Shell環(huán)境(以下簡(jiǎn)稱(chēng)Shell環(huán)境)來(lái)獲取的。在Shell環(huán)境下執(zhí)行以下命令:

      也可以用一條命令:

      a, d, dx = AnalyzeAPK("./crackme0502.apk", decompiler="dad")

      其他的幾個(gè)命令就不再一一說(shuō)明了,嘗試幾次就都會(huì)了。

      androguard實(shí)現(xiàn)原理分析

      靜態(tài)分析的目標(biāo)無(wú)非是如下幾點(diǎn),APK文件列表,Manifest文件,dex文件,二進(jìn)制文件,資源文件,權(quán)限,四大組件,敏感API,尤其是LoadLibrary,dexClassLoader,Reflection等。

      androguard第一步是對(duì)APK,dex以及class等類(lèi)型的文件反向工程。實(shí)際上我沒(méi)有找到到底是哪里調(diào)用的,還在挖掘中..

      整個(gè)androguard項(xiàng)目結(jié)構(gòu)中看,第一曾目錄下的所有py文件都是可以直接使用的工具,這些工具所調(diào)用的基礎(chǔ)功能實(shí)現(xiàn)在androguard目錄下,主要在core下,其他目錄主要是測(cè)試、示例和支持的功能。

      考慮APK的結(jié)構(gòu),可以看作一種層級(jí)結(jié)構(gòu),APK中含有各種文件,dex文件中包含多個(gè)類(lèi),每個(gè)類(lèi)有包含多個(gè)方法,這樣從上往下是一種樹(shù)狀結(jié)構(gòu),每一層都可以用一個(gè)類(lèi)來(lái)表示。

      其中androgen.py中的Androguard是頂層的對(duì)象,在analysis.py中進(jìn)行大量的處理,最終可以方便的從一個(gè)APK對(duì)象找到其下的類(lèi),再找到所有的方法,通過(guò)方法也可以找到它所屬的類(lèi),使得一個(gè)APK文件和一個(gè)相關(guān)聯(lián)系的類(lèi)系統(tǒng)對(duì)應(yīng)起來(lái)。

      有了APK文件所有可以讀取到的信息,剩下的工作就相對(duì)容易一些。

      要獲得程序的權(quán)限,只需要調(diào)用接口將已經(jīng)保存好的權(quán)限信息輸出。想檢測(cè)APK是否有調(diào)用本地方法,動(dòng)態(tài)加載和反射的動(dòng)作,只需要檢查方法里是否有LoadLibrary,dexClassLoader,Reflection這些。

      生成調(diào)用的圖的部分還沒(méi)完全看懂,初步的瀏覽代碼看到掃描反編譯后方法里的語(yǔ)句,如果有調(diào)用其他方法,則被調(diào)用的方法就看作原方法的孩子,就會(huì)有一條邊相連,其中androdd.py、androgexf.py和androxgmml.py生成的圖也不盡相同,主要是結(jié)點(diǎn)選擇和邊選擇的層次粒度不想通,例如androdd.py將方法作為一個(gè)單元,考慮其中語(yǔ)句的控制流,比如invoke和if之類(lèi)的語(yǔ)句對(duì)程序流程造成的影響,而androgexf.py將APK看作一個(gè)整體,將方法之間的調(diào)用關(guān)系看作邊,androxgmml.py沒(méi)有太多關(guān)注,好像粒度細(xì)到每條dalvik指令,因此結(jié)點(diǎn)數(shù)也相當(dāng)?shù)亩唷?/p>

      風(fēng)險(xiǎn)評(píng)估的功能從輸出就可以看出些端倪,風(fēng)險(xiǎn)值的計(jì)算在risk.py文件中,評(píng)估的依據(jù)是權(quán)限、API和文件,為權(quán)限本身的dangerous, signatureOrSystem, signature和normal四種類(lèi)型分配不同的威脅值,同時(shí)將權(quán)限映射為資費(fèi),聯(lián)網(wǎng),短信,電話,隱私相關(guān)的幾種類(lèi)型,分配不同的威脅值,對(duì)部分API以及二進(jìn)制文件,共享庫(kù)文件等做類(lèi)似處理,最后整合計(jì)算出威脅值。我認(rèn)為這種方法是靜態(tài)檢測(cè)中的常用方法,但實(shí)際效果上看有靜態(tài)檢測(cè)本身的局限性,會(huì)有比較大的誤差。

      總結(jié):

      總得來(lái)說(shuō),我覺(jué)得androguard是一款不錯(cuò)的靜態(tài)分析工具,幾乎覆蓋了所有靜態(tài)分析的基礎(chǔ)工作,可以方便的獲取靜態(tài)分析需要的信息,這受益于將APK文件轉(zhuǎn)換為python的設(shè)計(jì)思想。另外將反向工程的部分信息可視化也對(duì)應(yīng)用分析帶來(lái)很大的幫助,惡意程序檢測(cè)和風(fēng)險(xiǎn)分析也是錦上添花的一筆。此工具中,保存惡意方法的簽名信息是一個(gè)很好的思路,很多時(shí)候一段惡意代碼重打包添加進(jìn)不同的應(yīng)用程序中,此時(shí)如果保存方法的簽名信息并據(jù)此檢測(cè)目標(biāo)程序,會(huì)將所有包含了這段方法的代碼檢測(cè)出來(lái),還能檢測(cè)出未來(lái)出現(xiàn)的添加此段代碼的惡意程序,如果用程序簽名的話就必須保存所有被添加惡意代碼的程序,而且對(duì)未來(lái)出現(xiàn)的程序沒(méi)有抵抗力,這點(diǎn)給了我啟發(fā)。

      androguard還不夠完善的地方是安裝過(guò)程有些復(fù)雜,花費(fèi)時(shí)間略長(zhǎng),這也和我不太熟悉python有關(guān),另外程序有些地方還有bug。但是瑕不掩瑜,如果能熟練運(yùn)用,可以在APK分析中更得心應(yīng)手。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過(guò)難過(guò)
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門(mén)評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(9)

        昵稱(chēng):
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)