码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-16 19:28:49      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

       某梆加固企业版还是会调用系统的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)


 

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

标签:

原文地址:http://blog.csdn.net/justfwd/article/details/51164281

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!