【移动安全基础篇】——24、Odex修复方法

本文详细解析了Dex文件的优化与校验过程,包括Dex转Odex、优化函数dvmOptimizeClass、校验函数dvmVerifyClass等关键步骤。同时,通过360壳的Demo演示了如何寻找脱壳点、分析加载前后Dex文件的变化及反编译差异,深入探讨了Android系统对Dex文件的优化机制及其对反编译的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Dex 转 转 Odex
优化:vm/analysis/Optimize.cpp --> dvmOptimizeClass

2. Dex  校验
vm/analysis/DexVerify.cpp --> dvmVerifyClass

3.  取消非必要优化与校验
/system/build.prop
Dalvik.vm.dexopt-flag=v=n, o=n

4. Demo  演示(360  壳)
寻找脱壳点(手动调试)

使用脚本分析加载了多少 dex 文件

找到脱壳点 JNI_OnLoad2 并执行脚本,dump 出原始 dex 文件

加载前后的 dex 文件数据比较

产生区别的原因:Android 系统对 dex 文件的优化,优化后的 dex 文件反编译和运行都会出异常。
反编译为 smali 之后二者的对比

可以看出程序的逻辑已经改变了,分析源码查看优化和校验的具体操作
5.  分析 dvmOptimizeClass

通过 while 中的 switch 判断来对所有能进行 opcode 的代码进行优化

6.  分析 dvmVerifyClass

如果校验失败则返回 false,显示校验失败并且不会加载

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值