安卓的文件作用
資源庫文件
可以理解為開發的時候需要的函數來源
jar包:和java差不多,SDK也就是有很多函數的jar包
aar包:可以包含如圖片類的資源
apk文件
最終產出就是apk文件,他可以用壓縮包打開
AndroidMainifest.xml:該文件是用來確定有哪些組件的類似於javaweb的web.xml
|-AXML文件是二進制文件,是由AndroidMainifest.xml生成而來是為了提高速度的
class.dex:打包后的運行程序(核心),可能有多個
|-odex是Dalvik虛擬機提高dex文件效率的優化后文件,與dex可互相轉換
|-oat是ART虛擬機提高dex文件效率的優化后文件,與dex可互相轉換
res:靜態資源如圖片樣式之類的依賴,包括組件的id值之類的信息,它將格式不同的資源整合統一
META-INF:包含防篡改的簽名
安卓編譯生成文件流程(怎么生成一個apk文件)
先將布局文件和AndroidMainifest.xml解析生成R.java
解析AIDL接口文件生成java文件
之后把所有生成的java文件來生成class文件
最后將class文件再次編譯成安卓虛擬機解析的dex文件
將資源打包生成apk,再進行對其處理加上簽名
安卓安裝流程(怎么解析一個apk文件)
安卓它系統自身就有一堆activity,安裝的時候
先解析apk中的AndroidMainifest.xml,獲取包名,logo之類的信息
系統這時候會檢測該軟件是否安裝,沒有安裝的話,安裝界面會彈出信息,和安裝,取消的按鈕
點擊安裝檢測是否有安裝權限,之后就進行安裝
最終進行簽名,校驗
導入證書
好像安卓7.0以上需要系統證書才能抓https,而burp官網交的方法是安裝用戶證書就不行,可以通過下面方法安裝系統證書,需要root
下載burp證書(導出是der格式,安卓需要pem格式),按照以下方法生成證書,然后導入到系統證書
openssl x509 -inform DER -outform PEM -in cacert.der -out cacert.pem
openssl x509 -subject_hash_old -in cacert.pem
得到一個hash 比如:9a5ba575
mv cacert.pem 9a5ba575.0
adb root
adb disable-verity
adb reboot
adb root
adb remount
然后上傳為系統證書
adb push 9a5ba575.0 /system/etc/security/cacerts/
打開手機瀏覽器會提示證書不信任?可以用xposed的JustTrustMe和TrustMeAlready試試
https://github.com/Fuzion24/JustTrustMe/releases/tag/v.2
https://github.com/ViRb3/TrustMeAlready/releases/tag/v1.11
此時還不信任的話,可能安卓版本過高,建議刷機降級orz
工具安裝
drozer
用來抽離,檢測app的組件的
首先手機端運行apk
https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk
python2安裝
https://github.com/mwrlabs/drozer/releases/download/2.4.4/drozer-2.4.4-py2-none-any.whl
sudo pip2 install drozer-2.4.4-py2-none-any.whl -i https://pypi.python.org/simple
sudo pip2 install twisted
手機連接電腦,電腦運行
adb forward tcp:31415 tcp:31415
作用是將PC端31415端口的數據,轉發到手機端31415端口,從而實現PC和手機的通信
然后手機打開app,電腦運行框架
drozer console connect
frida
主要是用來hook程序(加了殼也能hook住函數)和脫殼用
手機配置
下載
https://github.com/frida/frida
找到合適的版本,一般手機都是
frida-server-14.1.2-android-arm64.xz
模擬器就選x86
frida-server-14.1.2-android-arm.xz
frida-server-14.1.2-android-x86.xz
解壓,重命名放入手機中,並賦予執行權限
mv frida-server-14.1.2-android-arm64 frida-server
adb push frida-server /data/local/tmp/
adb root
adb shell
chmod 777 /data/local/tmp/frida-server
電腦配置
frida-dexdump是用來脫殼的
pip3 install frida frida-tools frida-dexdump
使用時(adb連接)
手機運行
adb root
adb shell
/data/local/tmp/frida-server
電腦運行
frida-ps -U
xposed
xposed是用來hook的框架,hook我們app不太好用了,但可以使用一些插件還是有必要的
安卓5.0以下
https://repo.xposed.info/module/de.robv.android.xposed.installer
安卓5.0~8.0
https://forum.xda-developers.com/t/official-xposed-for-lollipop-marshmallow-nougat-oreo-v90-beta3-2018-01-29.3034811/
現在的手機基本都是安卓9,安卓10了,在安卓8.1以上不能直接安裝,可以使用以下辦法
https://www.bilibili.com/read/cv5068761/
這里以可以vpn代理的root手機為例
手機安裝 酷安應用商店
https://www.coolapk.com/
手機酷安應用中安裝Magisk Manager
手機掛上代理
進入Magisk 直接下載安裝Magisk,安裝后重啟
重啟掛上代理
進入Magisk選擇模塊,搜索Riru(作者Rikka)下載,但是這里有問題,最新版的Riru-EdXposed不兼容,所以要下載老版本的Riru
https://github.com/RikkaApps/Riru/releases(目前建議v21.3)
下載好后把zip通過adb傳到手機,或者通過QQ傳到手機都可以
手機在Magisk模塊中最上面選擇從本地安裝,選擇下載的包,即可(暫時不要更新)
安裝完后在手機Magisk再安裝 Riru-EdXposed,需要代理
安裝EdXposed Manager
https://github.com/ElderDrivers/EdXposedManager/releases
重啟即可
drony
用於代理的工具,有些流量不走wifi的代理,就通過該工具統一走全局代理,全局代理地址為burp的監聽端口
https://files.cnblogs.com/files/lulianqi/Drony_102.apk
后續待更新
脫殼技巧
查殼
ApkScan-PKID.jar
該工具可以查國內的加殼工具
https://github.com/QuanGe/QuanGe.github.io/raw/master/ApkScan-PKID.jar
脫殼
frida-dexdump
該工具脫免費殼可以的,企業版殼一般脫不掉,手機上可以脫,模擬器會出問題脫不掉(MUMU mac版)
adb連接手機
adb root
adb shell
手機運行frida-server
cd /data/local/tmp
./frida-server
電腦運行
找到需要脫殼的程序
frida-ps -U
比如找到了com.example.myapp
frida-dexdump -n com.example.myapp
此時會生成很多dex文件,一個個翻吧~
逆向分析工具
52上有很多工具
這里推薦jeb和jadx
https://down.52pojie.cn/Tools/Android_Tools/
直接用工具打開apk即可,如果發現里面的代碼有加載so之類的文件,內容也看不懂估計就是加殼了的