安卓逆向之apk重打包


在學習《Android 軟件安全權威指南》第二章對apk文件反編譯后修改smali文件跳轉指令實現程序無條件注冊時遇到了一些問題

APK重打包流程

重新編譯APK

修改apk反編譯的smali文件后利用apktool重新編譯成apk文件。執行apktool b <apk反編譯的文件夾路徑>,執行之后生成一個bulid文件夾和dist文件夾,其中dist文件夾中存儲的是重新編譯的apk文件

對apk做4字節對齊

在使用命令行打包apk時,由於命令行打包直接將resources.arsc進行壓縮,還需要使用android sdk的build-tools中的zipalign.exe對apk做4個字節對齊,執行zipalign -v -p 4 infile.apk outfile.apk

對apk進行V2簽名

未簽名的apk文件無法在android系統上運行,通過使用android sdk的build-tools目錄的lib中的apksigner.jar對對齊后的apk進行V2簽名(因為簽名的時候是對apk文件每1mb為單位進行hash,所以需要先對齊后再進行簽名)。通過keystore簽名文件

/ --ks [簽名證書路徑]
// --ks-key-alias [別名]
// --ks-pass pass:[KeyStore密碼]
//  --key-pass pass:[簽署者的密碼]
//  --out [output.apk] [input.apk]

java -jar apksigner.jar sign --ks keystore路徑 --ks-key-alias keystore別名 --ks-pass pass:keystore密碼 --key-pass pass:keystore密碼 --out output.apk input.apk

安裝並運行重打包的apk

利用adb指令,安裝apk:adb install apk路徑,運行apk:adb shell am start -n packagename/launch activityname(packagename是包的名字,lauch activityname是activity的名字)

利用signapk進行V1簽名和利用apksigner進行V2簽名

android 7.0及其以上的android系統apk通常采用v2簽名,而使用signapk進行V1簽名的apk通常只在android7.0以下的系統中使用。

先對齊再簽名

因為


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM