浏览 3643 次
锁定老帖子 主题:Dex文件的完整性校验
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2015-09-15
最后修改:2015-09-15
通过运行时从服务器获取校验值。基本步骤如下: 首先在代码中完成校验值比对的逻辑,此部分代码后续不能再改变,否则 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安全漏洞检测平台:爱内测(http://www.ineice.com/),能检测程序可执行文件Dex是否做加密保护处理,给出修复建议,防止被dex2jar等工具反编译。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |