Android APK的签名与重新签名


现在,我们介绍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

也可直接用以下命令:

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


在哪里找到这些东西


/build/target/product/security/目录下面的platform.pk8和platform.x509.pem两个文件

签名工具在 /build/tools/signapk/signapk.jar

或者是由 /build/tools/signapk/signapk.java  经过编译生成在/out/host/linux-x86/framework/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”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值