Dex文件的完整性校验

  classes.dex 在 Android 系统上基本负责完成所有的逻辑业务,因此很多针对Android 应用程序的篡改都是针对 classes.dex 文件的。在 APK 的自我保护上,也可以考虑对 classes.dex文件进行完整性校验,简单的可以通过 CRC 校验完成,也可以检查 Hash 值。由于只是检查classes.dex,所以可以将 CRC 值存储在 string 资源文件中,当然也可以放在自己的服务器上,

  通过运行时从服务器获取校验值。基本步骤如下:

  首先在代码中完成校验值比对的逻辑,此部分代码后续不能再改变,否则 CRC 值会发生变化;

  从生成的 APK 文件中提取出 classes.dex 文件,计算其 CRC 值,其他 hash 值类似;

  将计算出的值放入 strings.xml 文件中。

  核心代码如下:

  代码:

  1. String apkPath = this.getPackageCodePath();

  2. Long dexCrc = Long.parseLong(this.getString(R.string.dex_crc));

  3. try {

  4. ZipFile zipfile = new ZipFile(apkPath);

  5. ZipEntry dexentry = zipfile.getEntry("classes.dex");

  6. if(dexentry.getCrc() != dexCrc){

  7. System.out.println("Dex has been *modified!");

  8. }else{

  9. System.out.println("Dex hasn‘t been modified!");

  10. }

  11. } catch (IOException e) {

  12. // TODO Auto-generated catch block

  13. e.printStackTrace();

  14. }

  但是上述的保护方式容易被暴力破解,完整性检查最终还是通过返回true/false 来控制后续代码逻辑的走向,如果攻击者直接修改代码逻辑,完整性检查始终返回 true,那这种方法就无效了,所以类似文件完整性校验需要配合一些其他方法,或者有其他更为巧妙的方式实现。那么我们可以借用第三方apk安全漏洞检测平台:爱内测,能检测程序可执行文件Dex是否做加密保护处理,给出修复建议,防止被dex2jar等工具反编译。

时间: 2024-10-20 08:31:32

Dex文件的完整性校验的相关文章

CentOs文件的完整性校验

linux md5sum hero.png fefd01c9db6e3e83b978eff1b7a67c02 hero.png sha1sum hero.png f1e929db9cef34a8786ee4b6246fb739566c799d hero.png sha256sum hero.png 5b654b2297f17d9106388db31c1190240cfb359144925e892468b40d692c780f hero.png windows E:\>certutil -hash

android apk 防止反编译技术第五篇-完整性校验(转)

一.完整性校验原理 所谓完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改.其中常用的方法就是计算一个文件的CRC32的值或者计算一个文件的哈希值.我们在防止apk被反编译的方法中也可以采用这种方法.我们知道apk生成的classes.dex主要由java文件生成的,它是整个apk的逻辑实现.所以我们可以对classes.dex文件进行完整性校验,来保证整个程序的逻辑不被修改.如果我们想要保证整个apk文件的完整性,也可以对整个apk文件进行完整性校验.下面我们分别来实现对c

android apk 防止反编译技术第五篇-完整性校验

关于防止android apk被反编译的技术我们前面已经讲了四种. 加壳技术 运行时修改字节码 伪加密 对抗JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍.接下来我们接着介绍另一种防止apk反编译的技术-完整性校验. 一.完整性校验原理 所谓完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改.其中常用的方法就是计算一个文件的CRC32的值或者计算一个文件的哈希值.我们在防止apk被反编译的方法中也可以采用这种方法.我们知道apk生成的classes

android apk 自我保护技术-完整性校验

关于防止android apk被反编译的技术我们前面已经讲了四种. 加壳技术 运行时修改字节码 伪加密 对抗JD-GUI 如果有不明白的可以查看我的博客的前四篇中关于这四种技术的介绍.接下来我们接着介绍另一种防止apk反编译的技术-完整性校验. 一.完整性校验原理 所谓完整性校验就是我们用各种算法来计算一个文件的完整性,防止这个文件被修改.其中常用的方法就是计算一个文件的CRC32的值或者计算一个文件的哈希值.我们在防止apk被反编译的方法中也可以采用这种方法.我们知道apk生成的classes

Linux下校验下载文件的完整性(MD5,SHA1,PGP)

查看: Linux下校验下载文件的完整性(MD5,SHA1,PGP) http://blog.useasp.net/archive/2014/03/29/use-md5-sha1-or-pgp-to-check-downloaded-file-integrity-on-linux.aspx Linux下的学习开始总是艰难的,但有的时候,却发现Linux下远比Windows的操作来的实在的多——这下载文件的完整性就是其中一件,让本人觉着很爽的一件事情.在编译安装各种软件的时候,总要到各个网站上收集

[Android] 配置安卓模拟器,使得dex文件不被优化成odex

最近做一个模块,需要将apk里面加载的dex文件dump出来,所以需要配置让dalvik不要把dex文件优化成odex. 1. 配置build.prop 主要是通过修改文件/system/build.prop里面的配置. (1) dalvik.vm.dexopt-flags 本参数控制Dalvik虚拟机的程序代码校验和优化.可填写的值有m.v和o.m为标准选项,可以是m=y或m=n.若m=y则启用不安全代码的校验和托管代码的优化.兼容性和安全性最高.v为校验选项,可与o并存.可以是v=a或v=n

浅析dex文件加载机制

我们可以利用DexClassLoader来实现动态加载dex文件,而很多资料也只是对于DexClassLoader的使用进行了介绍,没有深入讲解dex的动态加载机制,我们就借助于Android4.4的源码来探索.先从一个简单的动态加载dex文件开始 具体实现细节可以参考这篇文章AndroidDex数据动态加载技术 Android4.4的源码在百度网盘分享: Android 4.4源码下载 先是我们要封装到text.jar文件中的很简单的调用函数,只是简单的产生Toast: /* * 对外接口 *

Python3解析dex文件

一.说明 1.1 背景说明 看<加密与解密>的时候反复听说"PE文件格式",到Android安全兴起就不断听说"dex文件格式".意思是看得懂的,但自己不能手解析一番总觉得不踏实,所以决定写个程序来解析一番. 本文其实算是姜维的Android逆向之旅---解析编译之后的Dex文件格式的Python实现版. 1.2 dex文件格式说明 类似exe文件是windows上的可执行文件,dex文件就是android中的可执行文件:pe格式是exe文件的格式,de

如何在Linux中使用AIDE监控文件的完整性

简介 AIDE(高级入qin检测环境)是文件完整性检查程序和入qin检测程序. 特性 主要用途是检查文件的完整性,审计计算机上哪些文件被更改过. AIDE根据从/etc/aide.conf配置文件中找到的正则表达式规则创建数据库.初始化该数据库后,就可以用来验证文件的完整性.还可以检查所有通常的文件属性是否存在不一致.它可以读取旧版本或更新版本的数据库.AIDE数据库能够保存文件的各种属性,包括:权限(permission).索引节点序号(inode number).所属用户(user).所属用