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. codeforce Gym 100500H ICPC Quest (简单dp)

    题意:给一个nXm的矩阵,上面有一些数字,从左上角出发,每次只能往右或者往下,把沿途的数字加起来,求到达右下角的最大值是多少. 题解:简单的一个dp,设f[i][j]为到达i行j列的最大值,f[i][ ...

  2. 一、git提交代码步骤

    git add .   //添加到本地缓存区 git commit -m '备注 ' //提交代码到本地仓库 git push  //将本地代码推送到develop分支上 git checkout m ...

  3. nfs-ganesha使用

    一 nfs-ganesha在centos7上安装 yum -y install centos-release-gluster yum install -y nfs-ganesha.x86_64yum ...

  4. python之道09

    整理函数相关知识点,写博客. 看代码写结果 1. def func(): for i in range(3): print(i) return 666 print(func()) # 0 1 2 66 ...

  5. ActiveXObject

    只有IE浏览器才支持这个构造函数,可以用这个来判断,当前是否为IE浏览器 var isIE=!!window.ActiveXObject; 在IE的不同版本下,要创建XHR对象,也需要通过这个构造函数 ...

  6. destoon 后台管理左侧新增菜单项

    destoon 后台菜单设置在对应模块的admin/menu.inc.php 例如要在后台会员管理里增加会员承包和股东管理 $menu = array( array('添加会员', '?modulei ...

  7. wdcp 使用说明总结(持续更新中。。。)

    wdcp 使用说明总结(持续更新中...) 1.移动文件时,如果是上一层,直接填写../即可

  8. Linux 用户管理(三)

    一.userdel --delete a user account and related files -r  --remove 删除用户及家目录 二.id --print real and effe ...

  9. 通过composer安装阿里大于接口扩展

    # 安装laravel阿里大鱼服务 composer require iscms/alisms-for-laravel laravel配置 # 注册服务 # 在config\app.php文件中找到P ...

  10. thinkphp5中php7中运行会出现No input file specified. 这个你改个东西

    <IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{RE ...