天天看點

APK重新簽名方法

Android使用SHA1-RSA算法進行簽名。可通過eclipse插件進行,可以通過keytool和jarsigner 用指令行執行,也可以在源碼下進行簽名。

第一種:通過使用eclipse進行簽名。

2011-5-23 22:31 上傳

以我這個應用為例,右鍵項目,找到export

下一步

此處選擇你要為哪個應用建立簽名

繼續下一步

選擇第二個建立一個新的密鑰,Location表示在本地計算機哪個位置放置這個密鑰,後面是密碼,自己設一個

裡面的“中科院”是亂填的,其它的自己看吧,繼續下一步

然後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 編繹目錄下

2011-11-26 09:55 上傳

點選檔案名下載下傳附件 

下載下傳積分: 下載下傳豆 -2 

請自行将字尾名改為.jar 格式,把此jar 包放于F:\sign  檔案内,打開dos 操作界面,定們到F:\sign,如下: 

,接着輸入如下指令:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk ,在dos 指令名如下圖: 

,其中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、好了,重新簽名完成,安裝後,就可以不依賴程式進行測試了。

重新簽名隻要以下兩句指令行就可以

技術改變世界!

--狂詩絕劍