zoukankan      html  css  js  c++  java
  • 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 argetproductsecurity目录下面的platform.pk8和platform.x509.pem两个文件

    签名工具在 build oolssignapksignapk.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”

  • 相关阅读:
    hdu 2019 数列有序!
    hdu 2023 求平均成绩
    HDU 5805 NanoApe Loves Sequence (思维题) BestCoder Round #86 1002
    51nod 1264 线段相交
    Gym 100801A Alex Origami Squares (求正方形边长)
    HDU 5512 Pagodas (gcd)
    HDU 5510 Bazinga (字符串匹配)
    UVALive 7269 Snake Carpet (构造)
    UVALive 7270 Osu! Master (阅读理解题)
    UVALive 7267 Mysterious Antiques in Sackler Museum (判断长方形)
  • 原文地址:https://www.cnblogs.com/xieyuan/p/3787273.html
Copyright © 2011-2022 走看看