在Android应用外获取app的签名
在android中的利用PackageManager可以很轻松得到一个app的签名哈希值,但是需要在android下弄一次比较麻烦。其实完全可以抛开android获取,很多软件之类的都实现了,只是不知道怎么实现的。今天正好有兴趣,小小的探索了一下。
签名哈希值是PackageManager的getPackageInfo方法获取的,但是PackageManager是一个抽象类。。。而且找了半天也没找到子类之类的东西,上来就卡住了。。。。
只好求组万能的百度,原来有个PackageManagerService,在com\android\server\pm下,不过关于位置网上说法不一样。PackageManagerService近万行代码,看的脑袋痛。还好网上有高手进行了详细分析http://www.open-open.com/lib/view/open1328776151311.html。大概看了看,我最关心的还是签名,直接看有关签名的部分。
可以看的是在collectCertificatesLI这个方法里,这里调用android\content\pm\PackageParser的CollectCertificates方法,在这个方法里就可以看的通过JarFile来解析apk包,遍历里面的JarEntry,再调用JarEntry的getCertificates()来获取签名。这里就可以将代码简单修改一下脱离android直接用JarFile来解析apk包获取签名。
其实呢,JarEntry的getCertificates()实质上是得到apk包里的签名文件CERT.RAS解析出签名的,也可以直接把这个文件拿出来,用更简单的方法解析获取签名,不过感觉没什么必要,而且好像不仅仅需要这一个文件就够了。
整个过程很简单,只是在PackageManagerService上花了一些时间,但还是没太看明白,看了那个高人写的也比较茫然,看来只能等以后再研究了。后来又接着向下研究签名,发现签名文件所关联的JarEntry每个apk包都不同,研究很久没发现那个JarEntry有什么特别的代码,而且有关的源码是不全的。。。
这样的话就可以写一个小工具了,十几行代码就可以了,可以很轻松的获取一个apk包的签名哈希值,其实也可以获得签名的具体内容。
在Android应用外获取app的签名相关推荐
- [macOS]_[Shell]_[获取App的签名证书有效期]
场景 在进行 macOS开发时, 一般都需要对 app 进行签名,而我们发布产品后,测试如何查看app是否已经签名,证书是否正确,证书的有效期到哪天?我们右键app的Get Info并没有签名和证书信 ...
- android 微信支付 2,Android微信支付获取二次签名Sign的方法
/** * 获取sign签名 * * @return */ private String genPayReq() { // 获取参数的值 PayReq request = new PayReq(); ...
- android获取版本号报错,Android开发:获取安卓App版本号的方法步骤
在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版本号就是必须要有的功能.Android的App版本号相关内容比iOS的App版本号内容要多,而 ...
- android获取安卓版本,Android开发:获取安卓App版本号的方法步骤
今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的日子,国庆依然奋战在工作一线. 在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版 ...
- Android获取电子签名内容,Android Studio 获取app签名
今天在学习整合高德地图的时候,需要app的sha1码. image.png Android Studio 获取app签名的步骤如下: 1.Build下的Generate Signed APK imag ...
- 获取 Andriod keystore签名证书文件,用于打包APP应用
每个安卓APP,都要签名证书才能安装在手机上,测试的应用有测试的签名证书,生产环境有生产环境的签名证书,在开发APP之前,我们首先生成一个用于该APP的签名证书,用于测试调试应用,像微信支付.分享.地 ...
- Windows 10 安装 Android Studio 安装 创建APP 创建模拟器调试 真机调试 编译 签名打包APP
要想使用Android Studio开发android APP,需要安装三个工具:JDK.Android Studio.Android SDK 先了解这三个工具是做什么的 JDK:JDK是Java语言 ...
- 安卓获取APP对应的Android id的原理分析
android_id 的生成原理是由系统生成的随机数,并与应用 app 签名,经过 HmacSHA256 算法生成的: 从 android 8 以后开始就是随机的了,每个应用获取到的简要步骤: 获取的 ...
- 格式android id,android 获取APP的唯一标识applicationId的实例
使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...
最新文章
- 中国微型计算机分省市产量数据统计,2017年6月中国微型计算机设备产量统计数据分析...
- mysql 亿级高并发_亿级流量系统架构之如何设计每秒十万查询的高并发架构.md
- [泛读]4篇Web Service Replication方面论文
- 软件工程 第六章 编码与测试
- python根据url下载视频_Python爬取某视频并下载
- 迅雷精简版 Mac中文版
- python做app接口测试_一种APP接口自动化测试方法与流程
- 基于MATLAB的运动目标检测系统
- 待办事项列表,敏捷项目管理的核心工件
- Python爬虫 | 图书馆公众号座位自动预约【从0到1】
- 蓝牙鼠标链接Win10需要“输入MI MOUSE BT3.0的PIN”的解决方案
- 那些以玩笑说出口的话,往往是最真的表达
- 如何用 Python 可视化《三国》人物与兵器出现频率?(视频教程)
- 毕设学习笔记(1):经典DV-Hop算法(MATLAB)
- OpenCV VideoWriter报错: FFMPEG: tag ‘MP4V‘ is not supported with codec id 12 and format mp4解决方法
- 实力赢得信任丨西安珠江新城业主喜迎公元物业
- 到海马体照相馆,get你的仙女气息吧!
- Hibernate官方下载
- 彩虹QQ显IP v2.5 正式版支持QQ2008正式版
- java文件删除不了的坑,特别是压缩文件