180523 安卓-DDCTF(详细复现版)

本文详细复现了安卓安全挑战DDCTF的过程,涉及内容包括热更新框架Robust的分析,补丁逻辑理解,Diffie-Hellman算法与ECC椭圆曲线加密的解密,以及动态调试和破解密钥的技术应用。文章通过实例讲解了如何通过反编译、动态调试等手段解决挑战中的各类问题。

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

Hello Baby Dex

jeb反编译发现不少第三方库,其中一个com.meituan.robust包搜索一下可以发现是美团开发的一个开源热更新框架
参照使用教程可以发现补丁的位置在PatchExecutor类调用的PatchManipulateImp类中的fetchPatchList方法中调用的setLocalPath方法处设置
于是跟着去找
cn.chaitin.geektan.crackme.PatchManipulateImp.fetchPatchList方法

这里可以发现读取了GeekTan.BMP的数据
setLocalPath在下面一点儿,同样也是将GeekTan设置为文件路径

于是去assets文件夹中把这个文件扒出来,查看发现是zip结构,解压得到DEX文件
(话是这么说,能塞私货的地方其实也只有assets文件夹了。所以作为题目而言看到热补丁就可以直接去这找,反正又不可能联网更新233)
处理dex文件,用jeb/dex2jar+jd-gui都可以

再往下分析补丁,大部分教程的方法都是借助插件直接生成Patch.jar,而不提及具体内部原理,因此要分析补丁还是要找原理解析的文章

PatchExecutor开启一个子线程,通过指定的路径去读patch文件的jar包,patch文件可以为多个,每个patch文件对应一个 DexClassLoader 去加载,每个patch文件中存在PatchInfoImp,通过遍历其中的类信息进而反射修改其中 ChangeQuickRedirect 对象的值。

在补丁中的PatchInfoImp中找到这样两句,说明了补丁的类分别是MainActivity和MainAcitivity$1

localArrayList.add(new PatchedClassInfo("cn.chaitin.geektan.crackme.MainActivity", "cn.chaitin.geektan.crackme.MainActivityPatchControl"));
localArrayList.add(new PatchedClassInfo("cn.chaitin.geektan.crackme.MainActivity$1", "cn.chaitin.geektan.crackme.MainActivity$1PatchControl"));

PatchControl类用来控制Patch,没有具体方法,可以忽略
两个Patch类中则是关键的更新方法
首先是MainActivity$1中的onClick方法

发现有很多EnhancedRobustUtils.invokeReflectMethod
搜索一下可以发现解释

EnhancedRobustUtils是一个对反射的封装类,可以反射指定对象的指定字段和方法。比如说((Integer)Enha

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值