• APK重新签名方法


    Android使用SHA1-RSA算法进行签名。可通过eclipse插件进行,可以通过keytool和jarsigner 用命令行执行,也可以在源码下进行签名。

    第一种:通过使用eclipse进行签名。

    2011-5-23 22:31 上传

    下载附件 (36.39 KB) 

    以我这个应用为例,右键项目,找到export

     

    2011-5-23 22:31 上传

    下载附件 (13.13 KB) 

    下一步

     

    2011-5-23 22:31 上传

    下载附件 (9.63 KB) 

    此处选择你要为哪个应用创建签名

    继续下一步

     

    2011-5-23 22:31 上传

    下载附件 (9.75 KB) 

    选择第二个创建一个新的密钥,Location表示在本地计算机哪个位置放置这个密钥,后面是密码,自己设一个

    继续下一步

     

    2011-5-23 22:31 上传

    下载附件 (12.09 KB) 

    里面的“中科院”是乱填的,其它的自己看吧,继续下一步

     

    2011-5-23 22:31 上传

    下载附件 (12.71 KB) 

    然后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 上传

    下载附件 (123.56 KB) 

    好了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
    -keystorekeystore 的名称
    111.apk  是签完名后的APK
    HengAnProject2.1.apk 是签名前的apk
    然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。

    第三种:在源码下进行签名。

    生成密钥对方法:

    Android源码目录development ools 下有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_sourceuild argetproductsecurity ,具体机器目录自己选择。找到 【platform.pk8】和【platform.x509.pem】这两个文件,这里为了方便将它们复制到根目录,如:F:sign 文件夹内,本来下一步就是需要打包jar 包了,不过里我们在android系统的源码内找到 out 编绎目录下

    signApk.jar 这个包,可以自行打jar 包或者下载我这个jar 包都是可以的,下载地址: signapk.rar (8.78 KB, 下载次数: 17) 

    2011-11-26 09:55 上传

    点击文件名下载附件 
    下载积分: 下载豆 -2 

    请自行将后缀名改为.jar 格式,把此jar 包放于F:sign  文件内,打开dos 操作界面,定们到F:sign,如下: 

    2011-11-26 09:55 上传

    下载附件 (1.41 KB) 

    ,接着输入如下命令:java -jar signapk.jar platform.x509.pem platform.pk8 test.apk testnew.apk ,在dos 命令名如下图: 

    2011-11-26 09:55 上传

    下载附件 (4.91 KB) 

    ,其中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:MESOFTandroid-sdk-windows.androiddebug.keystore -storepass android -keypass android E:MESigna.apk androiddebugkey

    > zipalign 4 E:MESigna.apk E:MESigna_sign.apk

     

    1、eclipse默认的debug.keystore路径:

    我的路径:E:MESOFTandroid-sdk-windows.androiddebug.keystore

     

     

    2、需要重新签名apk的路径:

    我的路径:E:MESigna.apk

     

    3、重新签名后apk的路径:

    E:MESigna.apk E:MESigna_sign.apk

     

    我的完整输入:

    首先输入:

    jarsigner -keystore E:MESOFTandroid-sdk-windows.androiddebug.keystore -storepass android -keypass android E:MESigna.apk androiddebugkey

     

    然后输入:

    zipalign 4 E:MESigna.apk E:MESigna_sign.apk

     

     

    3、好了,重新签名完成,安装后,就可以不依赖程序进行测试了。

     

    重新签名只要以下两句命令行就可以

    我的完整输入:

    首先输入:

    jarsigner -keystore E:MESOFTandroid-sdk-windows.androiddebug.keystore -storepass android -keypass android E:MESigna.apk androiddebugkey

     

    然后输入:

    zipalign 4 E:MESigna.apk E:MESigna_sign.apk

     

     

     

     

     

  • 相关阅读:
    Struts2 HelloWorld_1
    Java Web JavaMail 邮件发送
    Struts2 ActionWildcard(通配符配置)约定优于配置
    Struts2 Action
    Struts2 struts2简介
    Struts2 ActionMethod DMI(动态方法调用)
    Java Web Servlet过滤器
    com学习笔记(2)基本的com接口QueryInterface的实现
    com学习笔记(4)动态链接
    silverlight Visifire图表转图片偷天换日的做法
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/4047161.html
Copyright © 2020-2023  润新知