抓包線上apk

背景

Android 7.0以上手機不再信任用戶證書,如果需要抓包則需要將手機root,將抓包工具的證書放入系統根證書目錄下,此操作比較複雜。

另外一種則是反編譯apk、配置清單文件networkSecurityConfig、重新打包apk;

下面以Soul app爲例:

相關工具

ApkToo獲取:

  1. 下載.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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章