加载中…
个人资料
Sogrey
Sogrey
  • 博客等级:
  • 博客积分:0
  • 博客访问:76,055
  • 关注人气:4
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

APK签名

(2016-01-14 12:58:19)
分类: Android

Apk签名

一、      eclipse 签名apk(没有签名文件)

1、         在项目上右键,Android Tools ——>Export Signed Application Package…

APK签名

 

2、         弹出如下窗

APK签名

3、         点下一步

APK签名

4、         填写信息:

APK签名

5、         输出签名apk,点击Finnish 完成

APK签名

6、         查看签名好的apk文件,保存好你的签名文件密码

APK签名

二、      eclipse 签名apk(有签名文件)

1、     与上面不同的是 第三步选择  Use existing keystore

APK签名
2
、确认别名,密码,之后与上面第5步一样

APK签名

APK签名

三、命令行生成签名文件

1)创建一个用来存放签名文件的文件夹demo
2)在命令行窗口中输入命令:(粗体部分)
E:\demo>keytool -genkey -alias demo.keystore -keyalg RSA -validity 20000 -keystore demo.keystore
输入keystore密码:
再次输入新密码:
您的名字与姓氏是什么?
  [Unknown]
  Sogrey
您的组织单位名称是什么?
  [Unknown]
  China
您的组织名称是什么?
  [Unknown]
  China
您所在的城市或区域名称是什么?
  [Unknown]
  Xi’an
您所在的州或省份名称是什么?
  [Unknown]
  Shannxi
该单位的两字母国家代码是什么
  [Unknown]
  cn
CN=ZhouJiangHai, OU=jxust, O=jxust, L=ganzhou, ST=jiangxi, C=cn
正确吗?
  [
]  y

输入的主密码
       
(如果和 keystore 密码相同,按回车):

APK签名
这时会在E盘的demo文件夹下生成demo.keystore文件,就是我们需要的签名文件,(-validity 20000 表示证书的有效天数为20000天)

APK签名

 

三、      使用命令行签名apk

(1)    Eclipse中用“Export the unsigned apk”工具导出项目,这里保存到E盘的demo文件夹下,名为demo.apk

2)使用jarsignerdemo.apk
文件签名,如下所示:
E:\android_publish$amp;>quot;$E:\jdk1.6\bin\jarsigner.exe" -verbose -keystore demo.keystore -signedjar demo_signed.apk demo.apk demo.keystore

输入密匙的口令短语:
......
通过上面的命令就可以讲未签名的demo.apk 文件签名为demo_signed.apk

3)最后验证是否签名成功
E:\android_publish$amp;>quot;$E:\jdk1.6\bin\jarsigner.exe" -verify demo_signed.apk
如果成功则
输出:
jar
已验证

APK签名

F:\Eclipse×82\EdarSoft\AppStoreAndroid\v1\签名文件>jarsigner -verbose -keystore EdarSoft.keystore -signedjar tap_signed.apk tap_unsign.apk edarsoft

输入密钥库的密码短语:

   正在添加: META-INF/MANIFEST.MF

   正在添加: META-INF/EDARSOFT.SF

   正在添加: META-INF/EDARSOFT.RSA

  正在签名: res/drawable/ic_launcher.png

  正在签名: res/layout/main.xml

  正在签名: AndroidManifest.xml

  正在签名: resources.arsc

  正在签名: classes.dex

jar 已签名。

 

警告:

未提供 -tsa -tsacert, jar 没有时间戳。如果没有时间戳, 则在签名者证书的到期日期 (3015-03-29) 或以后的任何撤销日期之后, 用户可能无法验证此 jar

4)查看签名信息

解压已签名的apk文件 找到 META-INF CERT.RSA  .RSA 文件

APK签名

APK签名

APK签名

E:\demo\demo\META-INF>keytool -printcert -file CERT.RSA

所有者: CN=Sogrey, OU=China, O=China, L=Xi'an, ST=Shannxi, C=710065

发布者: CN=Sogrey, OU=China, O=China, L=Xi'an, ST=Shannxi, C=710065

序列号: 1cdcdea9

有效期开始日期: Thu Jan 14 10:53:40 CST 2016, 截止日期: Sat Dec 21 10:53:40 CST 2115

证书指纹:

         MD5: 4C:7A:C7:A7:5E:B0:F1:E8:64:7D:18:7D:A5:CB:4E:4E

         SHA1: 11:01:27:D3:F2:3B:11:7C:73:A2:63:44:AA:87:3D:4D:68:2A:5E:92

         SHA256: 3F:8D:9E:5B:DC:0F:8B:0E:36:FD:32:85:25:D4:1A:9B:66:03:D3:E5:AA:AC:C1:93:17:5A:36:34:26:17:6C:66

         签名算法名称: SHA256withRSA

         版本: 3

 

扩展:

 

#1: ObjectId: 2.5.29.14 Criticality=false

SubjectKeyIdentifier [

KeyIdentifier [

0000: 4F 0B C4 10 91 1D 3F 44   68 24 8B A5 A2 67 CB 93  O.....?Dh$...g..

0010: 8E 37 81 B0                                        .7..

]

]

 

Eclipse  里查看MD5SHA1 与上面一致

APK签名

 

l  E:\demo\demo\META-INF>如果忘记别名 在上面二的第二步查看

APK签名

 

Android签名概述

我们已经知道的是:Android对每一个Apk文件都会进行签名,在Apk文件安装时,系统会对其签名信息进行比对,判断程序的完整性,从而决定该Apk文件是否可以安装,在一定程度上达到安全的目的。

 

给定一个Apk文件,解压,可以看到一个META-INFO文件夹,在该文件夹下有三个文件:分别为MANIFEST.MFCERT.SFCERT.RSA。这三个文件分别表征以下含义:

 

1MANIFEST.MF:这是摘要文件。程序遍历Apk包中的所有文件(entry),对非文件夹非签名文件的文件,逐个用SHA1生成摘要信息,再用Base64进行编码。如果你改变了apk包中的文件,那么在apk安装校验时,改变后的文件摘要信息与MANIFEST.MF的检验信息不同,于是程序就不能成功安装。

 

说明:如果攻击者修改了程序的内容,有重新生成了新的摘要,那么就可以通过验证,所以这是一个非常简单的验证。

 

2CERT.SF:这是对摘要的签名文件。对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能解密它。解密之后,将它与未加密的摘要信息(即,MANIFEST.MF文件)进行对比,如果相符,则表明内容没有被异常修改。

 

说明:在这一步,即使开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件(CERT.SF)。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件(MANIFEST.MF)对应不起来,所以不能通过检验,不能成功安装文件。

 

3CERT.RSA文件中保存了公钥、所采用的加密算法等信息。

 

说明:系统对签名文件进行解密,所需要的公钥就是从这个文件里取出来的。

 

结论:从上面的总结可以看出,META-INFO里面的说那个文件环环相扣,从而保证Android程序的安全性。(只是防止开发者的程序不被攻击者修改,如果开发者的公私钥对对攻击者得到或者开发者开发出攻击程序,Android系统都无法检测出来。)

 

查看三方应用或是系统应用签名

winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERT.RSA文件

1.keytool -printcert -file META-INF/CERT.RSA

  命令是:keytool -printcert -file <</span>签名文件RSA的路径>

2.jarsigner -verify -verbose -certs Superuser.apk  此条未验证成功。

我的更多文章:

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有