天天看點

android逆向工具與檔案分析寫在前面一、android逆向之工具二、相關檔案

文章目錄

  • 寫在前面
  • 一、android逆向之工具
  • 二、相關檔案
    • 1.zip解壓
    • 2.apktool反編譯
    • 3.adb連接配接

寫在前面

工欲善其事必先利于器,android安全測試主要有兩個方向:

(1)http/https流量分析

(2)逆向

流量分析跟web測試差不多,逆向第一步就是下下工具,看看apk檔案,學學android基礎知識

系統環境:win10+JDK8+python27

一、android逆向之工具

1.dex2jar dex->jar

dex檔案是由java位元組碼轉成的dalvik位元組碼

1.cmd視窗進入F:\Android\apktools\dex2jar-2.0

2.指令:d2j-dex2jar.bat classes.dex回車

3.完成後我們在F:\Android\apktools\dex2jar-2.0目錄下就會多了個classes-dex2jar.jar檔案,這個就是我們需要的jar檔案,接下來就是如何檢視java代碼了

2.jd-gui 檢視jar代碼,在dex2jar之後使用

然後用它打開classes-dex2jar.jar就可以了,如果apk經過混淆,那麼看到的都是a、b之類的。

3.Apktool

下載下傳apktool.jar,apktool.bat

不必放在

c://windows

中,可自己建目錄然後配置環境變量

//apk檔案跟apktool放在一個檔案夾中,反編譯apk,成功後目錄下會多出一個跟apk檔案同名的檔案夾
apktool d sieve.apk
           

4.adb (android debug brigde) 連接配接pc端與手機(或者模拟器)

(1)手機配置:解壓後配置環境變量

D:\AndroidTools\platform-tools_r29.0.4-windows\platform-tools

配好之後cmd運作adb檢視是否配置完畢

(2)模拟器配置:模拟器安裝目錄下有adb.exe,直接配置到環境變量path裡,例如逍遙模拟器:D:\Program Files\Microvirt\MEmu

用手機逆向需要root,是以還是推薦用模拟器

adb常用指令

//檢視已連接配接的裝置
adb devices
//連接配接裝置,-s選擇連接配接哪個裝置,當隻有一個裝置時不需要選擇裝置
adb shell
adb -s <devicename> shell
//上傳檔案
adb push <本地檔案><遠端路徑> 例:adb push d:\3.txt storage/sdcard
//下載下傳檔案
adb pull <遠端路徑><本地路徑> 例:adb pull storage/sdcard/3.txt d:\
//列印 Android 的系統日志:
adb logcat
//安裝應用,覆寫安裝是使用 -r 選項 
adb install [-r]
//裝置的狀态有 3 種,device , offline , unknown
device:裝置正常連接配接
offline:連接配接出現異常,裝置無響應
unknown:沒有連接配接裝置
           

5.Drozer android安全測試常用架構

drozer安裝

(1)jdk1.6+

(2)python2.7(必須是python2)

(3)drozer-2.4.4-py2-none-any.whl

(4)agent.apk

//安裝,進入/python27/Script/
python2 -m pip install drozer-2.4.4-py2-none-any.whl
//可能會提示安裝失敗,缺少一個資源,pip安裝那個資源即可
//連接配接模拟器,agent.apk拷到模拟器安裝
//檢視裝置,若無裝置,檢查agent是否打開開關
adb devices 
//端口轉發,連接配接pc和模拟器,drozer預設用端口31415
adb forward tcp:31415 tcp:31415 
//進入dz
python2 drozer console connect 
           

ps:我之前安裝的是

.msi

但是連接配接不上模拟器,後來裝了

.whl

,用python運作才成功,小夥伴們可以選擇更好的安裝方法,有壓縮包形式的,但好像不是官網上下的,我沒裝

dz指令

//檢索包的包名:
run app.package.list -f com.mwr.example.sieve
//檢視apk詳細資訊
app.package.info -a com.mwr.example.sieve
//識别攻擊面
run app.package.attacksurface com.mwr.example.sieve
//可導出的activity
run app.activity.info -a com.mwr.example.sieve
//啟動activity,不傳參,測試本地拒絕服務漏洞
run app.activity.start --component  com.mwr.example.sieve com.mwr.example.sieve.PWList
//擷取是exported狀态的services
run app.service.info -a com.mwr.example.sieve
//向某個服務發送資訊
run app.service.send com.mwr.example.sieve  com.mwr.example.sieve.CryptoService --msg  1 5 3
           

二、相關檔案

1.zip解壓

以sieve.apk為例,當作zip解壓之後可以看到以下檔案

.
+-- _lib
+-- _META-INF
|   +-- CERT.RSA
|   +-- CERT.SF
|   +-- MANIFEST.MF
+-- _res
+-- AndroidManifest.xml
+-- classes.dex
+-- resources.arsc
           
  1. lib

    庫檔案,

    .so

    檔案-動态連結庫
  2. META-INF

    檔案夾,存放簽名檔案

    MANIFEST.MF

    (摘要檔案)、

    CERT.SF

    (對摘要檔案的簽名檔案)、

    INDEX.LIST

    (APK索引檔案目錄)、

    CERT.RSA

    ( 儲存公鑰、加密算法等資訊)
  3. res

    原始資源檔案,被原封不動打包,打包時會被賦予一個資源ID。有些apk會有

    assets

    檔案夾,存放的也是資源檔案,但打包時不會被賦予資源ID
  4. AndroidManifest.xml

    配置檔案,會被編譯成二進制的XML檔案,需要用工具AXMLPrinter2.jar反編譯打開
  5. classes.dex

    ,這裡面就是java源碼,需要轉成jar格式檢視
  6. resources.arsc

    編譯後生成,儲存的是一個資源索引表

2.apktool反編譯

apktool反編譯apk後生成以下檔案,檔案結構類似當作zip打開時的結構,但是

AndroidManifest.xml

已經經過反編譯,可直接檢視

smail

檔案,Dalvik的寄存器語言

.
+-- _lib
+-- _original
|	+-- _META-INF
|	|   +-- CERT.RSA
|	|   +-- CERT.SF
|	|   +-- MANIFEST.MF
	+-- AndroidManifest.xml
+-- _res
+-- _smali
+-- AndroidManifest.xml
+-- apktool.yml
           

3.adb連接配接

看apk檔案的資料

adb shell
cd /data/data/com.mwr.example.sieve

//sieve包有以下目錄
+-- _cache
+-- _code_cache
+-- _databases
+-- _lib
           

存放重要資料的是

databases

檔案夾,打開

.db

字尾檔案需要

sqlite3

,需要root權限

sqlite3 database.db
           

逍遙模拟器沒有sqlite3,會報錯

/system/bin/sh: sqlite3: not found
           

可以把

.db

檔案拖出來在pc端打開

pc端安裝 sqliteExpert

//找到檔案位置後退出shell連接配接,在本地執行adb指令
adb pull /data/data/com.mwr.example.sieve/databases/ d:\data
//在d:\data下找到檔案,拖進sqliteExpert打開
           

繼續閱讀