教程導航
- Android Apk反編譯系列教程(一)如何反編譯APK
- Android Apk反編譯系列教程(二)APK重打包
- Android Apk反編譯系列教程(三)Android Studio除錯smali程式碼
背景簡介
APK反編譯分析的時候,難免需要對APK進行重打包來輔助反編譯的分析。比如通過重打包給APK新增可除錯功能或者新增可抓https包的功能,都需要應用到重打包的技術。
操作步驟
(一)APKTool反編譯
// 清除framwork,避免framwork過期,拉取最新的framwork資源
apktool empty-framework-dir --force
// 開始反編譯
apktool d -f org.fedorahosted.freeotp.apk
複製程式碼
- 如果出現resourceId找不到等framework相關的問題,詳情參見:ibotpeaches.github.io/Apktool/doc…
(二)修改反編譯的資原始碼或者smali程式碼
以反編譯的包支援debug和支援charles https抓包為例
(1)修改manifest
<application
// 支援debug
android:debuggable="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
// 支援https抓包
android:networkSecurityConfig="@xml/network_security_config"
android:supportsRtl="true"
android:theme="@style/AppTheme">
複製程式碼
(2)在res目錄下新建xml資料夾,新建network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<debug-overrides cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</debug-overrides>
</network-security-config>
複製程式碼
(三)重新編譯APK
(1)apktool編譯:編譯修改後的程式碼生成新的apk
apktool b org.fedorahosted.freeotp -o new.apk
複製程式碼
(3)zipalign對齊:將新生成的apk對齊
- 引數詳解參見:developer.android.com/studio/comm…
- 4:按照4個位元組的邊界對齊
zipalign -f -v -p 4 new.apk new_zip_align.apk
複製程式碼
(4)apksigner簽名:只有簽名後的apk才可以安裝
- --ke:簽名檔案
- --ks-key-alias:簽名檔案alias
- --ks-pass pass:112112:簽名檔案密碼
- pass:112112 (pass一定要,指的是顯示指定密碼),詳情參見:developer.android.com/studio/comm…
apksigner sign --ks /Users/weishenhong/Desktop/wsh/code/android/android_learning/app/keystore --ks-key-alias key0 --ks-pass pass:112112 --out rebuild_signed.apk new_zip_align.apk
複製程式碼
(5)安裝apk
adb install -r -t rebuild_signed.apk
複製程式碼
至此,你重打包的apk就成功安裝了。
相關連結
- zipalign文件:developer.android.com/studio/comm…
- www.jianshu.com/p/e1e2fd05b…
- apksigner文件:developer.android.com/studio/comm…