获取apk签名信息、抹除apk签名状态、重新签名apk
Android应用市场一般都要求apk先进行签名才可上传应用,基于安全原则很多平台加入了apk需加固后才能上传的规则;
这时候就面临一个问题,因为apk加固后,会被抹除原有的签名信息,有些平台提供了官方的加固方式,加固的同时会要求你配置好签名信息,之后便可一次完成;但是部分apk通过不同安全平台的加固后,都需要开发者手动签名加固包!故才有了此篇的意义 ~
因为apk签名相关内容涉及到了keystore、jsk签名证书,故此推荐一下keystore、jks的知识扩展 ~
- keystore、jks基础知识
- 生成keystore、jks 签名证书
- 反编译keystore、jks签名证书
- 相互转换keystore、jks 签名证书
- 获取apk签名信息、抹除apk签名状态、重新签名apk
本来我只想简单记录一下如何帮apk进行签名,可是写着写着又写多了,我太难了 > < ~
- apk 相关准备
- cmd 签名基础
- 获取apk签名状态、信息
- 未签名状态
- 已签名信息
- 抹除apk签名状态、信息
- 顺利版
- 必成版
- 结果检验
- 重新签名apk
- 签名apk
- 签名成功
- 常见问题
- jarsigner 不是内部或外部命令,也不是可运行的程序
- jarsigner:无法打开 jar 文件:xxx.apk
Look Here:一定要注意使用cmd命令时涉及到对应路径时一定要输入正确,要么就直接cd到对应目录执行相关命令
在我的认知中,打签名包的方式主要有已下几种
AndroidStudio打签名包(适合首次的签名包,二次打签名包的方式可能也有,但没去研究)
三方工具重新签名apk,不过这方面工具需自行查询,友情提示部分加固平台会提供签名工具
jarsigner打签名包,需要配置jdk环境,然后通过cmd命令进行签名,相对以上俩者其功能广泛,可获取apk签名信息、抹除apk签名信息,重新apk签名
apk 相关准备
Look,一切开始之前,你需要准备以下文件和了解一些事情
- 确定apk存储路径: E:\outApk\test
- 未签名 before_test.apk(重新签名时会用到)
- 已签名 after_test.apk(抹除签名时会用)
- keystore、jks签名证书(重新签名时会用到)
我是记Blog时,临时创建了一个jks,证书信息如下 ~
cmd 签名基础
一切之始,从这段命令 jarsigner -h
讲起,翻译过来就是 java签名者 - 帮助
,我们首先需要熟悉基本命令与其含义才可以正式进行使用
cmd - jarsigner -h
获取以下命令信息
示例
C:\Users\Acer>jarsigner -h
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
用法: jarsigner [选项] jar-file 别名jarsigner -verify [选项] jar-file [别名...][-keystore <url>] 密钥库位置[-storepass <口令>] 用于密钥库完整性的口令[-storetype <类型>] 密钥库类型[-keypass <口令>] 私有密钥的口令 (如果不同)[-certchain <文件>] 替代证书链文件的名称[-sigfile <文件>] .SF/.DSA 文件的名称[-signedjar <文件>] 已签名的 JAR 文件的名称[-digestalg <算法>] 摘要算法的名称[-sigalg <算法>] 签名算法的名称[-verify] 验证已签名的 JAR 文件[-verbose[:suboptions]] 签名/验证时输出详细信息。子选项可以是 all, grouped 或 summary[-certs] 输出详细信息和验证时显示证书[-tsa <url>] 时间戳颁发机构的位置[-tsacert <别名>] 时间戳颁发机构的公共密钥证书[-tsapolicyid <oid>] 时间戳颁发机构的 TSAPolicyID[-tsadigestalg <算法>] 时间戳请求中的摘要数据的算法[-altsigner <类>] 替代的签名机制的类名[-altsignerpath <路径列表>] 替代的签名机制的位置[-internalsf] 在签名块内包含 .SF 文件[-sectionsonly] 不计算整个清单的散列[-protected] 密钥库具有受保护验证路径[-providerName <名称>] 提供方名称[-providerClass <类> 加密服务提供方的名称[-providerArg <参数>]]... 主类文件和构造器参数[-strict] 将警告视为错误
获取apk签名状态、信息
关键命令:jarsigner -verify -verbose -certs [apk存储路径信息]
未签名状态
cmd命令:jarsigner -verify -verbose -certs before_test.apk
已签名信息
cmd命令:jarsigner -verify -verbose -certs after_test.apk
获取到的签名信息太长了,图示分为俩部分 ~
- 图示 - 顶部
- 图示 - 尾部
抹除apk签名状态、信息
俩个版本的处理方式本质是一样的,之所以分俩个版本进行讲解,主要担心有的新手像我当年一样不知变通,所以稍微写的详细了一些 ~
顺利版
- 准备一个已签名的apk
- 将文件尾部后缀的apk改为zip(文件格式转换)
- 打开压缩包,删除META-INF
META-INF存放签名后的CERT和MANIFEST文件,用于识别软件的签名及版权
- 如何你第3步可以正常删除META-INF的话,那么直接将zip格式转回apk格式即可
必成版
- 准备一个已签名的apk
- 将文件尾部后缀的apk改为zip(文件格式转换)
- 解压之前apk转换后的zip文件
- 从解压后的文件中删除META-INF目录
- 重新将已删除META-INF的文件夹进行压缩,从而生成新的zip文件
- 进行压缩
- 将压缩好的文件从zip格式转为apk文件
结果检验
抹除签名信息前
抹除签名信息后
重新签名apk
准备工作,首先准备好需要签名的apk和签名证书
签名apk
cmd中常见的签名命令有俩种,一种是命令中不带密码进行签名,一种是直接带密码的命令进行签名
- 常见版
jarsigner -verbose -keystore {签名证书存放路径} -signedjar {签名后apk存放路径} {未签名的apk路径} {证书别名}
示例
jarsigner -verbose -keystore test.jks -signedjar test.apk before_test.apk test
签名成功
- 懒人版
jarsigner -verbose -keystore {签名证书存放路径} -storepass {签名证书密码} -signedjar {签名后文件存放路径} {未签名的文件路径} {您的证书别名}
示例
jarsigner -verbose -keystore test.jks -storepass 123123 -signedjar test.apk before_test.apk test
签名成功
签名成功
- 命令中指出签名成功
- 好吧,确实已经签名成功了
补充:Android打包时经常能看到V1、V2 包,其实它们对应的签名语句也不同
- V1签名(jarsigner方式)
jarsigner -verbose -keystore (签名地址) -signedjar (签名后的apk地址) (待签名apk地址) (别名)
- V2签名(apksigner方式)
apksigner sign --ks (签名地址) --ks-key-alias (别名) --out (签名后的apk地址) (待签名apk地址)
常见问题
其实很多的问题,都是因为粗心导致的 ~
jarsigner 不是内部或外部命令,也不是可运行的程序
一般报出这样的问题,基本都是你没有配置好jdk环境, 关于如何配置JDK环境,可以去我早期的一篇Blog看下,非常详细 ,如果懒得去的配置的话,就去jdk的bin目录下使用cmd命令,如下
cd C:\Program Files\Java\jdk1.8.0_45\bin
jarsigner:无法打开 jar 文件:xxx.apk
是不是不知道自己姿势哪不对,直接报错 ~
Look Here:好好检查下你的cmd命令和下面标记的一样吗?(一般都是由自己粗心造成)
jarsigner -verbose -keystore {签名证书存放路径} -signedjar {签名后apk存放路径} {未签名的apk路径} {证书别名}
获取apk签名信息、抹除apk签名状态、重新签名apk相关推荐
- request-promise 获取返回头信息_http返回的状态码 大全
00 Continue 继续.客户端应继续其请求101 Switching Protocols 切换协议.服务器根据客户端的请求切换协议.只能切换到更高级的协议,例如,切换到HTTP的新版本协议200 ...
- 如何获取apk的签名信息?
随时随地技术实战干货,获取项目源码.学习资料,请关注源代码社区公众号(ydmsq666) 转自:http://blog.csdn.net/chenrushui/article/details/5133 ...
- Android签名 一 查看签名信息
你可能想知道 通过这篇文章可以解决哪些问题以及学到什么: 1.如果我们有一个应用,如何查看应用的签名信息? 2.如果我们有签名原始文件,如何查看签名文件中的签名信息? 这篇文章介绍了如何查看应用和签名 ...
- 可通过http获取远端服务信息_微服务基础——厉害了!API网关
微服务刚刚诞生的时候,人们将服务进行拆分,实现服务之间的松耦合,并且每个服务有专门的团队维护,然后客户端直接和各个子服务进行交互.比如,订单,商品,会员服务. 那么这种客户端直接和后端服务交互的方式会 ...
- android获取未安装APK签名信息及MD5指纹
站在巨人的肩膀上写博客: http://blog.csdn.net/wulianghuan/article/details/18400581 http://www.jb51.net/article/7 ...
- android向apk的META-INF(签名信息)中添加渠道信息
作者:燕歆波 导读:在没有源码的情况下,为了避免重新签名,直接在签名信息中添加渠道信息; 准备好两个文件:一个空文件"channel_fhxs"没有后缀名,还有一个.prepert ...
- 查看apk的签名信息和签名文件的信息
一. 查看apk的签名信息 1. 解压apk到文件夹 unzip xxx.apk -d xxxfolder 2. 查看签名文件信息(解压的apk文件夹下有:META-INF/CERT.RSA) key ...
- 在命令行中查看apk的签名信息
在命令行中查看apk的签名信息,命令如下: keytool -list -printcert -jarfile app.apk 会在命令行打印出类似如下的信息: 签名者 #1: 签名: 所有者: CN ...
- php给apk包签名,Android_查看apk签名信息方法,用shell写了一个查看apk签名的 - phpStudy...
查看apk签名信息方法 用shell写了一个查看apk签名的脚本.代码很少也很简单 #!/bin/bash mkdir .temp_for_certificate cd .temp_for_certi ...
最新文章
- Kafka消息的可靠性
- play!框架_在Play上使用twitter4j! 框架和安全社交很容易
- html鼠标悬停位置,html – 当我将鼠标悬停在其上时,我想隐藏图像并在其位置显示文本...
- 面试官:Redis中的缓冲区了解吗
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
- echarts中矢量图片路径设置
- mysql 存储过程
- thinkphp5 数据库 链接 Connection
- 中移杭研 | 面向互联网应用的实时业务风控系统
- 华硕FL5900U如何关闭ahci_「IT之家评测室」华硕灵锐 14 体验评测,轻薄身材也能有大能量...
- 无法访问此网站 localhost 拒绝了我们的连接请求。
- android 横竖屏固定,Android——设置固定横竖屏
- 微信朋友验证消息是什么来源_微信好友来源怎么改?来源朋友验证消息是什么意思?...
- 我的世界java邮箱和密码_java实现邮箱找密码
- mybitplus name or service not known或quartz couldn‘t get host name
- 哪款蓝牙耳机的音质好?四款音质最好的蓝牙耳机测评
- watch:{} 与 this.$watch() 一样
- 华山论剑,B2C网站系统大比拼
- OBS编译vs2019
- 孙正义的12条成功之道