APK重新簽名方法
Android使用SHA1-RSA算法進行簽名。可通過eclipse插件進行,可以通過keytool和jarsigner 用命令行執行,也可以在源碼下進行簽名。
第一種:通過使用eclipse進行簽名。
2011-5-23 22:31 上傳
以我這個應用為例,右鍵項目,找到export
2011-5-23 22:31 上傳
下一步
2011-5-23 22:31 上傳
此處選擇你要為哪個應用創建簽名
繼續下一步
2011-5-23 22:31 上傳
選擇第二個創建一個新的密鑰,Location表示在本地計算機哪個位置放置這個密鑰,后面是密碼,自己設一個
繼續下一步
2011-5-23 22:31 上傳
里面的“中科院”是亂填的,其它的自己看吧,繼續下一步
2011-5-23 22:31 上傳
然后Finish就Ok了
然后在你的D盤里會有一個ResCat.key和一個ResCat.apk的文件
第二種:通過keytool和jarsigner 用命令行執行。
apk簽名首先要有一個keystore的簽名用的文件。
keystore是由jdk自帶的工具keytool生成的具體方式如下:
開始-〉運行->cmd->cd到你安裝的jdk下的bin目錄下這里是C:Program Files (x86)Javajdk1.60_21in
然后輸入keytool -genkey -alias chenAndroid.keystore -keyalg RSA -validity 20000 -keystore chenAndroid.keystore
-alias后跟的是別名這里是chenAndroid.keystore
-keyalg是加密方式這里是RSA
-validity是有效期 這里是20000天
-keystore就是要生成的keystore的名稱,這里是chenAndroid.keystore
然后按回車首先提示輸入密碼:這個在答名時要用的要記住了哦
然后會確認你的密碼
之后會依次叫你輸入相關信息如姓名,組織單位等
之后就是輸入chenAndroid.keystore主密碼(如果和keystore密碼相同,按回車)我在這里設和keystore相同,之后你就會在bin目錄下找到生成的chenAndroid.store
2012-7-4 11:08 上傳
好了keystore生成了,現在可以進行簽名了現在把你要進行簽名的apk放到C:Program Files (x86)Javajdk1.6.0_21in目錄下,記得一定要將要簽名的apk放到bin目錄下,然后利用jdk提供的工具jarsigner.exe進行簽名
jarsigner -verbose -keystore chenAndroid.keystore -signedjar 111.apk HengAnProject2.1.apk chenAndroid.keystore
-keystore:keystore 的名稱
111.apk 是簽完名后的APK
HengAnProject2.1.apk 是簽名前的apk
然后按回車:會要求輸入剛才設置的密碼,輸入后按回車就開始簽名了。
第三種:在源碼下進行簽名。
生成密鑰對方法:
Android源碼目錄development\tools 下有make_key腳本:
生成公鑰:openssl genrsa -3 -outtestkey.pem 2048
轉換成X509證書格式: openssl req -new -x509 -key testkey.pem -out testkey.x509.pem -days 10000-subj ‘xx’
生成私鑰:openssl pkcs8 -in testkey.pem-topk8 -outform DER -out testkey.pk8 –nocrypt
具體參數可以在網上查看。目前我們使用默認的testkey密鑰對。
對APK簽名命令:
signapk publickey.x509[.pem]privatekey.pk8 input.apk output.apk
對recovery 簽名命令:
signapk –w publickey.x509[.pem]privatekey.pk8 input.zip output.zip
- w參數表示對整個文件進行簽名,目前看只是在制作recovery升級包時使用。
簽名后,輸出文件的meta_inf目錄下生長如下文件:
MANIFEST.MF:對非文件夾非簽名文件的文件,逐個生成SHA1的數字簽名信息
CERT.SF:對Manifest文件,使用SHA1-RSA算法,用私鑰進行簽名。
CERT.RSA:CERT.RSA文件中保存了公鑰、所采用的加密算法等信息。
怎樣驗證簽名
APK驗證:
安裝apk時,通過CERT.RSA查找公鑰和算法,并對CERT.SF進行解密和簽名驗證,確認MANIFEST.MF,最終對每個文件簽名校驗。
升級時,android也會進行簽名驗證。如果遇到以下情況,都不能完成升級:
1) 兩個應用,名字相同,簽名不同
2) 升級時前一版本簽名,后一版本沒簽名。
3) 升級時前一版本為DEBUG簽名,后一個為自定義簽名。
4) 升級時前一版本為Android源碼中的簽名,后一個為DEBUG簽名或自定義簽名。
5) 安裝未簽名的程序。
6) 安裝升級已過有效期的程序。
以上可以看到,隨便更換密鑰對后簽名生成的apk也是可以安裝在任何平臺的。因為公鑰是放在apk里的。
RECOVERY:
Recovery公鑰是固定在代碼里面。并沒有采用CERT.RSA里面公鑰。目前幾乎所有的手機平臺都是用testkey。固定公鑰目的可能是為了確保其它平臺的升級包不能被升級。比如我們統一更換了一個密鑰對,那么recovery里面固定的公鑰更改后,用testkey做成的升級包是無法升級成功的。
同時recovery只是對整個升級壓縮文件進行簽名校驗(前面說過recovery簽名使用的是-w)。
Recovery 代碼里面使用的公鑰是按照rsapublickey 數據結構存儲。這個數據是通過dumppublickey工具從制作出來的x509證書文件中獲得。Dumppublickey代碼在網上可以查找到。
先進入 Android 源碼目錄 F:\android_source\build\target\product\security ,具體機器目錄自己選擇。找到 【platform.pk8】和【platform.x509.pem】這兩個文件,這里為了方便將它們復制到根目錄,如:F:\sign 文件夾內,本來下一步就是需要打包jar 包了,不過里我們在android系統的源碼內找到 out 編繹目錄下
signApk.jar 這個包,可以自行打jar 包或者下載我這個jar 包都是可以的,下載地址: signapk.rar (8.78 KB, 下載次數: 17)
2011-11-26 09:55 上傳
點擊文件名下載附件
下載積分: 下載豆 -2
請自行將后綴名改為.jar 格式,把此jar 包放于F:\sign 文件內,打開dos 操作界面,定們到F:\sign,如下:
2011-11-26 09:55 上傳
,接著輸入如下命令:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk ,在dos 命令名如下圖:
2011-11-26 09:55 上傳
,其中set.apk 是指我們要簽名的原始文件apk,后面setnew.apk 是指我們簽名后輸出的apk文件的名稱
Tip:在簽名的時候必須將set.apk事先用rar 文件打開,進入META-INF目錄下,將CERT.SF和CERT.RSA這兩個文件刪除掉,再執行如上操作。到了這一步,程序己經可以正常安裝了。
文檔二:
1、重新簽名需要刪除apk包中的簽名文件,META-INF
2、在命令中輸入以下內容(jdk1.6):
>jarsigner -keystore eclipse默認的debug.keystore路徑 -storepass android -keypass android 需要重新簽名apk的路徑 androiddebugkey
> zipalign 4 需要重新簽名apk的路徑 重新簽名后apk的路徑
3、jdk1.7需要加一行代碼:(命令之間有空格)
4、>jarsigner -digestalg SHA1 -sigalg MD5withRSA -keystore E:\ME\SOFT\android-sdk-windows\.android\debug.keystore -storepass android -keypass android E:\ME\Sign\a.apk androiddebugkey
> zipalign 4 E:\ME\Sign\a.apk E:\ME\Sign\a_sign.apk
1、eclipse默認的debug.keystore路徑:
我的路徑:E:\ME\SOFT\android-sdk-windows\.android\debug.keystore
2、需要重新簽名apk的路徑:
我的路徑:E:\ME\Sign\a.apk
3、重新簽名后apk的路徑:
E:\ME\Sign\a.apk E:\ME\Sign\a_sign.apk
我的完整輸入:
首先輸入:
jarsigner -keystore E:\ME\SOFT\android-sdk-windows\.android\debug.keystore -storepass android -keypass android E:\ME\Sign\a.apk androiddebugkey
然后輸入:
zipalign 4 E:\ME\Sign\a.apk E:\ME\Sign\a_sign.apk
3、好了,重新簽名完成,安裝后,就可以不依賴程序進行測試了。
重新簽名只要以下兩句命令行就可以
我的完整輸入:
首先輸入:
jarsigner -keystore E:\ME\SOFT\android-sdk-windows\.android\debug.keystore -storepass android -keypass android E:\ME\Sign\a.apk androiddebugkey
然后輸入:
zipalign 4 E:\ME\Sign\a.apk E:\ME\Sign\a_sign.apk

浙公網安備 33010602011771號