dalvik下替换so简单dump出梆梆加固保护的odex

本文介绍了如何在梆梆加固的Android应用中,通过替换libDexHelper.so来dump出解密后的classes0.jar/.dex。讨论了动态调试的困难,提出了一种直接替换so的方法,详细阐述了dump过程,包括解密、内存映射和dex解析等步骤,最终成功获取到core.odex文件。
摘要由CSDN通过智能技术生成
  • 由于保护技术更迭迅速,不保证本文方法适用于后续或者其它版本的梆梆加固,需要读者自行测试。

        梆梆加固后的apk,里面的classes.dex只是个外壳,负责加载libDexHelper.so,而真正的dex被加密放在了\assets\classes0.jar,这不是常规的jar文件无法直接解压,我们的目标就是从内存中dump出解密后的classes0.jar/.dex(并进行适当修复)。

        内存dump的方案有很多, 比如直接dd、DexHunter等,但都有一些缺点,dd需要内存地址和大小,这就要求进行暴力搜索,但是内存完全可能被处理过,dump时机很难掌握,于是转到动态调试期望在关键点下断,但由于反调试对抗的存在又会有一堆麻烦;DexHunter很强大,但它要求定制系统,这对逆向工程来说当然不是事,只是同样有针对DexHunter类似原理的对抗,比如检测不安全ROM,等等这些都会带来不必要麻烦,本文提供的方法似乎直接跳过了这些坑。

        其实,无论是DexHunter还是本文提供的方案,最关键的不过是取得代码执行先机,因为代码一但被安全的注入,在壳启动前执行我们的代码,我们就能完成很多有意思的事情了。怎么实现呢?我们知道libDexHelper.so是整个壳的核心,修改libDexHelper.so?万一有自校验咋办,这里就有了两种替换方案,第一种查看依赖较少的so,将该依赖的so换成我们的,比如liblog.so,但是这要求我们实现和liblog.so相应的接口,否则dlopen会失败,第二种,也是本文采用的方案,我们直接把它替换了不就好了嘛?

        首先,把原来的libDexHelper.so改成libDexHelper2.so, 然后我们需要写一个libDexHelper.so,只需实现JNI_OnLoad即可, 在里面加载libDexHelper2.so并显式调用JNI_OnLoad即可(这里竟然没有检测文件名,呵呵,不过检测也没多大意义,容易bypass。另外由于我用的x86机,梆梆在.cache目录下生成对应的x86 so才是目标):


                
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值