移动安全 - 应用完整性校验
破坏完整性实验
完整性校验的目的就是防止Android客户端程序被篡改/二次打包,下面以篡改资源文件为例来做实验:
1. apk解包
解包命令:java -jar apktool_2.5.0.jar d exampleapp.apk -o out
解包结果:
2. 修改源文件
找到first_layout.xml这个文件,也就是第一个activity的布局文件,里面的button原本显示的文字是Button1,现在修改为Button10-modified
3. 重新打包
打包命令:java -jar apktool_2.5.0.jar b -f out -o new.apk
打包完成:
这个包无法直接安装,因为还没有签名,直接安装会报错:
4. 重新签名
java -jar signapk.jar testkey.x509.pem testkey.pk8 new.apk newsign.apk
5. 安装重新签名后的apk
需要先卸载解包前安装的apk,不然会报错。运行app,发现修改成功:
hmmm.....这个就比较危险了,实验中我修改的只是资源文件,解包文件里面也有samil文件,也就是说还可以修改源码,这样的话种个木马,或者反弹个shell是不是也可以实现了。。。
完整性检查方案
其实我也不太懂(以后弄明白了再来更新),查了下相关资料,完整性检查的方案:
1. 检查摘要文件MANIFEST.MF
把修改前的apk解压之后就能找到MANIFEST.MF这个文件:
再把修改之后的apk的这个文件找出来,确实不一样了,而且里面所有文件的签名都不一样:
除了MANIFEST.MF,还可以使用CERT.SF,CERT.RSA
2. 校验classes.dex
用crc32对classes.dex文件的完整性进行校验,最好将crc32的值存在服务器
3. 校验整个apk
用哈希值对整个apk完整性进行校验,最好将哈希值存在服务器
本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。
如需转载,请注明出处,这是对他人劳动成果的尊重。
相关文章
- 一文搞懂docker容器基础:docker镜像管理,docker容器管理
- centos系统和Ubuntu系统命令区别以及常见操作
- centos7 离线升级/在线升级操作系统内核
- Windows启动谷歌浏览器Chrome失败(应用程序无法启动,因为应用程序的并行配置不正确)解决方法
- centos7源码编译安装nginx1.19并调优,向已安装的nginx添加新模块
- 服务器root密码忘记,使用centos7 紧急模式修改root密码
- Centos6/RHEL6下恢复ext4文件系统下误删除的文件
- centos7下xfs文件系统的备份和恢复:完全备份,增量备份,差异备份
- centos7系统的七个运行级别和设置默认运行级别
- log4j日志记录级别
- post请求和get请求区别及其实例
- centos 7网卡配置文件详解(ifcfg-ens33)
- MySQL所有的安装部署方式
- MySQL所有的主从同步架构搭建方式
- 内网服务器离线编译安装mysql5.7并调优
- 从 Redis 表项看 SONiC 架构
- Velero 是怎样对 Kubernetes 资源实现备份还原的?
- Redis实现朋友圈,微博等Feed流功能,实现Feed流微服务(业务场景、实现思路和环境搭建)
- 马上都2023了,但是CNS级别单细胞文章仍然是使用monocle2
- 使用Mosquitto实现MQTT客服端C语言