关于在安卓apk中增加官方签名校验的说明
来源:互联网 发布:鳄鱼街 知乎 编辑:程序博客网 时间:2024/05/29 17:40
众所周知,安卓apk的发布,是需要经过签名这一道程序的。
另外,要破解一个APK,必然需要重新对APK进行签名。而这个签名,一般情况无法再与APK原先的签名保持一致。(除非APK原作者的私钥泄漏,那已经是另一个层次的软件安全问题了。)签名机制标明了APK的发行机构。因此,站在软件安全的角度,我们就可以通过比对APK的签名情况,判断此APK是否由“官方”发行,而不是被破解篡改过重新签名打包的“盗版软件”。
APK签名比对的应用场景
经过以上的论述,想必大家已经明白签名比对的原理和我的实现方式了。那么什么时候什么情况适合使用签名对比来保障Android APK的软件安全呢?
个人认为主要有以下三种场景:
1、 程序自检测。在程序运行时,自我进行签名比对。比对样本可以存放在APK包内,也可存放于云端。缺点是程序被破解时,自检测功能同样可能遭到破坏,使其失效。
2、 可信赖的第三方检测。由可信赖的第三方程序负责APK的软件安全问题。对比样本由第三方收集,放在云端。这种方式适用于杀毒安全软件或者APP Market之类的软件下载市场。缺点是需要联网检测,在无网络情况下无法实现功能。(不可能把大量的签名数据放在移动设备本地)。
3、 系统限定安装。这就涉及到改Android系统了。限定仅能安装某些证书的APK。软件发布商需要向系统发布上申请证书。如果发现问题,能追踪到是哪个软件发布商的责任。适用于系统提供商或者终端产品生产商。缺点是过于封闭,不利于系统的开放性。
以上三种场景,虽然各有缺点,但缺点并不是不能克服的。例如,我们可以考虑程序自检测的功能用native method的方法实现等等。软件安全是一个复杂的课题,往往需要多种技术联合使用,才能更好的保障软件不被恶意破坏。
校验的具体实现:
1、获取apk中的信息。
X509Certificate certificate = getCertificate();
String pubKey = certificate.getPublicKey().toString();String signNumber = certificate.getSerialNumber().toString();String subjectDN = certificate.getSubjectDN().toString();
2、使用jni本地库校验,防止关键信息泄漏
Native.isSignValid(modulus, signNumber, subjectDN);
3、构建so库与远程aar依赖具体的就是这样,有问题请留言。
- 关于在安卓apk中增加官方签名校验的说明
- 关于安卓apk签名,OTA升级
- 推荐:安卓apk的签名加密
- 安卓去除apk的签名检查
- 关于android apk包签名的简要说明
- 关于apk的签名
- 关于APK的签名
- 安卓apk签名方法
- android 增加自己的应用签名校验
- android 增加自己的应用签名校验
- 安卓签名apk Android signed apk
- APK签名校验绕过
- APK签名校验绕过
- Android APK 签名校验
- APK签名校验分析
- 在pdf中增加签名
- 如何在安卓虚拟机中安装本地的apk
- 关于签名后的apk在真机上未安装的解决方法
- hustoj数据迁移
- POJ 1655 Balancing Act
- Ubuntu12.04安装、配置、远程调试snmp5.4.3
- GIS-OpenLayer3探索:1 . 示例集合
- uva 152
- 关于在安卓apk中增加官方签名校验的说明
- HDU 3652 数位DP
- HTTP学习笔记04-HTTP状态码
- Django提交表单出错”django, CSRF token missing or incorrect”
- UBuntu 编译安装Nginx服务
- 官方API指南之应用基础知识
- android xmlns:tools
- Spring Data ElasticSearch
- Simditor图片上传