文章目錄
- 寫在前面
- 一、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
-
庫檔案,lib
檔案-動态連結庫.so
-
檔案夾,存放簽名檔案META-INF
(摘要檔案)、MANIFEST.MF
(對摘要檔案的簽名檔案)、CERT.SF
(APK索引檔案目錄)、INDEX.LIST
( 儲存公鑰、加密算法等資訊)CERT.RSA
-
原始資源檔案,被原封不動打包,打包時會被賦予一個資源ID。有些apk會有res
檔案夾,存放的也是資源檔案,但打包時不會被賦予資源IDassets
-
配置檔案,會被編譯成二進制的XML檔案,需要用工具AXMLPrinter2.jar反編譯打開AndroidManifest.xml
-
,這裡面就是java源碼,需要轉成jar格式檢視classes.dex
-
編譯後生成,儲存的是一個資源索引表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打開