- 浏览: 435076 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (377)
- Java (66)
- C++ (0)
- VC++ (0)
- .net (1)
- css (36)
- 数据库 (22)
- html (2)
- extjs (1)
- jpbm (0)
- javascript (31)
- 物资管理 (1)
- java基础 (5)
- C# (0)
- Android (56)
- window service (1)
- 其他 (2)
- Web服务器 (7)
- jbpm (1)
- eclipse (2)
- tomcat (3)
- java字符串与二进制的相互转化 (1)
- Oracle 数据库 (6)
- FreeMarker (8)
- 浏览器 (1)
- php (1)
- photoshop (6)
- spring (4)
- spring mvc (2)
- Acegi (1)
- webStorm 3.0 (4)
- Mongodb (8)
- mysql (9)
- 软件开发:需求分析 (1)
- 把Java程序作为Windows系统服务 (1)
- nodejs (4)
- json (1)
- 缓存 (1)
- J2ee (2)
- Flash报表 (1)
- MyEclipse+Maven+Tomcat (11)
- 生活 (1)
- Ubuntu (1)
- Bootstrap (1)
- jquery easy ui (2)
- 敏捷开发 (1)
- phone gap (1)
- rest (1)
- 移动开发 (22)
- Redis + Jedis + Spring (3)
- anroid (7)
- grunt 教程 (7)
- PhoneGap (2)
- sublime text (7)
- mariadb (1)
- linux (1)
- maven (2)
- jquery (1)
- ActiveMQ (1)
- LVS Nginx (1)
- nginx (6)
- ngnix (1)
- 爱因斯坦 (1)
- 天干地支 (1)
最新评论
-
muqingren:
...
Maven多模块布局实例详解 -
shutear:
解决了我的难题,谢谢分享!
Unable to load configuration. - action - file:/D:/studytool/apache-tomcat-6.0.16 -
702346318:
[img][/img][flash=200,200][/fla ...
CAS单点登录完整教程(上)【转】 -
liuguofeng:
PersonS631887934 写道学习中。。 有个问题想请 ...
js constructor属性 -
S631887934:
学习中。。 有个问题想请教楼主为什么要加上Person.pro ...
js constructor属性
android apk签名(为什么 如何做 验证)
这篇文章其实就是根据自己的疑问然后结合多个文章结合成的
文章引用:
http://liangxh2008.blog.163.com/blog/static/112411679201041321646855/<?XML:NAMESPACE PREFIX = O />http://www.pgcw.com.cn/Newsdetail.asp?id=257565010
http://www.eoeandroid.com/thread-23010-1-1.html
http://pepa.iteye.com/blog/250991
http://dev.10086.cn/cmdn/bbs/viewthread.php?tid=36678
http://blog.csdn.net/wenhaiyan/archive/2010/04/23/5520964.aspx
http://jojol-zhou.iteye.com/blog/719428
一、为什么要签名:
1、发送者的身份认证,由于开发商可能通过使用相同的Package Name来混淆替换已经安装的程序,以此保证签名不同的包不被替换
2、保证信息传输的完整性,签名对于包中的每个文件进行处理,以此确保包中内容不被替换,防止交易中的抵赖发生,Market对软件的要求
二、签名的说明:
1、所有的应用程序都必须有数字证书,Android系统不会安装一个没有数字证书的应用程序
2、Android程序包使用的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证
3、如果要正式发布一个Android应用,必须使用一个合适的私钥生成的数字证书来给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布
4、 数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的有效期。如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能
5、签名后需使用zipalign优化程序
6、Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任关系,而不是用来决定最终用户可以安装哪些应用程序
三、签名的方法:
1、 用eclipse插件方式签名
2、 调试签名
eclipse插件默认赋予程序一个DEBUG权限的签名,此签名的程序不能发布到market上,此签名有效期为一年,如果过期则导致你无法生成apk文件,此时你只要删除debug keystore即可,系统又会为你生成有效期为一年的新签名
b) 开发者生成密钥并签名
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed ApplicationPackage…,即可通过eclipse自定义证书并签名
c) 开发者导出未签名的包
右键点击项目名,在菜单中选择Android Tools,然后选择Export Signed ApplicationPackage…,即可导出未签名的包,之后可通过命令行方式签名
3、用命令行方式签名
使用标准的java工具keytool和jarsigner来生成证书和给程序签名
a) 生成签名
$ keytool -genkey -keystorekeyfile -keyalg RSA -validity 10000 -aliasyan
注:validity为天数,keyfile为生成key存放的文件,yan为私钥,RSA为指定的加密算法(可用RSA或DSA)
b) 为apk文件签名
$ jarsigner -verbose -keystorekeyfile -signedjar signed.apk base.apkyan
注:keyfile为生成key存放的文件,signed.apk为签名后的apk,base.apk 为未签名的apk,yan为私钥
c) 看某个apk是否经过了签名
$ jarsigner –verify my_application.apk
例如:jarsigner -verify -verbose -certs abc.apk
每个签名的apk都会看到如下信息
sm 152412 Wed Oct 14 14:16:52 CEST 2009 classes.dex
X.509, CN=Meebo, OU=Meebo, O=Meebo, L=Mountain View, ST=California, C=US
[certificate is valid from 28/10/08 06:49 to 13/08/82 07:49]
否则就是没有签名
d) 优化(签名后需要做对齐优化处理)
zipalign -v 4 your_project_name-unaligned.apk your_project_name.apk
4、在源码中编译的签名
a) 使用源码中的默认签名
在源码中编译一般都使用默认签名的,在某源码目录中用运行
$ mmshowcommands能看到签名命令
Android提供了签名的程序signapk.jar,用法如下:
$ signapk publickey.x509[.pem]privatekey.pk8 input.jar output.jar
*.x509.pem为x509格式公钥,pk8为私钥
build/target/product/security目录中有四组默认签名可选:testkey,platform, shared, media(具体见README.txt),应用程序中Android.mk中有一个LOCAL_CERTIFICATE字段,由它指定用哪个key签名,未指定的默认用testkey.
b) 在源码中自签名
Android提供了一个脚本mkkey.sh(build/target/product/security/mkkey.sh),用于生成密钥,生成后在应用程序中通过Android.mk中的LOCAL_CERTIFICATE字段指名用哪个签名
c) mkkey.sh介绍
i. 生成公钥
openssl genrsa -3 -outtestkey.pem 2048
其中-3是算法的参数,2048是密钥长度,testkey.pem 是输出的文件
ii. 转成x509格式(含作者有效期等)
openssl req -new -x509 -keytestkey.pem -out testkey.x509.pem -days 10000 -subj‘/C=US/ST=California/L=Mountain [email=View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com]View/O=Android/OU=Android/CN=Android/emailAddress=android@android.com[/email]’
iii. 生成私钥
openssl pkcs8 -in testkey.pem-topk8 -outform DER -out testkey.pk8-nocrypt
把的格式转换成PKCS #8,这里指定了-nocryp,表示不加密,所以签名时不用输入密码
四、签名的相关文件
1) apk包中签名相关的文件在META_INF目录下
CERT.SF:生成每个文件相对的密钥
MANIFEST.MF:数字签名信息
xxx.SF:这是JAR 文件的签名文件,占位符 xxx标识了签名者
xxx.DSA:对输出文件的签名和公钥
2)相关源码
五、签名的相关问题
一般在安装时提示出错:INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
1) 两个应用,名字相同,签名不同
2) 升级时前一版本签名,后一版本没签名
3) 升级时前一版本为DEBUG签名,后一个为自定义签名
4) 升级时前一版本为Android源码中的签名,后一个为DEBUG签名或自定义签名
5) 安装未签名的程序
6) 安装升级已过有效期的程序
6. 相关工具
1) 查看某个x509证书的的有效日期
签名具体步骤:
Apk签名首先要有一个keystore的签名用的文件.
keystore是由jdk自带的工具keytool生成的.具体生成方式参考一下:
开始->运行->cmd->cd 到你安装的jdk的目录这里我是 C:\Program Files\Java\jdk1.6.0_10\bin
然后输入:keytool -genkey -alias asaiAndroid.keystore -keyalg RSA -validity 20000 -keystore asaiAndroid.keystore
-alias 后跟的是别名这里是 asaiAndroid.keystore
-keyalg 是加密方式这里是 RSA
-validity 是有效期 这里是 20000
-keystore 就是要生成的keystore的名称 这里是 asaiAndroid.keystore
然后按回车
按回车后首先会提示你输入密码:这个在签名时要用的要记住了哦。
然后会再确认你的密码。
之后会依次叫你输入 姓名,组织单位,组织名称,城市区域,省份名称,国家代码等。
参考:
运行完可以在 C:\Program Files\Java\jdk1.6.0_10\bin 里找到刚才生产的keyStore文件
好现在开始给Apk签名了:
在 C:\Program Files\Java\jdk1.6.0_10\bin 还提供一个工具 jarsigner.exe
好现在可以在刚才的命令行后继续运行以下命令给APK签名:
jarsigner -verbose -keystore asaiAndroid.keystore -signedjar LotteryOnline_signed.apk LotteryOnline.apk asaiAndroid.keystore
-keystore:keystore 的名称
LotteryOnline_signed.apk 是签完名后的APK
LotteryOnline.apk 是签名前的apk
然后按回车:会要求输入刚才设置的密码,输入后按回车就开始签名了。
参考:
运行成功后在 C:\Program Files\Java\jdk1.6.0_10\bin 目录下会多出一个被签名的apk文件,
参考:
如果这种方法不行,可以试试eclipse自带的方法,也是引用“窃”别人的文章^-^
1.Eclipse工程中右键工程,弹出选项中选择 android工具-生成签名应用包:2.选择需要打包的android项目工程:
3.如果已有私钥文件,选择私钥文件 输入密码,如果没有私钥文件见 第6和7步创建私钥文件:
4.输入私钥别名和密码:
5.选择APK存储的位置,并完成设置 开始生成:
6.没有私钥文件的情况,创建私钥文件:
7.输入私钥文件所需信息,并创建:
补充:
如果需要最终发行你的android程序,必需为apk文件签名。这里apk和jar的签名方式都是一样的,使用sun jdk的jarsigner工具来完成,但是执行时会提示jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected xxx but got xxx bytes)这样的提示,
这些问题主要是由于资源文件造成的,对于android开发来说应该检查res文件夹中的文件,逐个排查。这个问题可以通过升级系统的JDK和JRE版本来解决。
发表评论
-
非对称加密算法-DH算法
2014-11-04 10:53 1402http://blog.csdn.net/kongqz/a ... -
非对称加密算法-RSA算法
2014-11-04 10:52 926一、概述 1、RSA是基于大数因子分解难题。目前各种主流 ... -
OAuth的机制原理讲解及开发流程
2014-11-04 10:01 751本想前段时间就把自己通过QQ OAuth1.0、OAuth2 ... -
FindBugs规则整理
2014-10-30 12:46 1894http://blog.csdn.net/jdsjlzx/a ... -
Java网络编程——远程通讯可选技术及原理
2014-10-28 17:40 610(此文系转载,具体出 ... -
UML类图几种关系的总结
2014-10-25 18:13 664在UML类图中,常见的有以下几种关系: 泛化(Gene ... -
关联、组合、聚合、依赖关系比较
2014-10-25 17:06 600类之间的关系种类: Generalization(泛化), ... -
组合,聚合,关联,依赖 的区别
2014-10-25 12:37 712依赖与关联 依赖(Depen ... -
设计指导原则
2014-10-18 15:38 765http://www.cnblogs.com/netfocu ... -
Java缩略图生成库之Thumbnailator应用说明
2014-10-12 18:17 682Thumbnailator 是一个为Java界面更流畅的缩略 ... -
spring mvc 使用jcrop进行头像剪切
2014-10-12 17:33 1429源码下载地址:http://download.csdn.n ... -
Lucene / Solr 开发经验
2014-10-08 22:06 868转自 Lucene/Solr开发经 ... -
高并发量网站解决方案
2014-10-08 22:03 679一个小型的网站,可以使用最简单的html静态页面就实现了,配 ... -
response.setHeader()的用法
2014-08-04 11:35 644response.setHeader()的用 ... -
iBatis整理——Spring环境下批处理实现
2014-07-09 11:09 401http://snowolf.iteye.com/blog/ ... -
Java NIO系列教程(八) SocketChannel
2014-09-14 11:06 509原文链接 作者:Jakob Jenkov ... -
Java NIO系列教程(七) FileChannel
2014-07-06 17:54 0原文链接 作者:Jakob Jenkov 译 ... -
Java NIO系列教程(六) Selector
2014-07-06 17:53 0原文链接 作者:Jakob Jenkov 译者:浪迹v 校对 ... -
Java NIO系列教程(五) 通道之间的数据传输
2014-07-06 17:53 0原文地址:http://tutorials.jenkov. ... -
Java NIO系列教程(四) Scatter/Gather
2014-07-06 17:52 401Java NIO开始支持scatter/gather,sca ...
相关推荐
获取apk的sha256哈希值,对apk的签名进行验证,仅供参考
微信官方的下载链接失效了。可以用这个下载。
但是,有时可能我们会经常修改apk源码进行调试验证,如果每次都把apk拿出来进行重新签名,再安装,这样确实麻烦了一些。Eclipse是支持使用自己的系统签名工具进行APK打包签名的。使用这种方法,可以快速而方便地对...
一、Android签名机制--基础概念 1. 消息摘要算法 2. 非对称加密算法(RSA算法) ...三、Android签名机制--APK签名验证过程 1. APK签名验证概述 2. 简略调用流程 3. 详细校验流程(校验CERT.RSA) 4. 总结
Android Apk去掉签名以及重新签名的方法 Android开发中很重要的一部就是用自己的密钥给Apk文件签名,不经过签名的Apk文件一般是无法安装的,就算装了最后也是失败。 网上流传的“勾选允许安装未知来源的应用”其实跟...
Uber Apk签名者 一种工具,可通过调试或提供的发行证书(或多个)来帮助签署, 和验证多个Android应用程序包(APK)。 它支持和。 带有嵌入式调试密钥库的便捷调试签名。 每次签名后自动验证签名和zipalign。 主要...
一种帮助用调试或提供的发布证书(或多个)对多个android应用程序包(apk)进行签名、压缩对齐和验证的工具。它支持v1、v2和v3的android签名方案。使用嵌入式调试密钥库轻松方便地进行调试签名。每次签名后自动验证...
APK签名编译.doc,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
修复了android5.0之前的系统版本对apk的验证漏洞,删除,增加,修改都能检测 安装apk和加载jar插件时通过验证cert.RSA, .MF .SF等签名文件证书以及摘要值比对判断是否是非法篡改过得apk/jar文件
apksigner是Google官方提供的针对Android apk签名及验证的专用工具, 位于Android SDK/build-tools/SDK版本/apksigner.bat 不管是apk包,还是jar包,本质都是zip格式的压缩包,所以它们的签名过程都差不多(仅限V1签名),...
android apk包在通过RAR等工具修改了其中的 某些文件之后,需要重新签名 这就是 经过实际验证可以使用的 签名工具。 嘎嘎,也是项目需要 呵呵
Apk签名使用Android测试证书自动签署apk。 公钥和私钥都嵌入在jar中。 开发大楼:./ build.sh测试:./ test.sh用法请签署我。 Apk签名使用Android测试证书自动签署apk。 公钥和私钥都嵌入在jar中。 开发大楼:./...
ApkProtector 是 Android 应用程序的保护者和混淆器。 它可以帮助您保护应用程序和库免...-签名验证 -Xposed 检查 -反向检测 -设备锁定 -根检查 -魔法检查 -钩子检测 -Playstore 检查 -模拟器检查 -崩溃通知 -显示讯息
APK签名功能会自动用现成的密钥对APK文件签名,或者通过密钥 管理器提供您自己的签名。此外,还可以查看有关签署APK和验证 证书的详细信息。 APK安装程序: 内置APK安装程序允许您在Android设备上安装APK文件。要安装...
加密工具:集成了各种加密方式,资源混淆,包含apk签名,md5,xp判断,so反调试,网络验证,手机root判断 android资源清理工具,可恢复(Eclipse项目下使用)
2013年7月初,Bluebox security在准备BlackHat 2013大会的时候,爆出Android应用APK签名验证存在漏洞,可以被绕过,提到现存手机99%存在此漏洞,可以被攻击。此说法吸引了大家对APK签名机制的注意。从7月份到现在,...
提出一种新的基于APK签名信息反馈的Android恶意应用检测方法(SigFeedback)。该方法在SVM分类算法的基础上采用启发式规则学习的方式对特征值进行提取,并对检测集中的 APK 签名信息进行验证筛选,实现了启发式反馈...
通过jni的方式获取android应用的签名的md5值,可以在so中作安全验证
APK签名验证应支持所有算法以及方案v1和v2,包括降级攻击保护。 适用于Go 1.9或更高版本。 上的 go get github.com/avast/apkverifier 供应商的东西 由于Android甚至可以处理破碎X509 cerficates和ZIP文件,...
此仓库中还包含一个提取AndroidManifest.xml并验证APK签名的工具。 go get github.com/avast/apkparser go install github.com/avast/apkparser/axml2xml ./axml2xml -v application.apk 例子 package main import...