我們知道安卓系統基于穩定性、維護便利、性能優化等原因并未對原生系統apk進行混淆加密處理,由此就方便了我們反編譯替換原生應用。
首先我們設備需要是root后的,我是使用的是小米5,刷的24.3版本的面具。
首先我們需要取系統apk,這里以計算器應用為例:
adb pull /system/app/Calculator/Calculator.apk ./calculator.apk
保存到本地電腦后開始反編譯流程:
1. 反編譯:
apktool d calculator.apk -o calculator
2. 修改源文件:
這里可以自由發揮,修改資源文件或者簡單的邏輯都可以。
3. 重新打包:
apktool b GwmSystemUI -o UI_NEW.apk
4. 對齊APK
zipalign -v 4 unsigned_app.apk aligned_app.apk
5. 命令簽名(助手只能簽名v1,apksigner命令要求JDK是1.8,sdk是30以上)
# 僅使用V1簽名
apksigner sign --v1-signing-enabled true --v2-signing-enabled false --v3-signing-enabled false --ks my_keystore.jks --out signed_app.apk unsigned_app.apk
# 僅使用V2簽名
apksigner sign --v1-signing-enabled false --v2-signing-enabled true --v3-signing-enabled false --ks bianyi.jks --out sign_V2.apk app-release_pack_align.apk
# 僅使用V3簽名
apksigner sign --v1-signing-enabled false --v2-signing-enabled false --v3-signing-enabled true --ks my_keystore.jks --out signed_app.apk unsigned_app.apk
執行后檢查簽名:
apksigner verify --verbose sign_V2.apk
查看簽名:
apksigner verify --print-certs extracted_app.apk
此時我們重新打好的包就已經ok了。
下面需要推包替換原生的calculator.apk:
# 重新掛載/system為可寫
adb shell "su -c 'mount -o rw,remount /system'"
# 備份原文件
adb shell "su -c 'cp /system/priv-app/Calculator/calculator.apk /system/priv-app/Calculator/calculator.apk.bak'"
# 推送修改后的文件
adb push SystemUI_signed.apk /system/priv-app/Calculator/calculator.apk
# 設置正確權限
adb shell "su -c 'chmod 644 /system/priv-app/Calculator/calculator.apk'"
#重啟機器
adb reboot
重啟之后,我們會發現計算器應用已經成了我們修改之后的應用了。
附:系統應用apk對應的功能
SystemUI.apk包含的組件
SystemUI.apk 包含多個系統界面組件:
狀態欄 (StatusBar)
通知欄 (NotificationPanel)
快速設置面板 (QuickSettings)
導航欄 (NavigationBar)
鎖屏界面 (Keyguard)
最近任務 (Recents)