zoukankan      html  css  js  c++  java
  • 移动安全

    破坏完整性实验

    完整性校验的目的就是防止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完整性进行校验,最好将哈希值存在服务器

    本文仅用于技术学习和交流,严禁用于非法用途,否则产生的一切后果自行承担。

    如需转载,请注明出处,这是对他人劳动成果的尊重。

  • 相关阅读:
    C#密封类和密封方法
    C#类和结构以及堆和栈大烩菜(本来就迷,那就让暴风来的更猛烈吧!)
    C#类、对象、方法、属性详解(摘)感谢博客园,感谢提供者。
    软件工程第十五周总结
    软件工程课堂十一(计算最长英语单词链)
    软件工程第十四周总结
    梦断代码阅读笔记03
    软件工程课堂十(找水王)
    软件工程课堂九(用户体验评价)
    软件工程第十三周总结
  • 原文地址:https://www.cnblogs.com/sallyzhang/p/14621555.html
Copyright © 2011-2022 走看看