开发者社区> 聚安全平台> 正文

Android5.1.1 - APK签名校验分析和修改源码绕过签名校验

简介: 本文主要分享APK签名校验分析和绕过签名校验源码修改点。
+关注继续查看

Android5.1.1 - APK签名校验分析和修改源码绕过签名校验


作者:寻禹@阿里聚安全


APK签名校验分析

找到PackageParser类,该类在文件“frameworks/base/core/java/android/content/pm/PackageParser.java”中。PackageParser类的collectCertificates方法会对APK进行签名校验,在该方法会遍历APK中的所有文件,并对每个文件进行校验。下面是该方法的部分源码:

APK是一个ZIP格式的文件所以使用ZIP相关的类进行读写。上面代码中调用了loadCertificates方法,这个方法返回一个二维数组,如果APK中的文件签名校验失败那么loadCertificates方法会返回一个空数组(可能是null,可能是数组长度为0),按照上面代码的逻辑如果数组为空则会抛出异常。

loadCertificates方法的代码见下:

上面代码中is是JarFile.JarFileInputStream类的对象。loadCertificates方法中调用了readFullyIgnoringContents方法,在readFullyIgnoringContents方法中会调用JarFile.JarFileInputStream.read方法读取APK中一项的数据,在read方法中会校验读取到的数据项的签名,如果签名校验失败,则会抛出SecurityException类型的异常,即签名校验失败。

JarFile类在“libcore/luni/src/main/java/java/util/jar/JarFile.java”文件中。

上面代码中调用了StrictJarFile.getCertificateChains方法,下面是它的代码:

上面代码中isSigned的值是这么来的:

当证书读取成功,并且当前APK经过了签名,则isSigned为true。

回到StrictJarFile.getCertificateChains方法中,当isSigned为true时会调用JarVerifier.getCertificateChains方法,下面是它的代码:

下面是类成员变量verifiedEntries的声明:


verifiedEntries是一个键值对,键是APK中经过了签名的文件名,如:classes.dex文件,值是证书数组。如果向已经签过名的APK中新添加一个文件然后安装这个APK,当程序逻辑执行到JarVerifier.getCertificateChains方法中时,在verifiedEntries变量中无法找到新添加的文件名(因为这个新文件是在APK签名之后添加),那么JarVerifier.getCertificateChains方法将返回null。


绕过签名校验

源码修改点一

找到PackageParser.loadCertificates方法,下面是部分源码:

将上面代码catch块中的throw语句替换为:return null;

下面是修改后的代码:

代码修改完后,当APK中文件签名校验失败时不会抛出异常,APK还会继续安装。

源码修改点二

找到PackageParser.collectCertificates方法,找到代码中调用loadCertificates方法的地方:

将上面的throw语句替换为:continue;

修改后的代码:

代码修改完后,当遇到APK中没有经过签名的文件时不会抛出异常,APK还会继续安装。


作者:寻禹@阿里聚安全,更多Android技术文章,请访问阿里聚安全博客


阿里聚安全由阿里巴巴移动安全部出品,面向企业和开发者提供企业安全解决方案,全面覆盖移动安全、数据风控、内容安全、实人认证等维度,并在业界率先提出“以业务为中心的安全”,赋能生态,与行业共享阿里巴巴集团多年沉淀的专业安全能力。


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android 源码编译更换平台签名
Android 源码编译更换平台签名
153 0
Android 空包签名(详细版)
Android 空包签名(详细版)
290 0
android连真机签名公网ip更新方案
android连真机签名公网ip更新方案
82 0
Android V1及V2签名原理简析
Android V1及V2签名原理简析
552 0
Android手绘签名
Android手绘签名
107 0
细说Android apk四代签名:APK v1、APK v2、APK v3、APK v4
大部分开发者对apk签名还停留在APK v2,对APK v3和APK v4了解很少,而且网上大部分文章讲解的含糊不清,所以根据官网文档重新整理一份。 apk签名从APK v1到APK v2改动很大,是颠覆性的,而APK v3只是对APK v2的一次升级,APK v4则是一个补充。 本篇文章主要参考Android各版本改动: developer.android.google.cn/about/versi…
479 0
Android APK 加固重新签名
打包APK通过 ./gradlew assembleRelease 命令打包,此时的apk没有加固,不符合安全需要。登录腾讯云执行加固操作,加固使用 腾讯云 -> 移动应用安全 -> 应用安全 加固方案,加固服务需要认证,自行选择适合自己的方式就行了。
408 0
【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )
【Android 逆向】逆向修改游戏应用 ( APK 解析工具 | 解包 -> 分析 -> 重打包 -> 签名 流程 )
445 0
【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )(二)
【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )(二)
108 0
【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )(一)
【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )(一)
117 0
+关注
聚安全平台
阿里聚安全是一个移动安全开放平台,凝聚阿里巴巴多年来在无线业务安全防御的成功经验和技术成果,并面向开发者和企业提供恶意代码检测、漏洞扫描、仿冒应用检测、应用加固、安全组件等服务,一站式解决应用的安全问题。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
蚂蚁聚宝Android秒级编译——Freeline
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关镜像