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安全漏洞检测平台:爱内测([url]www.ineice.com[/url]),能检测程序可执行文件Dex是否做加密保护处理,给出修复建议,防止被dex2jar等工具反编译。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值