android digest 认证,探究 Android 签名机制和原理

背景

最近在调研一个测试工具的使用,在使用中发现被测试工具处理过的apk文件经安装后打开就会崩溃,分析崩溃日志后原因是签名不一致导致的。

说到Android中的签名,可能大家都知道签名的目的就是为了保护apk文件的安全,如果apk被恶意篡改后经过安装校验的时候,就会出现校验失败,导致安装包安装失败的情况。但如果更深去问一下Android签名机制和原理,是不是就被问住了?接下来的就让我们去探究Android签名机制和原理。

bd14a159f349fdde9d2c585cf50f3c15.png

Android 签名机制和原理

Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名文件不存在或者校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名。给APK签名可以带来以下好处:

应用程序升级如果想无缝升级一个应用,Android系统要求应用程序的新版本与老版本具有相同的签名与包名。若包名相同而签名不同,系统会拒绝安装新版应用。

应用程序模块化Android系统可以允许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们作为一个单个的应用程序。此时就可以把我们的应用程序以模块的方式进行部署,而用户可以独立的升级其中的一个模块。

代码或数据共享Android提供了基于签名的权限机制,一个应用程序可以为另一个以相同证书签名的应用程序公开自己的功能与数据,同时其它具有不同签名的应用程序不可访问相应的功能与数据。

应用程序的可认定性签名信息中包含有开发者信息,在一定程度上可以防止应用被伪造。例如网易云加密对Android APK加壳保护中使用的“校验签名(防二次打包)”功能就是利用了这一点。

签名的目的:

1. 对发送者的身份认证:

由于开发商可能通过使用相同的package name来混淆替换已经安装的程序,以此保证签名不同的包不被替换。

2. 保证信息传输的完成性:

签名对于包中的每个文件进行处理,以此确保包中内容不被替换。

3. 防止交易中的抵赖发生,market对软件的要求。

签名原理:

简单来说总体分为以下几个步骤:

1. 对Apk中的每个文件做一次算法(数据摘要+Base64编码),保存到MAINFEST.MF

2. 对MAINFEST.MF整个文件做一次算法(数据摘要+B阿瑟64编码),存放到CERT.SF文件的头属性中,在对MAINFEST.MF文件中各个属性块做一次算法(数据摘要+Base64编码),存放到一个属性块中。

3. 对CERT.SF文件做签名,内容存档到CERT.RSA中

对一个APK文件签名之后,APK文件根目录下会增加META-INF目录,该目录下增加三个文件,分别是:MANIFEST.MF、CERT.SF和CERT.RSA,以下是具体的流程:

MANIFEST.MF

这是摘要文件,文件中保存了APK里面所有文件的SHA1校验值的BASE64编码,格式如下(一个文件对应一条记录)。如果改变了APK包中的文件,在apk安装校验时,改变后的文件摘要信息与 MANIFEST.MF 的检验信息不同,程序就不会安装成功。假如攻击者修改了程序的内容,又重新生成了新的摘要,就可以通过验证。

Name: AndroidMainfest.xmlSHA1-Digest: incCj47jcu56R8pKV8dLACZBKD8=Name: META-INF/android.arch.core_runtime.versionSHA1-Digest: BeF7ZGqBckDCBhhvlPj0xwl01dw=

CERT.SF

这是对摘要的签名文件,对前一步生成的MANIFEST.MF,使用SHA1-RSA算法,用开发者的私钥进行签名。在安装时只能使用公钥才能进行解密。解密之后,与未加密的MANIFEST.MF进行对比,如果相符,则表明内容没有被异常修改。如果在这一步,开发者修改了程序内容,并生成了新的摘要文件,但是攻击者没有开发者的私钥,所以不能生成正确的签名文件。系统在对程序进行验证的时候,用开发者公钥对不正确的签名文件进行解密,得到的结果和摘要文件对应不起来,导致不能通过检验,不能成功安装文件。文件格式如下:

Name: AndroidMainfest.xmlSHA1-Digest: SyFsd2VUpCg4nq8jSOB7dBwuMyI=Name: META-INF/android.arch.core_runtime.versionSHA1-Digest: OPQCkzMXJVPQryHeMowVNZmfRMw=

CERT.RSA

该文件中保存了公钥、所采用的加密算法等信息。

从上面的内容来看,Android系统就是根据这三个文件的内容对APK文件进行签名检验的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532977.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html图片拼接出现留白,关于img标签周围留白的问题

在进行页面的DIV CSS排版时,遇到IE6浏览器中的图片元素img下出现多余空白的问题绝对是常见的,对于该问题的解决方法也是“见机行事”。1、将图片转换为块级对象即,设置img为“display:block;”。在本例中添加一组CSS代码:“#sub i…

html5中的行高元素,详解HTML元素的height、offsetHeight、clientHeight、scrollTop等梳理

关于元素的一些属性在前端的日常开发中,我们经常无可避免的需要获取或者监听一些页面的属性,那么我们需要经常了解一些属性代表的含义才能更好地使用这些属性。特别是一下这些:尺寸相关:offsetHeight、clientHeight、scrollHeight…

pm2 start 带参数_3款有海景天窗的国产SUV,最适合带女朋友看星星,首付3万拿下...

夏天就这么缓缓地来了,在某一个周末的晚上,约上心爱的女朋友,开上车子,一路上驰骋在无人的大桥上,放上音乐,开到目的地,打开天窗,看看星星,从诗词歌赋谈到人生哲学&#…

html仿京东快速购物导航,jQuery仿京东楼层滑动侧边栏高亮(原创)

插件描述:jQuery模仿京东侧边栏点击滑动到该楼层,同时侧边栏随着页面滚动对应导航高亮。更新时间:2017/9/30 下午2:48:37更新说明:1,添加了查看评论按钮来改变对应区的高度2,将floorList和navList作为匿名函…

华为云大数据存储的冗余方式是三副本_华为TaurusDB技术解读(转载)

近日,华为云自研关系型数据库 Taurus 公开亮相。作为华为云自研的最新一代云原生分布式数据库,Taurus 完全兼容 MySQL 8.0,采用计算与存储分离、日志即数据的架构设计,支持 1 写 15 读,性能达到原生 MySQL 的 7 倍。性…

spring html访问统计,spring-mvc访问本地html文件(示例代码)

项目中要用到在线预览word文档,刚开始考虑是要将word转成pdf文件,然后再直接在浏览器打开pdf文档即可,但是项目部署在Linux下,在网上搜了一下没有找到合适的方法,后来项目组讨论用POI生成HTML文件,但是生成…

unity 是厘米还是米_乔丹19岁才1.75米,2年增高近20公分,这个长高方法你能坚持多久...

相信现在有很多的人希望自己在长大之后能去NBA打篮球,但是因为种种原因,最后还是放弃了这个想法, 很多人是因为自己的身体素质达不到要求,比如说天赋上没有达到一个篮球运动员的身高,还有的是因为自己家庭的原因最后放…

win7变成xp风格了怎么改回_微软看了会沉默,把 Windows 10 变成经典 98 风格

众所周知「Windows 10」官方提供的主题都只是换换壁纸,所以喜欢折腾的小伙伴会选择用「UltraUXThemePatcher」来让「Windows 10」支持第三方主题,实现模仿各种风格,如 macOS、Win7、Ubuntu 等。但是由于「Windows 10」版本太多,导…

2021广东高考成绩排名如何查询,2021年广东高考个人排名怎么查询,广东高考成绩排名查询方法...

高考成绩公布后,很多家长和学生咨询我们,广东高考个人成绩排名位次如何查询:广东高考成绩排名,可以通过省招生考试院发布的广东一分一段表来查询,也可以到聚志愿网站直接输入分数查询,一分一段它显示每一个…

区块如何防篡改_深入浅出:一条数据是如何完成上链的

一笔业务数据在区块链处理的流程大致分为三个阶段:分别是上链前处理阶段、链上处理阶段和智能合约处理阶段。一.上链前处理阶段业务数据上链前需要将业务数据处理,并且对信息进行签名。这些过程可以通过对应的工具,比如序列化工具和各种椭圆曲…

锁定计算机在哪里设置方法,怎样锁定电脑?如何设置电脑锁屏【步骤详解】

我们在日常使用电脑的时候,特别是自己的私人电脑时,难免会遇到上个厕所接个水之类的杂事需要离开位置的,也许可能就一两分钟不到的时间,这么点的时间如果关机的话又觉得实在是太麻烦了,但是又不想让其它的人知道我们的…

python 安装html,python安装glob

python 里面的glob模块是怎么用的新手刚学这一块内容,不是很懂 这个模块可以用来统计每个类型物品的统计glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,就类似于Windows下的文件搜索,支持通配符操作,…

hough变换检测圆周_Python OpenCV 霍夫变换

霍夫变换(Hough Transform)是图像处理中的一种特征提取技术,它通过一种投票算法检测具有特定形状的物体。Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达…

关于未来计算机的想象作文600字,未来世界的想象作文600字

我背着书包漫无目的地走在街上,刚要出门的时候突然出现了一个大洞,我本想上前一看究竟,结果被石子绊了下去,一下就落进了那个黑洞里,我的世界陷入了一片黑暗。不知过了多久,我眼睛好不容易看到一丝光亮&…

creator qt 字体太小_qt ttf 字体太小的解决方法

编译完成qt以后,发现qt的字体太小了原因是qt的dpi计算错误,这样的情况会导致qt在不同的平台上大小不一解决的方法就是设置好qt的dpi,qt是根据显示器的物理长度或者宽度于分辨率的关系来计算dpi的,所以我们设置exportQWS_DISPLAY"LinuxFB:mmWidth95:0"export QWS_SIZE…

当前超级计算机的应用方兴未艾,四川省若尔盖县高三下学期语文模拟卷(五)

四川省若尔盖县高三下学期语文模拟卷(五)姓名:________ 班级:________ 成绩:________一、选择题 (共3题;共6分)1. (2分)(2017海南模拟) 下列各句中划线成语的使用,全都正确的一项是()①与做人一样,李天来对待试验同样谨小慎微。他说&#xff…

easyui中onchange事件_React中类似Vue的“模板语法”

一、数据绑定类似 Vue 的 v-model,this.state { val: 1, companies: ["阿里巴巴", "腾讯", "百度", "京东"], };companyNameUpdate(e) { this.setState({ companyName: e…

html5着陆页模板,多用途着陆页HTML模板

资源下载此资源下载价格为5D币,请先登录资源文件列表apnew/css/animate.css , 74096apnew/css/bootstrap.min.css , 121260apnew/css/font-awesome.min.css , 27466apnew/css/jquery-ui.css , 36437apnew/css/jquery.carousel-3d.default.css , 3639apnew/css/mater…

php十六进制字符串转成字节数组_10 天 5 千 Star!21 岁本科生给程序员开发的十六进制编辑器...

【导语】:ImHex 是一款界面美观的十六进制编辑器,主要面向逆向工程师和程序员。如果你喜欢暗黑系编辑器,那它应该是你的菜。ImHex 最近在 GitHub 上非常火热,上架五天就收获了 2.5k Star,十天 5k Star。开发者介绍ImHe…

ie11用不了html5,HTML5拖放不能在IE11上运行

应用HTML5原生拖放功能,drop不适用于IE,与chrome和firefox配合使用。拖动似乎正在起作用,但对IE不感兴趣。另一个小问题 - 在IE中,我的可拖动元素周围有一个半透明的方块,但它的背景是透明的(图像是这样完成的)&#x…