天天看點

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

因為沒有找到現成的apktool可執行檔案,是以首先需要下載下傳apktool.jar。

在使用 java -jar apktool.jar d lol-yingyongbao-release.apk指令反編譯APK;

有可能會報錯:

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

這是因為apktool.jar的版本太低,用更高版本的jar就不會報錯啦~。~

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

成功反編譯APK!

回編譯

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

這時可以在lol-yingyongbao-release檔案夾下的dist目錄中找到重新生成的APK,也可以用aapt檢視apk資訊:

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

但是若這時候将重新生成的apk解壓的話,會發現裡面沒有META-INF檔案夾,這是因為重新生成的apk是未簽名的,是以需要對其進行簽名:

使用JDK中帶的工具jarsigner

指令行是:jarsigner -keystore %1 -storepass %2 -keypass %3 -sigfile CERT -signedjar %4 %5 %6 -verbose -certs

6個參數分别是:

key的路徑
庫的密碼
key的密碼
簽名後輸出的檔案名
需要簽名的原檔案
key的别名
           

這裡需要注意的是-sigfile這個參數,之前用ide簽出來的這個驗簽的名字已經叫CERT了,後面手動去簽名的話,如果不加這個參數會導緻生成的驗簽檔案名為key的别名,如果程式已經釋出了,會導緻平台包指紋不同而不能送出,用這個方法把這個強行指定為CERT,和之前送出的保持一緻即可。

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

這時候再将重新生成的lol.apk進行解壓,會發現META-INF目錄已經存在了:

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk

我們可以使用keytool來檢視其簽名資訊(keytool -list -keystore debug.keystore 用來檢視keystore;keytool -printcert -file META-INF/CERT.RSA用來檢視第三方應用或系統應用的簽名,需要先解壓縮APK):

在ubuntu下使用apktool反編譯APK以及jarsigner簽名apk