文档章节

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

阿里聚安全
 阿里聚安全
发布于 2016/08/01 17:16
字数 721
阅读 13
收藏 0
点赞 0
评论 0

作者:寻禹@阿里聚安全 ##APK签名校验分析 找到PackageParser类,该类在文件“frameworks/base/core/java/android/content/pm/PackageParser.java”中。PackageParser类的collectCertificates方法会对APK进行签名校验,在该方法会遍历APK中的所有文件,并对每个文件进行校验。下面是该方法的部分源码: 1

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

上面代码中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方法,下面是它的代码: 3

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

当证书读取成功,并且当前APK经过了签名,则isSigned为true。 回到StrictJarFile.getCertificateChains方法中,当isSigned为true时会调用JarVerifier.getCertificateChains方法,下面是它的代码: 5

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

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

将上面代码catch块中的throw语句替换为:return null; 下面是修改后的代码: 8

代码修改完后,当APK中文件签名校验失败时不会抛出异常,APK还会继续安装。 ###源码修改点二 找到PackageParser.collectCertificates方法,找到代码中调用loadCertificates方法的地方: 9

将上面的throw语句替换为:continue; 修改后的代码: 10

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

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

© 著作权归作者所有

共有 人打赏支持
阿里聚安全
粉丝 26
博文 89
码字总数 191047
作品 0
杭州
Android5.1.1 - APK签名校验分析和修改源码绕过签名校验

Android5.1.1 - APK签名校验分析和修改源码绕过签名校验 作者:寻禹@阿里聚安全 APK签名校验分析 找到PackageParser类,该类在文件“frameworks/base/core/java/android/content/pm/PackageP...

阿里聚安全 ⋅ 2016/08/01 ⋅ 0

不歪 - 自定义ROM文章索引贴

不歪 - 自定义ROM文章索引贴 @(Android研究)[自定义ROM] [TOC] 不歪博客:http://my.oschina.net/ibuwai/blog 前言 我为了方便逆向分析自定义了一个ROM,下面是自定义ROM过程中写的技术分享文...

i不歪 ⋅ 2016/07/28 ⋅ 0

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

Android5.1.1 - APK签名校验分析和修改源码绕过签名校验 @(Android研究)[APK签名校验 绕过签名校验] 不歪博客:http://my.oschina.net/ibuwai/blog 本文公开首发于阿里聚安全博客:https://j...

i不歪 ⋅ 2016/07/25 ⋅ 0

Android安全开发之通用签名风险

Android安全开发之通用签名风险 作者:伊樵、舟海、呆狐@阿里聚安全 1 通用签名风险简介 1.1 Android应用签名机制 阿里聚安全漏洞扫描器有一项检测服务是检测APP的通用签名风险。Android系统...

阿里聚安全 ⋅ 2016/08/08 ⋅ 0

独家分析:安卓“Janus”漏洞的产生原理及利用过程

近日,Google在12月发布的安卓系统安全公告中披露了一个名为“Janus”安卓漏洞(漏洞编号:CVE-2017-13156)。该漏洞可以让攻击者绕过安卓系统的signature scheme V1签名机制,进而直接对App...

顶象技术 ⋅ 2017/12/11 ⋅ 0

“核弹级”Android漏洞Janus,黑客可以任意篡改App

美国时间12月9日,Google披露了一个名为“Janus”安卓漏洞。该漏洞可以让攻击者绕过安卓签名机制,从而让攻击者对App进行篡改,安卓5.0到8.0等个版本系统均受影响。 顶象安全专家提醒广大安卓...

顶象技术 ⋅ 2017/12/11 ⋅ 0

小小的分享,关于打车apk的安全分析报告!

最近发现打车软件的apk非常的火,并听说他们进行了非常严密的防护,防止用户进行二次打包。今天我们来分析一下他的安全性到底如何(以司机版为例)。 经过严密的分析发现:司机版主要的防护在...

科技创造 ⋅ 2014/08/30 ⋅ 6

Janus签名漏洞(CVE-2017-13156)原理与利用分析

  *本文原创作者:Tasfa,本文属FreeBuf原创奖励计划,未经许可禁止转载   0×00 简介   前言:去年比较严重的洞,以比较浅显的方式学习记录一下,网上有很多其他深度分析文章,也可借...

FreeBuf ⋅ 05/17 ⋅ 0

带你了解腾讯开源的多渠道打包技术 VasDolly源码解析

一、概要 大家应该都清楚,大家上线app,需要上线各种平台,比如:小米,华为,百度等等等等,我们多数称之为渠道,如果发的渠道多,可能有上百个渠道。 针对每个渠道,我们希望可以获取各个...

鸿洋 ⋅ 04/19 ⋅ 0

android签名机制(4)——签名过程简析

接着上篇,继续来分析签名过程,先看张简易的时序图: 主要对签名时的命令行进行分析: java -jar signapk.jar platform.x509.pem platform.pk8 .apk *.apk 注:如果对已签名的apk执行该命令...

thearyong ⋅ 2014/03/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iExec Blockchain Marketplace for Cloud

iExec Releases the First-Ever Blockchain Marketplace for Trading Cloud Computing Berlin, Germany, May 29, 2018. iExec has released its blockchain-based decentralized cloud marke......

openthings ⋅ 8分钟前 ⋅ 0

OSChina 周二乱弹 —— 加班的代码不要枉费了我的童子功

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《29》- 未完成乐队 《29》- 未完成乐队 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :#看球提醒# 02:00 巴西v...

小小编辑 ⋅ 28分钟前 ⋅ 11

Docker Swarm的前世今生

概述 在我的《Docker Swarm集群初探》一文中,我们实际体验了Docker Swarm容器集群技术的魅力,与《Kubernetes实践录》一文中提到的Kubernetes集群技术相比,Docker Swarm没有Kubernetes显得...

CodeSheep ⋅ 今天 ⋅ 0

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 今天 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部