http://www.cnblogs.com/jiaoxiake/p/6818786.html内容如下

导语:

上一篇我们分析android脱壳使用对dvmDexFileOpenPartial下断点的原理,使用这种方法脱壳的有2个缺点:
1.  需要动态调试
2.  对抗反调试方案
为了提高工作效率, 我们不希望把宝贵的时间浪费去和加固的安全工程师去做对抗。作为一个高效率的逆向分析师, 笔者是忍不了的,所以我今天给大家带来一种的新的脱壳方法——DexExtractor脱壳法。
 

资源地址:

 

DexExtractor脱壳原理

1. 一个DEX文件需要被解析成Dalivk虚拟机能操作对象DvmDex, 解析过过程中就必须调用 DexFile* dexFileParse(const u1* data, size_t length, int flags)。
2.   dexFileParse 函数原型如下:
      DexFile* dexFileParse(const u1* data, size_t length, int flags)
      data  :文件就是DEX文件经过优化后再内存中数据的首地址。 
      length:文件就是DEX文件经过优化后再内存中数据的长度。 
3.  DexExtracctor就是重写 dexFileParse函数,在原函数实现基础上,将内存中DEX文件中数据经过Base64加密,写到移动设备的SD卡
4.  使用Base64加密是为了对有些加固代码,对read.write 函数进行hook。
 
 

原理分析:

根据上篇日志《android 脱壳 之 dvmDexFileOpenPartial断点脱壳原理分析》我们知道一个Dex文件加载必须经过dvmDexFileOpenPartial函数,这个函数内调用 dexFileParse 进行解析Dex文件成DexFile

 
我们看看Android 源码中dexFileParse的实现
 
再看看DexExtractor的 dexFileParse 的实现,你发现这里面比android 源码多了两行代码,而且这两行的编码格式不符合一个优秀的程序员的特质,竟然没有代码对齐,这是作者有意为之, 引起代码读者的注意。

 
 DexHacker 是DexExtraor作者自定义一个类。你会发现会调用DexHacker类的weiteDex2Encode, 分析到这你这里关键字Encode, 为什么需要加密, 所以我们继续分析函数writeDex2Encoded。

 可以看出使用base64对Dex文件加密, 加密的Dex存储在SD卡中, 文件名和应用程序有关。
注意:这里我们看到加密的dex文件保存到SD卡, 我们知道这个操作需要Android应用程序有需要给这个应用添加一个写sd卡的权限:

<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>

这里我们会有一个疑问: 为什么要对DEX文件进行加密,这样还要解密,这样不是更加的麻烦吗?
1. 这个主要是为了对抗加固策略,现在一些加固平台,比如梆梆加固,会对dex的内存dump脱壳进行检测,具体的就是hook修改当前进程的read、write读写相关的函数,一旦检测到read,write读写相关的函数的操作中有对dex文件的dump行为会有对抗的处理,防止dex的内存dump。DexExtractor脱壳工具的作者考虑为了过掉这种内存dump的对抗,需要先将原始的dex文件数据进行base64加密, 加密后,就没有DEX文件格式的特征啦。  
2. 这个解密工具也在github目录下Decode.jar,用法:java -jar Decode.jar dexdir;这里需要注意的是,dexdir是我们pull出dex之后的目录,记住是目录,不是对应的dex文件哦!
 
 
 

DexExtractor脱壳法的脱壳步骤

 
写得很好,很详细, 就简单提炼出,脱壳步骤吧。
 
1、给Android 设备 安装 DexExtractor功能, 我们分析DexExtractor的原理, 我们需要重写函数dexFileParser
  • 在Android源码(AOSP)中,添加DexExtractor功能, 然后编译生成system.img,但是这个system.img 只使用余google手机和模拟器(你如果不想编译,这里给出了一个修改之后的system.img下载地址:https://pan.baidu.com/s/1jG3WQMU,这个文件是Android4.4系统的)
  • 你如果没有google手机,也不想使用模拟器, 你可以替换手机系统的libdvm.so,DexExtractor的github 有提供(ARM, X86两个版本)
  • 你使用你的手机支持 CM/LineageOS/TheMuppets 系统, 你可以下载他们源码,然后使用DexExtractor源码重写函数dexFileParse,然后编译,刷机。 (笔者支持这么干, 不过笔者还没弄过, 这么干,主动权全在我们手里)
2、添加写SD卡权限。如果应用程序没有SD卡权限, 就需要然后在AndroidManifest.xml中添加<uses-permission android:name=”android.permission.WRITE_EXTERNAL_STORAGE”/>,然后在回编译重签名即可。
3、查看脱壳程序对应的日志,tag是dalvikvm。发现create file end等信息段。找到脱壳之后的dex文件路径。
4、将sd卡中脱壳之后的dex文件导出到本地,在使用Decode.jar工具进行解密即可。
5、解密之后的dex格式odex,所以为了使用jadx方便查看代码逻辑,可以使用smali.jar工具将其转化成dex文件。

android脱壳之DexExtractor原理分析[zhuan]的更多相关文章

  1. android脱壳之DexExtractor原理分析

    导语: 上一篇我们分析android脱壳使用对dvmDexFileOpenPartial下断点的原理,使用这种方法脱壳的有2个缺点: 1.  需要动态调试 2.  对抗反调试方案 为了提高工作效率, ...

  2. (转)Android 系统 root 破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...

  3. Android 系统 root 破解原理分析 (续)

    上文<Android系统root破解原理分析>介绍了Android系统root破解之后,应用程序获得root权限的原理.有一些网友提出对于root破解过程比较感兴趣,也提出了疑问.本文将会 ...

  4. Android手机一键Root原理分析

    图/文 非虫 一直以来,刷机与Root是Android手机爱好者最热衷的事情.即使国行手机的用户也不惜冒着失去保修的风险对Root手机乐此不疲.就在前天晚上,一年一度的Google I/O大会拉开了帷 ...

  5. Android 系统 root 破解原理分析

    现在Android系统的root破解基本上成为大家的必备技能!网上也有很多中一键破解的软件,使root破解越来越容易.但是你思考过root破解的 原理吗?root破解的本质是什么呢?难道是利用了Lin ...

  6. Android系统root破解原理分析

    http://dengzhangtao.iteye.com/blog/1543494 root破解过程的终极目标是替换掉系统中的su程序.但是要想替换掉系统中su程序本身就是需要root权限的,怎样在 ...

  7. DexHunter在Dalvik虚拟机模式下的脱壳原理分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78494671 在前面的博客<DexHunter的原理分析和使用说明(一)&g ...

  8. drizzleDumper的原理分析和使用说明

    https://blog.csdn.net/qq1084283172/article/details/53561622 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog. ...

  9. android 脱壳 之 dvmDexFileOpenPartial断点脱壳原理分析

    android 脱壳 之 dvmDexFileOpenPartial断点脱壳原理分析 导语: 笔者主要研究方向是网络通信协议的加密解密, 对应用程序加固脱壳技术很少研究, 脱壳壳经历更是经历少之甚少. ...

随机推荐

  1. selenium自动追踪微信小程序审核方案

    小程序随着腾讯的不断推广,变的越来越普及,同时更新迭代的速度也越来越快,种类越来越多,那么在如何保证时效性就显得尤为重要,其中很重要一个环节就在于小程序审核通过之后,能否立刻通知到相关技术人员进行发布 ...

  2. python处理dict转json,字符串中存在空格问题,导致url编码时,存在多余字符

    在进行urlencode转换请求的参数时,一直多出一个空格,导致请求参数不正确,多了一个空格,解决方法一种是将dict中key-value键值对的value直接定义为字符串,另一种是value仍然为字 ...

  3. 【wx:for】小程序列表渲染的使用说明

    wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件. 默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item,即: {{index}} . {{it ...

  4. kosaraju求强连通分量

    在了解kosaraju算法之前我们先了解一下什么是强连通分量,在有向图中如果两个定点vi,ui存在一条路劲从vi到达ui且也存在一条路劲从ui到达vi那么由ui和vi这两个点构成的图成为强连通图,简洁 ...

  5. 基于MTCNN多任务级联卷积神经网络进行的人脸识别 世纪晟人脸检测

    神经网络和深度学习目前为处理图像识别的许多问题提供了最佳解决方案,而基于MTCNN(多任务级联卷积神经网络)的人脸检测算法也解决了传统算法对环境要求高.人脸要求高.检测耗时高的弊端. 基于MTCNN多 ...

  6. 创建https证书

    第一个里程碑:创建https证书 创建文件认证目录 mkdir /application/nginx/key/ -p 在认证目录下创建认证文件 openssl req -new -x509 -node ...

  7. POJ 1269 Intersecting Lines(直线求交点)

    Description We all know that a pair of distinct points on a plane defines a line and that a pair of ...

  8. 团队作业7——第二次项目冲刺-Beta版本项目计划

    上一个阶段的总结: 在Alpha阶段,我们小组已近完成了大部分的功能要求,小组的每一个成员都发挥了自己的用处.经过了这么久的磨合,小组的成员之间越来越默契,相信在接下来的合作中,我们的开发速度会越来越 ...

  9. iOS- NSThread/NSOperation/GCD 三种多线程技术的对比及实现

    1.iOS的三种多线程技术 1.NSThread 每个NSThread对象对应一个线程,量级较轻(真正的多线程) 2.以下两点是苹果专门开发的“并发”技术,使得程序员可以不再去关心线程的具体使用问题 ...

  10. python实现post请求

    今天无论如何都要留下一些什么东西... 可以说今天学到一个新的一个东西,也需要分享出来,给更多的人去使用. 今天爬取的数据里面是客户端向服务器端发送加密过的token和一些页码之类的一个数据.(我主要 ...