在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的签名相关推荐

  1. [macOS]_[Shell]_[获取App的签名证书有效期]

    场景 在进行 macOS开发时, 一般都需要对 app 进行签名,而我们发布产品后,测试如何查看app是否已经签名,证书是否正确,证书的有效期到哪天?我们右键app的Get Info并没有签名和证书信 ...

  2. android 微信支付 2,Android微信支付获取二次签名Sign的方法

    /** * 获取sign签名 * * @return */ private String genPayReq() { // 获取参数的值 PayReq request = new PayReq(); ...

  3. android获取版本号报错,Android开发:获取安卓App版本号的方法步骤

    在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版本号就是必须要有的功能.Android的App版本号相关内容比iOS的App版本号内容要多,而 ...

  4. android获取安卓版本,Android开发:获取安卓App版本号的方法步骤

    今天国庆节,在这举国欢庆的日子里,发一篇博文留念一下这个特殊的日子,国庆依然奋战在工作一线. 在Android开发过程中,想要开发一个完整功能的App,各个地方的内容都要涉及到,比如获取App的系统版 ...

  5. Android获取电子签名内容,Android Studio 获取app签名

    今天在学习整合高德地图的时候,需要app的sha1码. image.png Android Studio 获取app签名的步骤如下: 1.Build下的Generate Signed APK imag ...

  6. 获取 Andriod keystore签名证书文件,用于打包APP应用

    每个安卓APP,都要签名证书才能安装在手机上,测试的应用有测试的签名证书,生产环境有生产环境的签名证书,在开发APP之前,我们首先生成一个用于该APP的签名证书,用于测试调试应用,像微信支付.分享.地 ...

  7. Windows 10 安装 Android Studio 安装 创建APP 创建模拟器调试 真机调试 编译 签名打包APP

    要想使用Android Studio开发android APP,需要安装三个工具:JDK.Android Studio.Android SDK 先了解这三个工具是做什么的 JDK:JDK是Java语言 ...

  8. 安卓获取APP对应的Android id的原理分析

    android_id 的生成原理是由系统生成的随机数,并与应用 app 签名,经过 HmacSHA256 算法生成的: 从 android 8 以后开始就是随机的了,每个应用获取到的简要步骤: 获取的 ...

  9. 格式android id,android 获取APP的唯一标识applicationId的实例

    使用getIdentifier()方法可以方便的获各应用包下的指定资源ID. 方式一 int indentify = getResources().getIdentifier("com.te ...

最新文章

  1. 中国微型计算机分省市产量数据统计,2017年6月中国微型计算机设备产量统计数据分析...
  2. mysql 亿级高并发_亿级流量系统架构之如何设计每秒十万查询的高并发架构.md
  3. [泛读]4篇Web Service Replication方面论文
  4. 软件工程 第六章 编码与测试
  5. python根据url下载视频_Python爬取某视频并下载
  6. 迅雷精简版 Mac中文版
  7. python做app接口测试_一种APP接口自动化测试方法与流程
  8. 基于MATLAB的运动目标检测系统
  9. 待办事项列表,敏捷项目管理的核心工件
  10. Python爬虫 | 图书馆公众号座位自动预约【从0到1】
  11. 蓝牙鼠标链接Win10需要“输入MI MOUSE BT3.0的PIN”的解决方案
  12. 那些以玩笑说出口的话,往往是最真的表达
  13. 如何用 Python 可视化《三国》人物与兵器出现频率?(视频教程)
  14. 毕设学习笔记(1):经典DV-Hop算法(MATLAB)
  15. OpenCV VideoWriter报错: FFMPEG: tag ‘MP4V‘ is not supported with codec id 12 and format mp4解决方法
  16. 实力赢得信任丨西安珠江新城业主喜迎公元物业
  17. 到海马体照相馆,get你的仙女气息吧!
  18. Hibernate官方下载
  19. 彩虹QQ显IP v2.5 正式版支持QQ2008正式版
  20. java文件删除不了的坑,特别是压缩文件

热门文章

  1. 守卫者的挑战(guard)
  2. 六、Scrapy中Download Middleware的用法
  3. 【转】Android必备知识点- Android文件(File)操作
  4. hdu 4496 并查集 逆向 并查集删边
  5. Jqurey学习笔记---3、jQuery 选择器
  6. Beautifulsoup的使用
  7. LSP(分层服务提供者)
  8. UML学习笔记(4)——类图之间的关系
  9. WPF案例:如何设计历史记录查看UI
  10. zabbix监控ntpd服务