Android加固之後Apk重簽名

ganzhijie發表於2024-03-27

Java:jarsigner java自帶的jar簽名,也就是我們Android打包的v1簽名,簽名方案只能v1。
Android:apksigner Android特有的簽名,也就是打包的v2簽名,支援多種簽名方案(v1~v4)。

需要注意的是,因為 apksigner 是Google在 Android 7.0 Nougat 推出的,所以我們的版本號的選擇需要 >= 24.0.3 ,否則只能選擇 jarsigner 方式打v1包。

如果您使用的是 apksigner,則必須在為 APK 檔案簽名之前使用 zipalign。如果您在使用 apksigner 為APK 簽名之後對 APK 做出了進一步更改,簽名便會失效。
如果您使用的是 jarsigner,則必須在為 APK 檔案簽名之後使用 zipalign。

下面是檢查apk是否對齊的方法,開啟終端輸入:
zipalign -c -v 4 apk路徑
例如:
zipalign -c -v 4 /android/tools/jiagu/apk/jiagu.apk

接下來就是利用終端,實現apk對齊操作,在開啟的終端輸入:
zipalign -v 4 「需要對齊操作的apk地址」 「對齊之後生成的地址」
例如:
zipalign -v 4 /android/tools/jiagu/apk/jiagu.apk /android/tools/jiagu/apk/zipaligned.apk
出現 “Verification succcessful” 為對齊成功。

下面是檢查是否簽名的終端語句,在開啟的終端輸入:

apksigner verify -v 檢查的apk路徑
例如:
apksigner verify -v /android/tools/jiagu/apk/zipaligned.apk

接下來繼續在終端輸入「apksigner」重簽名語句

apksigner sign -verbose --ks 「jks檔案路徑」 --v1-signing-enabled (「true/false」v1打包開啟/關閉) --v2-signing-enabled (「true/false」v2打包開啟/關閉) -ks-key-alias (jks別名 key-alias) --ks-pass pass: (jks密碼,key store password) --key-pass pass:(key 密碼,key password) --out 「生成的apk路徑,重簽名後的」 「對齊之後的apk路徑」
例如:
apksigner sign -verbose --ks /android/tools/jiagu/apk/ks/abc.keystore --v1-signing-enabled true --v2-signing-enabled true --ks-key-alias abc.keystore --ks-pass pass:123456 --key-pass pass:123456 --out /android/tools/jiagu/apk/signed.apk /android/tools/jiagu/apk/zipaligned.apk
終端執行結果如下:出現 Signed 則為重簽名成功。

總結:apksigner簽名流程。

加固並下載 ===> 檢查是否對齊 ===> 對齊「zipalign」 ===> 檢查是否對齊 ===> 檢查apk是否簽名 ===> 「apksigner」重簽名 ===> 是否重簽名成功

相關文章