关于keytool和jarsigner工具签名的使用小结
在我们日常Android应用开发中,我们都要对我们开发的apk做签名处理,或者加固,增强我们apk的安全性,防止被逆向反编译,在apk签名这块,我们一般采用JDK自动工具来签名,下面就对相关工具做个简要说明和小结。
首先、我们需要先在电脑上安装JDK和环境变量配置:
JDK下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,在一系列的安装后,确保可以使用keytool 和 jarsigner两个工具能有使用,例如具体位置如下:
1.制作签名工具
C:\>where keytool
C:\Program Files\Java\jdk1.7.0_45\bin\keytool.exe
2.进行签名工具
C:\>where jarsigner
C:\Program Files\Java\jdk1.7.0_45\bin\jarsigner.exe
其次,签名分两个部分,即生成签名签名密钥和对apk做签名:
第一步:生成私钥,使用工具 - keytool:
Keytool 选项描述
-genkey产生一个键值对(公钥和私钥)
-v允许动作输出
-alias<alias_name>键的别名。只有前八位字符有效。
-keyalg产生键的加密算法。支持DSA和RSA。
-keysize产生键的长度。如果不支持,keytool用默认值1024 bits.通常我们用2048 bits 或更长的key。
-dname专有名称,描述谁创建的密钥。该值被用作自签名证书的颁发者和主题字段。注意你可以不在命令行指定。如果没有指定keytool会提示你(CN, OU, and so on)。
-keypass键的密码。
主要为了安全起见,如果没提供,keytool会提示你输入。
-validity键的有效期,单位:天
Note:A value of 10000 or greater is recommended.
-keystore.keystore用于存储私钥的文件。
-storepass私钥存储文件的密码。
主要为了安全起见,如果没提供,keytool会提示你输入。这个密码不会存储在你的shell历史记录中。
keytool -genkey -v -keyalg DSA -keysize 1024 -sigalg SHA1withDSA -validity 20000 -keystore MyDevel.keystore -alias devel -keypass MyDevel -storepass MyDevel
(图片来源网络)
第二步:用私钥进行签名 - jarsigner:
Jarsigner 选项描述
-keystore.keystore包含你私钥的存储文件
-verbose显示输出动作。
-sigalg签名算法,用 SHA1withRSA.
-digestalg消息摘要算法,用 SHA1.
-storepass存储文件的密码。
主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
-keypass私钥的密码。
主要为了安全起见,如果没提供,jarsigner会提示你输入。这个密码不会存储在你的shell历史记录中。
jarsigner -verbose -sigalg SHA1withDSA -digestalg SHA1 -keystore myDevel.keystore -storepass MyDevel test.apk devel
(图片来源网络)
至此,我们就可以把重签名后的apk安装包安装到模拟器或手机上面使用,另外,如果是对已有apk做过逆向分析或反编译修改过图标、代码的,再采用回编译后我们仍然要用上面的工具对生成的新apk做重签名,这样才能安装到手机,因为通过apktool回编译后的apk已经破坏了原有签名,即不带签名,那么这个时候就不能安装到真机或模拟器,我们只能通过keytool和jarsigner工具来重签名,对于逆向反编译感兴趣的朋友,可以参考51CTO的这门课程:Android逆向反编译代码注入 - 迈入安卓APP逆向安全大门,学习更多相关知识。
关于keytool和jarsigner工具签名的使用小结的更多相关文章
- 【keytool jarsigner工具的使用】Android 使用JDK1.7的工具 进行APK文件的签名,以及keystore文件的使用
一个android apk的编译过程 请参考: http://www.2cto.com/kf/201312/261475.html 典型的编译过程: aapt( Android Asset Packa ...
- Android签名用keytool和jarsigner制作apk文件
生成证书 keytool -genkey -alias aeo_android.keystore -keyalg RSA -validity -keystore aeo_android.keystor ...
- Android之APK文件签名——keytool和jarsigner
一.生成密钥库将位置定位在jdk的bin文件中,输入以下命名行:keytool -genkey -alias ChangeBackgroundWidget.keystore -keyalg RSA - ...
- APP为什么签名,使用keytool jarsigner进行签名
签名(sign):在应用程序的特定字段写入特定的标记信息,表示该软件已经通过了签署者的审核.过程:使用私有密钥数字地签署一个给定的应用程序 作用: 识别应用程序作者 检測应用程序是否发生改变 有种程序 ...
- 自动化批量管理工具pssh - 运维小结
pssh提供OpenSSH和相关工具的并行版本.包括pssh,pscp,prsync,pnuke和pslurp.该项目包括psshlib,可以在自定义应用程序中使用.pssh是python写的可以并发 ...
- 自动化批量管理工具salt-ssh - 运维小结
根据以往运维工作中操作经验来说,当管理上百台上千台服务器时,选择一款批量操作工具是及其有必要的.早期习惯于在ssh信任关系的前提下做for;do;done循环语句的批量操作,后来逐渐趋于使用批量工具操 ...
- Mysql抓包工具 - MySQL Sniffer 使用小结 (含带general_log日志)
在mysql运维工作中,一般会使用tcpdump做一些分析(直接读分析日志比较难以看明白,在数据库连接值高时使用):对于mysql实时的连接监控分析,通常会使用"mysqladmin/sho ...
- redis cluster集群管理工具redis-trib.rb命令小结-运维笔记
redis-trib.rb是redis官方推出的管理redis集群的工具,集成在redis的源码src目录下,是基于redis提供的集群命令封装成简单.便捷.实用的操作工具.redis-trib.rb ...
- Sublime | 编辑工具Sublime的使用小结
文章目录 Sublime Package & Usage MarkdownEditing MarkdownPreview Usage Key Bindings Setting (语法高亮和ma ...
随机推荐
- 经典SQL问题:Top 10%
学生表: create table hy_student( id number(4,0) primary key, name nvarchar2(20) not null, score number( ...
- 一个SQL查询连续三天的流量100以上的数据值【SQql Server】
题目 有一个商场,每日人流量信息被记录在这三列信息中:序号 (id).日期 (date). 人流量 (people).请编写一个查询语句,找出高峰期时段,要求连续三天及以上,并且每天人流量均不少于10 ...
- jenkins打包前端项目报 error: index-pack died of signal 15 问题解决
jenkins打包前端项目报 error: index-pack died of signal 15 问题解决 前几天用jenkins打包一个前端项目的时候出现了 error: index-pack ...
- .NET性能排查
概述 1,性能参数 2,性能排查方式 3,.NET的性能分析工具 1,性能指标 一个系统的性能排查或者性能设计的前提就是要有明确的性能指标:常见的性能参数 1.响应时间(处理任务时的延迟,简称 RT, ...
- docker容器数据持久化
将数据从宿主机挂载到容器中的三种方式 1.Volume 2.Bind Mounts 3.tmpfs Volumes:docker管理宿主机文件系统的一部分(/var/lib/docker/volume ...
- 大神Java8写了一段逻辑,我直呼看不懂
业务背景 首先,业务需求是这样的,从第三方电商平台拉取所有订单,然后保存到公司自己的数据库,需要判断是否有物流信息,如果有物流信息,还需要再进行上传. 而第三方接口返回的数据是 JSON 格式的,其中 ...
- 漏桶、令牌桶限流的Go语言实现
限流 限流又称为流量控制(流控),通常是指限制到达系统的并发请求数. 我们生活中也会经常遇到限流的场景,比如:某景区限制每日进入景区的游客数量为8万人:沙河地铁站早高峰通过站外排队逐一放行的方式限制同 ...
- Vue iview Tree组件实现文件目录-高级实现
Tree组件实现文件目录-基础实现 封装文件目录组件 src\views\folder-tree\folder-tree.vue <template> <div class=&quo ...
- 分布式文件系统之FastDFS安装部署
前面我们了解了分布式文件系统mogilefs的框架以及安装部署和简单使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/tag/MogileFS/:今天我们来了解下 ...
- Mac 环境下配置 MySQL 以及 Mac终端登录MySQL
1.首先mysql官网下载Mac 版 mysql直接安装 2.打开偏好设置-> MySQL -> 查看是否开启mysql服务 3.打开终端 进入mysql目录: /usr/local/my ...