Android APK的簽名與重新簽名

原文地址: http://zhiwei.li/text/2010/12/android-apk%E7%9A%84%E7%AD%BE%E5%90%8D%E4%B8%8E%E9%87%8D%E6%96%B0%E7%AD%BE%E5%90%8D/

 

今年年初的時候,介紹了
BlackBerry系統和簽名
從BlackBerry應用程序中移除簽名以及重新簽名
使用BlackBerry代碼簽名工具

現在,我們介紹Android APK的簽名與重簽名的一些要點

APK實際上是一個ZIP壓縮文件

解壓縮後有個META-INF目錄

META-INF目錄下存放的是簽名信息,用來保證apk包的完整性和系統的安全。

安裝apk包時,應用管理器會按照同樣的算法對包裏的文件做校驗,如果校驗結果與META-INF下的內容不一致,系統就不會安裝這個apk。

每一個Android應用程序必須要有數字簽名才能安裝.
有兩種方法:一種是使用調試密鑰(可以在模擬器或者設備上做調試時使用),
還有一種就是私鑰(爲應用程序發佈用).當組建Adriod應用程序時組建工具會自動爲應用程序提供簽名,
但是如果想發佈應用程序的時候,必須使用自己的私鑰.

編譯時使用Release模式 需要手工添加簽名.只有有簽名的應用程序纔可以安裝.

簽名工具;來自開源軟件
Keytool
創建一個密鑰證書存儲文件和一個私鑰,用來爲.apk文件簽名

Jarsigner (類似的簽名工具)
用Keytool產生的私鑰爲.apk文件簽名

使用Auto-sign工具重新對其進行簽名即可,首先,刪掉META-INF文件夾下的簽名文件
CERT.SF
CERT.RSA
從文件名就可以看出 cert.rsa 是 證書的rsa公鑰

替換原來apk包中的classes.dex, 在GNOME 的歸檔管理器 中拖進去即可, windows 資源管理器,其它壓縮軟件也可支持拖拉.

SignApk.jar is a tool included with the Android platform source bundle.

testkey.pk8 is the private key that is compatible with the recovery image included in this zip file

testkey.x509.pem is the corresponding certificate/public key

Usage:

java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update_signed.zip

在哪裏找到這些東西
build\target\product\security目錄下面的platform.pk8和platform.x509.pem兩個文件

簽名工具在 build\tools\signapk\signapk.jar

據說簽名時 不必要刪除原來的CERT.SF和CERT.RSA, 會自動替換掉的

http://gbs-ben.googlecode.com/files/Auto-sign.rar

http://file.geeka.net/Android/tools/Auto-sign.rar

在sun-java6-jdk 中包含有一個簽名工具
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner

在openjdk-6-jdk 也有一個簽名工具
/usr/lib/jvm/java-6-openjdk/bin/jarsigner

驗證簽名
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner -verify /tmp/zhiwei.li.apk
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner -verbose -certs -verify /tmp/zhiwei.apk 會輸出詳細的信息(輸出詳細信息和驗證時顯示證書)

在 sun-java6-bin 有一個創建數字證書的工具
/usr/lib/jvm/java-6-sun-1.6.0.22/bin/keytool
/usr/lib/jvm/java-6-sun-1.6.0.22/jre/bin/keytool

openjdk-6-jre-headless
/usr/lib/jvm/java-6-openjdk/bin/keytool
/usr/lib/jvm/java-6-openjdk/jre/bin/keytool

/usr/lib/jvm/java-6-sun-1.6.0.22/bin/keytool -genkeypair -alias zhiwei.keystore -keyalg RSA -validity 11911 -keystore zhiwei.keystore

用 /usr/lib/jvm/java-6-sun-1.6.0.22/bin/jarsigner -verify -verbose -certs 選項可以查看詳細的驗證信息
比如證書的有效時間, 用keytool生成的證書, 據說有效時間應該在2030年之後纔可以在android上運行

調試簽名的位置
debug.keystore 默認位置在 ~/.android/目錄

Keystore name: “debug.keystore”
Keystore password: “android”
Key alias: “androiddebugkey”
Key password: “android”
CN: “CN=Android Debug,O=Android,C=US”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章