某梆企业版加固脱壳及抽代码还原方法

       某梆加固企业版还是会调用系统的dvmDexFileOpenPartial 接口,因此可以这里添加hook


        51df6008-52cd50__unpackedDex.dmp即是dump出来的dex,拖到jeb里,可以看到这些函数都是空的

       

       汇编显示,大片的指令都为nop,这些指令都被抽掉了,执行之前才会还原。

       

        它hook了dvmResolveClass还动态加解密指令

        

        可以看到,它执行了两次___Decrypt_dvmResolveClass,解密完等原始dvmResolveClass执行完后,还会再把指令清掉。        

       之前网上有还原娜伽抽代码的教程,是把解密算法还原出来,用算法来解密的,不过___Decrypt_dvmResolveClass函数的流程图如下图所示:

       

       还是挺复杂的,弄出算法的成本相当高。

        还是另想办法。第C838行的BLX R3就是在调用原始dvmResolveClass函数,这时指令已经被还原了。那么我们在这个点做hook,把代码还原出来。

  先来看下dvmResolveClass函数的实现

        

     输入参数有ClassObject* referrer, u4 classIdx,这里的classIdx经过测试,似乎经常飘乎不定,并不可用。需要通过referrer->descriptor得到类名后,再定位到对应的class_data_item
 
 
 
     dexClsIndex是通过类名计算出来的实际classIdx,patchDexMethod通过referrer将Method里面的指令写到第一步dump出来的dex里的对应位置上。
     

  
       虽然大部分类都的代码都被还原了,但还是存在这样的类:
       
 
       还有一些类没有被还原出来,因为dvmResolveClass只会还原加载过的类,对于那些没有加载的类,也是无能为力。
    加载的时候会自动调用dvmResolveClass,需要想办法让所有的类都预先加载起来。
 
       可以Hook Dalvik_dalvik_system_DexFile_defineClassNative函数,原始dex加载时,枚举所有的DexClassDef,对所有的class,调用dvmDefineClass进行类加载。
 
   这样会就把之前没有还原到的类给补全。
   
(创建了一个Android逆向分析群,欢迎有兴趣的同学加入,群号码:376745720)

 
 
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值