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. FMDB的使用方法(附Demo)

    http://www.jianshu.com/p/54e74ce87404 最近在项目中需要在多个页面对同样的数据进行相关操作,于是便用到了FMDB数据库操作,以下便是FMDB的一些简单的使用方法.附 ...

  2. 共享服务-FTP基础(一)

    介绍:文件传输协议FTP 两种模式:服务器角度 主动(PORT style):服务器主动连接 命令(控制):客户端:随机port --- 服务器:tcp21 数据:客户端:随机port ---服务 ...

  3. Node项目实战-静态资源服务器

    打开github,在github上创建新项目: Repository name: anydoor Descripotion: Tiny NodeJS Static Web server 选择:publ ...

  4. 万门大学Python零基础10天进阶班视频教程

    点击了解更多Python课程>>> 万门大学Python零基础10天进阶班视频教程 课程简介: 旨在通过两周的学习,让学生不仅能掌握python编程基础从而进行计算机程序的开发, 还 ...

  5. URLError与HTTPError

    urllib2 的异常错误处理 在我们用urlopen或opener.open方法发出一个请求时,如果urlopen或opener.open不能处理这个response,就产生错误. 这里主要说的是U ...

  6. SMP IRQ Affinity

    转:非常有用的方法,调式神器 SMP IRQ Affinity Background: Whenever a piece of hardware, such as disk controller or ...

  7. CSS动画小结

    CSS动画 原理:1.画面之间变化  2.视觉暂留作用 常见问题 1.CSS 动画的实现方式有几种 1.transition  2. keyframes(animation) 2.过渡动画和关键帧动画 ...

  8. php msql 表单

    http://www.cnblogs.com/webers/p/3849707.html

  9. JAVA-基础(五) 更多工具集

    1.StringTokenizer(字符串标记) StringTokenizer实现枚举(Enumeration)接口.因此,给定一个输 入字符串,可以使用StringTokenizer对包含于其中的 ...

  10. luogu2455 [SDOI2006]线性方程组 高斯消元法

    #include <iostream> #include <cstdio> #include <cmath> using namespace std; int n, ...