博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dex、apk完整性校验
阅读量:6231 次
发布时间:2019-06-21

本文共 956 字,大约阅读时间需要 3 分钟。

对Dex进行完整性的检查,可通过CRC,或者Hash值。可将校验值放到String资源文件里,或者放到服务器中。
  1. 在代码中完成校验值对比逻辑,此部分代码后续不能再改变,否则CRC值会发生变化;
  2. 从生成的APK文件中提取出classes.dex文件,计算CRC值,或Hash值,
  3. 将计算出的值放入strings.xml文件中
string apkPath=this.getPackageCodePath();
Long dexCRC=Long.parseLong(this.getString(R.string.dex_crc));
try{
     ZipFile zipfile=new ZipFile(apkPath);
     ZipEntry dexentry=zipfile.getEntry("classes.dex");
         
     if(dexentry.getCrc()!=dexCRC){ //代码逻辑中,进行校验
          System.out.println("Dex has been modified!");
     }else
     ...
破解方法:逻辑判断的true/false容易更改

对APK的完整性校验:Hash值放在服务端比较合适。
MessageDigest msgDigest=null;
try{
     msgDigest= MessageDigest.getInstance("md5");
     byte[] bytes=new byte[8192];
     int byteCount;
     FileInputStream fis=null;
     fis =new FileInputStream(new File(apkpath));
     
     while((byteCount=fis.read(bytes))>0){
           msgDigest.update(bytes,0,byteCount);
           BinInteger bi=new BigInteger(1,msgDigest.digest());
          String md5 =bi.toString(16);
          fis.close();
     
      //从服务器获取Hash值并进行比较
     ...
}

转载于:https://www.cnblogs.com/littlefishxu/p/3969199.html

你可能感兴趣的文章
[翻译]编写你的首个Django app, part 4
查看>>
SpringMVC源码总结(八)类型转换PropertyEditor的背后
查看>>
WampServer中Apache使用FastCGI模式跑PHP5.3nts版
查看>>
Oracle查询表空间使用情况
查看>>
自定义Django命令
查看>>
Redis及其安装配置
查看>>
XCODE 6.1 创建新白空应用
查看>>
Mac下查看端口占用
查看>>
DB2 启用QUIESCE模式
查看>>
C Primer Plus 第8章 字符输入/输出和输入确认 8.3 重定向和文件
查看>>
20160215--新的一年,新的起点。加油!
查看>>
使用class-validator替换Joi包的方法
查看>>
Android 实现类似考试座号表效果
查看>>
MySQL启动与停止[Linux]
查看>>
Go实现FastCgi Proxy Client 系列(四) keep-alive实现
查看>>
程序员必备神器
查看>>
解析:Parallels给Mac电脑带来的好处
查看>>
skycc淘宝客推广软件 V8.2免费版
查看>>
Navicat for MySQL 11 Mac安装教程
查看>>
Navicat 如何调整栏位结构
查看>>