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

导语:

笔者主要研究方向是网络通信协议的加密解密, 对应用程序加固脱壳技术很少研究, 脱壳壳经历更是经历少之甚少。但是脱壳作为一个逆向工程师必备技能,怎能不会,于是找了几个脱壳的帖子,看别人是怎么剖壳,笔者看过阿里加固壳,360加固的壳,爱加密的壳都被脱壳,无一幸免。加固/剖壳技术其实与笔者研究通信协议加密解密时一样一样的。 我看到几个这些帖子, 给出自己的一下总结。

1.大部分壳都会反调试结合使用, 因为脱壳必然需要动态调试,然后dump dex 文件。为了防止动态调试,不部分的壳保护程序都会使用的反调试。 关于反调试笔者已经谈过,在这个就不谈了。

2. 大部分壳我们可以对int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)函数下断点。然后dump 地址:addr, 长度:len 到文件中。然后就算脱壳成功能, 有的壳,会对dvmDexFileOpenPartial 进行重写, 笔者分析的360的壳机重写啦。所以了解为什么脱壳需要对dvmDexFileOpenPartial 下断点,以及这个函数都干了些啥。


分析结论:

Android系统启动时会先启动init进程,init进程会启动zygote进程,该进程会为每个要启动的App进程孵化出一个Davlik虚拟机实例.Zygote 进程还会启动optdex进程,这个进程将要运行App的DEX文件映射到内存中,然后校验,优化,转成虚拟机能够操作的Dex对象DvmDex.

dvmDexFileOpenPartial的函数原型如下:int dvmDexFileOpenPartial(const void* addr, int len, DvmDex** ppDvmDex)

参数1:加载的DEX文件在内存中的基址.(也就是DEX.035)

参数2:加载的DEX文件的文件长度,

参数3:出参, DEX 文件转成DvmDex结构,里面包含Dex文件的类,字段,方法,字符串信息。Dalivk操作Dex文件的对象这是结构结构体

分析过程:

就提分析如下:dexopt对应源码在: /dalvik/dexopt/OptMain.cpp, 查看main函数

这里根据解析文件方式不同,选择不同方案进行选择方法,我们这里研究是dex文件,所以跟进函数fromDex函数。截取fromDex 函数的片段:

dvmPreForDexOpt函数的作用在对函数进行优化前,检测Dalivk虚拟机是否进入工作状态, 如果进入工作状态就会调用dvmContinueOptimization对Dex文件进行优化。 我们 进入dvmContinueOptimization跟进函数看看他是如何进行优化的。 截取代码片段分析

通过共享内存映射,将Dex文件映射到内存中。

发现这里会调用我们主角 dvmDexFileOpenPartial , 这个函数主要功能就是完成将内存中DexDile 转化成DilivikVM的Dex文件DvmDex。我们查看一下DvmDex文件的结构:

这里我们看到我们熟知的字符串对象,内对象,方法, 字符等等信息,根据这些信息,我们就可以运行我们的DexFile文件了。

android 脱壳 之 dvmDexFileOpenPartial断点脱壳原理分析的更多相关文章

  1. Android中Input型输入设备驱动原理分析(一)

    转自:http://blog.csdn.net/eilianlau/article/details/6969361 话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反 ...

  2. Android中Input型输入设备驱动原理分析<一>

    话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反正这个是没变的,在android的底层开发中对于Linux的基本驱动程序设计还是没变的,当然Android底层机制也 ...

  3. Android大图片裁剪终极解决方案 原理分析

    约几个月前,我正为公司的APP在Android手机上实现拍照截图而烦恼不已. 上网搜索,确实有不少的例子,大多都是抄来抄去,而且水平多半处于demo的样子,可以用来讲解知识点,但是一碰到实际项目,就漏 ...

  4. Android控件TextView的实现原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8636153 在前面一个系列的文章中,我们以窗口 ...

  5. android脱壳之DexExtractor原理分析[zhuan]

    http://www.cnblogs.com/jiaoxiake/p/6818786.html内容如下 导语: 上一篇我们分析android脱壳使用对dvmDexFileOpenPartial下断点的 ...

  6. android脱壳之DexExtractor原理分析

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

  7. Android视图SurfaceView的实现原理分析(示例,出错代码)

    在Android系统中,有一种特殊的视图,称为SurfaceView,它拥有独立的绘图表面,即它不与其宿主窗口共享同一个绘图表面.由于拥有独立的绘图表面,因此SurfaceView的UI就可以在一个独 ...

  8. Xposed原理分析

    目录 安卓系统启动 什么zygote? 安卓应用运行? Xposed介绍 Xposed构成 Xposed初始化大体工作流程 源码分析 初始化 app_main#main app_main#initia ...

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

    本文博客地址: http://blog.csdn.net/qq1084283172/article/details/78494620 DexHunter脱壳工具在Dalvik虚拟机模式下的脱壳原理分析 ...

随机推荐

  1. [CV笔记]inRange对图像进行分割

    先把图像转为hsv空间,然后对图像进行inrange取到hsv范围内的图像,我这里要做的是取到图中的几个白色区域以及里面的手写数字,方法可能不是最好的,因为刚入门cv没几天,先试着用所学取到这几个区域 ...

  2. iBatis自动生成工具Abator

    https://blog.csdn.net/k_scott/article/details/8281837 ###首先创建数据库表,然后根据数据库表,生成相应的实体.及其配置文件 https://ww ...

  3. k8s的Pod控制器

    pod的配置清单常见选项: apiVersion,kind,metadata,spec,status(只读) spec: containers: nodeSelector: nodeName: res ...

  4. centos7安装pgsql及操作命令

    1.下载所需要的数据库版本https://yum.postgresql.org/repopackages.php 2.安装数据库版本包 yum install -y https://download. ...

  5. 解决iPhone滑动不流畅问题

    前段时间在做一个手机端的页面时遇到了iOS上滑动不流畅的问题,后来才发现安卓上没有问题,才意识到这是兼容性问题引起的,所以遇到问题后快速定位到问题根源非常重要.在网上一搜就找到了解决方案.以后遇到类似 ...

  6. Optimization & Map

  7. 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深?

    目录 一键生成属于自己的QQ历史报告,看看你对自己的QQ了解程度有多深? 简介 功能截图 如何运行 编写思路 main.py模块 qq_bot模块 tkinter_gui模块 static_data模 ...

  8. GoF23种设计模式之结构型模式之享元模式

    一.概述  运用共享技术有效地支持大量细粒度的对象. 二.适用性 1.当一个应用程序使用了大量的对象的时候. 2.由于使用大量的独享而造成很大的存储开销的时候. 3.对象的大多数状态都可变为外部状态的 ...

  9. WZK的减肥计划

    WZK 的减肥计划(plan.cpp/ plan.in/ plan.out)问题描述:WZK 发现他的体重正迅猛的上升着,对此他感到非常焦虑,想要制定出一套完美的减肥计划. 于是 WZK 翻阅资料,查 ...

  10. ZOJ 2314 (sgu 194) Reactor Cooling (无源汇有上下界最大流)

    题意: 给定n个点和m条边, 每条边有流量上下限[b,c], 求是否存在一种流动方法使得每条边流量在范围内, 而且每个点的流入 = 流出 分析: 无源汇有上下界最大流模板, 记录每个点流的 in 和 ...