背景
Android 7.0以上手機不再信任用戶證書,如果需要抓包則需要將手機root,將抓包工具的證書放入系統根證書目錄下,此操作比較複雜。
另外一種則是反編譯apk、配置清單文件networkSecurityConfig、重新打包apk;
下面以Soul app爲例:
相關工具
- ApkTool
- Charles
ApkToo獲取:
- 下載.jar包,並將
jar
文件名修改爲apktool.jar
ApkTool官方提供了一個shell腳本配合
.jar
包,創建apktool.sh
文件,並將腳本代碼內容複製到apktool.sh
中,並使用如下命令賦予文件執行權限$ chmod +x apktool.sh
反編譯
使用ApkTool反編譯Soul app
$ java -jar apktool.jar d ./xxx.apk
或使用官方腳本
apktool.sh d ./xxx.apk
在使用 apktool 中遇到的問題
I: Using Apktool 2.4.1 on xxx.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Users\Administrator\AppData\Local\apktool\framework\1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Baksmaling classes.dex...
I: Baksmaling classes2.dex...
I: Baksmaling assets/A3AEECD8.dex...
Exception in thread "main" org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile: Not a valid dex magic value: cf 77 4c c7 9b 21 01 cd
at org.jf.dexlib2.util.DexUtil.verifyDexHeader(DexUtil.java:93)
at org.jf.dexlib2.dexbacked.DexBackedDexFile.getVersion(DexBackedDexFile.java:111)
at org.jf.dexlib2.dexbacked.DexBackedDexFile.<init>(DexBackedDexFile.java:78)
at org.jf.dexlib2.dexbacked.DexBackedDexFile.<init>(DexBackedDexFile.java:138)
at org.jf.dexlib2.dexbacked.ZipDexContainer$1.getDexFile(ZipDexContainer.java:181)
at brut.androlib.src.SmaliDecoder.decode(SmaliDecoder.java:90)
at brut.androlib.src.SmaliDecoder.decode(SmaliDecoder.java:39)
at brut.androlib.Androlib.decodeSourcesSmali(Androlib.java:96)
at brut.androlib.ApkDecoder.decode(ApkDecoder.java:164)
at brut.apktool.Main.cmdDecode(Main.java:170)
at brut.apktool.Main.main(Main.java:76)
Press any key to continue . . .
解決方案
$ java -jar apktool.jar d --only-main-classe ./xxx.apk
或者
$ ./apktool.sh d --only-main-classe ./xxx.apk
證書導出
證書導入
將證書導入./raw文件中
配置信任證書
在Manifest.xml中添加android:networkSecurityConfig
屬性(大部分app的Manifest.xml已配置)
<application ... android:name="com.***.***.***"
android:networkSecurityConfig="@xml/network_security_config" ...>
</application>
在res/xml下修改network_security_config.xml文件
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system"/>
<certificates src="user"/>
<certificates src="@raw/charles"/>
</trust-anchors>
</base-config>
</network-security-config>
重新打包apk
java -jar apktool.jar b Soul/ -o my.apk
或者
./apktool.sh b Soul/ -o my.apk
簽名apk
生產簽名文件sample.jks
keytool -genkey -alias aliasName -keyalg RSA -validity 20000 -keystore sample.jks
簽名apk
jarsigner -verbose -keystore sampke.jks -storepass $(你的storePassword) -keypass $(你的keyPassword) ./my.apk aliasNames
安裝apk
$ adb install -r my.apk
參考
記一次APP抓包破解
ApkCrack 一鍵生成支持 Android 7.0 抓包的 apk
right way to add paths to path