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”

  • 相关阅读:
    零散杂记
    Result || IResult
    策略模式
    unity中的WWW通讯问题
    在webView 中使用JS 调用 Android / IOS的函数 Function
    不同云区域Proxy安装错误记录
    标准运维加载插件
    蓝鲸考试模拟
    PAAS组件迁移
    脚本安装halo
  • 原文地址:https://www.cnblogs.com/xieyuan/p/3787273.html
Copyright © 2011-2022 走看看