Xdex(百度版)脱壳工具基本原理
【原创】Xdex(百度版)脱壳工具基本原理
作 者: sherrydl
时 间: 2015-12-13,10:52:45
链 接: http://bbs.pediy.com/showthread.php?t=206441
学习移动安全快一年了,最近花了一些时间写了一个脱壳机(分百度版和通用版)。核心思想是:根据dalvik 获取dex各个数据段的方式,我也用同样的函数去获取,然后一步一步去恢复成一个合法的dex文件。基本思想很简单,也已有大牛实现过。
这里先拿百度加固来举例说明,百度加固相对于其它厂商的加固,好像并没有在类加载的时候做什么事。其它厂商的加固有的会在类加载的时候执行静态函数,有的会hook一些类加载的中间函数,才去恢复真正的数据。对于这些加固,必须去主动加载类,然后去获取ClazzObject 数据结构,这里面的数据才可能真正是正确的,其余内存的dex大部分数据多半已经被抹掉成没用的。但是主动加载类又会有很多其它的问题,比如 类的初始化会去优化指令,dvmLinkClass函数中:
上面这个函数在一些特殊情况下又会去修改ClazzObject 中virtualMethodCount 原本的值,还有的加固会改变AccessFlag的最高位,这些都会对最后脱壳产生影响。关于需要主动加载类这一块加固的脱壳,以后跟大家交流。
下面还是回到百度加固的问题上来,由于百度加固并没有在类加载的时候做什么事,导致我们不需要去主动加载类,我们直接可以通过dalvik的的一些函数去获取所需要的数据,
在源码目录中:/dalvik/libdex/DexFile.h 和/dalvik/libdex/DexClass.h ,这两个文件里基本包含了所有的dalvik去获取dex各个数据段的函数。如下图:
(部分函数截图)
我们可以直接调用这些函数,或者去根据这些函数去获取内存中dex数据的方式,写出类似的代码去获取数据。这里比较重要的一点:因为是对dex每一块最小的数据段都进行了再次获取,所以需要对dex文件的格式有足够的了解,这样才能一步一步的恢复、重构成一个合法的dex文件,代码实现起来比较麻烦点的就是重写dex结构里的那些偏移。
当然百度加固并没有这么简单,虽然没有在类加载的时候干点坑人的事,但是有以下几个需要解决的点。
1 .听说有负偏移。 实际上这里的负偏移的含义是由于dex的DexMethod结构的codeOff是u4类型,而它的值过大,再加上dex 在内存的baseaddr ,结果就溢出了,这样就造成的DexCode在内存的位置变成了baseaddr的上面去了,但是这种加固方案并木有对我这种脱壳方式有啥影响,对于静态分析的大神进行脱壳修复就有一点麻烦了。
2. onCreate001 函数指令执行时存在,执行后抹去。关于这点,目前一些通用脱壳的方式是改变脱壳点的位置,然后去获取抹去的指令。当onCreate001函数过多,这样做好像有点麻烦。后来多亏某位大神的提醒,采用java反射的方式,能够自动恢复所有onCreate001里的指令。经测试,的确可以
Xdex(百度版)脱壳工具基本原理的更多相关文章
- [.NET] [.net 脱壳工具]Sixxpack 最新脱壳机 通杀Sixxpack全版本by -=Msdn5 君临=
[.net 脱壳工具]Sixxpack 最新脱壳机 通杀Sixxpack全版本by -=Msdn5 君临=- 识别方法: 如果无法调戏,请上传附件艾特我.............发帖不易啊..身处大西 ...
- ART模式下基于Xposed Hook开发脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...
- .NET DLL 保护措施应用实例(百度云分享工具)
最近做了个小工具,将保护措施思路全部应用到了此工具中. 点我下载 “百度分享工具”介绍 大家都知道,在百度云盘中分享文件,只能手工一条条地点击“分享”,如果想分享很多文件,操作会非常辛苦.“百度云分享 ...
- Ubuntu Builder —— 一个制作自己的发行版的工具
Ubuntu Builder 是一个使用起来很简单的用来构建基于 Ubunut 的自己的发行版的工具. 你可以下载最新的 Ubuntu Builder 的 DEB 安装包.下载和安装请前往:http: ...
- .net反混淆脱壳工具de4dot的使用
de4dot是一个开源的.net反混淆脱壳工具,是用C#编写的,介绍一下它的使用方法 首先 pushd 到de4dot.exe所在文件夹,然后调用 de4dot.exe 路径+dll名称 如果显示: ...
- DOS版PE工具制作
// PE.cpp : 定义控制台应用程序的入口点. //DOS版PE工具制作 #include "stdafx.h" #include <windows.h> #in ...
- [.NET] ConfuserEx脱壳工具打包
[.NET] ConfuserEx脱壳工具打包 ConfuserEx 1.0.0脱壳步骤 Written by 今夕何夕[W.B.L.E. TeAm] 1.先用UnconfuserEx把 ...
- InnoSetup汉化版打包工具下载-附带脚本模板
InnoSetup汉化版打包工具下载地址: https://www.90pan.com/b1907264 脚本模板 ; 脚本用 Inno Setup 脚本向导 生成.; 查阅文档获取创建 INNO S ...
- 基于dalvik模式下的Xposed Hook开发的某加固脱壳工具
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77966109 这段时间好好的学习了一下Android加固相关的知识和流程也大致把A ...
随机推荐
- web上传文件夹
文件夹数据库处理逻辑 publicclass DbFolder { JSONObject root; public DbFolder() { this.root = new JSONObject(); ...
- [CF11D]A Simple Task 题解
题解 我们从最简单的思路开始考虑,首先看到题目发现\(n\)非常小,于是很容易想到状态压缩. 我们考虑比较直觉的状态,f[i][j][k]表示以i为起点,当前在j,之前去过的点状态为k的简单环的方案数 ...
- Spring Cloud架构教程 (一)Hystrix监控面板
下面我们基于之前的示例来结合Hystrix Dashboard实现Hystrix指标数据的可视化面板,这里我们将用到下之前实现的几个应用,包括: eureka-server:服务注册中心 eureka ...
- NABCD分析——生活日历
N(Need)需求 本软件的主体为日历.如今人们的生活趋于现代化,大家主要通过手机来查看日期,但我们每一天都有想要做或未完成的事情,也存在对自己有特殊意义的日子.每天人们都会有或大或小的支出与收入,想 ...
- antd form表单一行多个组件并对其校验
一行一个标签对应多个输入组件,这个需求很常见但在官方例子没看到合适的,因为官方建议: 注意:一个 Form.Item 建议只放一个被 getFieldDecorator 装饰过的 child,当有多个 ...
- MyBatis框架之mybatis逆向工程自动生成代码
http://www.jb51.net/article/82062.htm Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们 ...
- virt-manager 使用 shh 远程访问配置方法
1.下载安装 Xming+Xshell 或者 Xming+putty,启动Xming服务 Xming下载地址 2.XMing的配置:打开XLaunch,记住Display Number,现在这里是0 ...
- HTTP协议初步认识
1.基本概念: HTML:HyperText Transfer Protocol,中文名:超文本传输协议,基于请求/响应模式,基于TCP/IP协议,是一种,无连接,无状态协议: 2.HTTP传输过程: ...
- imu tool使用
安装imu tool sudo apt-get install ros-melodic-imu-tools launch文件: <!-- imu_node launch file--> & ...
- ArcCatalog连接远程ArcGIS Server服务器
注意:本地机器登陆的用户名和密码必须与ArcGIS Server服务器上的用户名和密码完全一致,并加入到agsadmin和agsuser组中.重启电脑. (其实就是在自己的电脑上建立一个用户名,这 ...