某梆企业版加固脱壳及抽代码还原方法
来源:互联网 发布:潘任美事件公知 编辑:程序博客网 时间:2024/04/27 20:14
某梆加固企业版还是会调用系统的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)
2 0
- 某梆企业版加固脱壳及抽代码还原方法
- 某加固使用xposed脱壳
- 常见App加固厂商脱壳方法研究
- 360加固保的dex脱壳方法
- 360加固保的dex脱壳方法
- 360一代加固脱壳方法总结
- 360二代加固脱壳方法总结
- 常见app加固厂商脱壳方法研究
- android某加固脱壳(一)
- 360加固之libjiagu.so脱壳及dex dump
- 12306之梆梆加固libsecexe.so的脱壳及修复
- 阿里第一代 android dex加固的脱壳方法
- Android常见App加固厂商脱壳方法的整理
- Android常见App加固厂商脱壳方法的整理
- Android常见App加固厂商脱壳方法的整理
- 360加固动态脱壳
- 360加固动态脱壳
- 腾讯加固脱壳
- KNN与KD-tree
- nefu500(二分,最大流)
- 【USACO题库】3.2.3 Spinning Wheels纺车的轮子
- 89. Gray Code
- 欢迎使用CSDN-markdown编辑器
- 某梆企业版加固脱壳及抽代码还原方法
- android使用matrix控制图片的旋转,缩放
- 技术记录---杀死应用进程账号数据被清空问题
- poj 3233(矩阵快速幂+二分)
- 在word中插入高亮缩进的代码
- 统计代码的行数
- 怎么用oracle数据泵导数据
- 详细解析BluetoothAdapter的详细api
- POJ 3373 Changing Digits