【原创】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(百度版)脱壳工具基本原理的更多相关文章

  1. [.NET] [.net 脱壳工具]Sixxpack 最新脱壳机 通杀Sixxpack全版本by -=Msdn5 君临=

    [.net 脱壳工具]Sixxpack 最新脱壳机 通杀Sixxpack全版本by -=Msdn5 君临=- 识别方法: 如果无法调戏,请上传附件艾特我.............发帖不易啊..身处大西 ...

  2. ART模式下基于Xposed Hook开发脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...

  3. .NET DLL 保护措施应用实例(百度云分享工具)

    最近做了个小工具,将保护措施思路全部应用到了此工具中. 点我下载 “百度分享工具”介绍 大家都知道,在百度云盘中分享文件,只能手工一条条地点击“分享”,如果想分享很多文件,操作会非常辛苦.“百度云分享 ...

  4. Ubuntu Builder —— 一个制作自己的发行版的工具

    Ubuntu Builder 是一个使用起来很简单的用来构建基于 Ubunut 的自己的发行版的工具. 你可以下载最新的 Ubuntu Builder 的 DEB 安装包.下载和安装请前往:http: ...

  5. .net反混淆脱壳工具de4dot的使用

    de4dot是一个开源的.net反混淆脱壳工具,是用C#编写的,介绍一下它的使用方法 首先 pushd 到de4dot.exe所在文件夹,然后调用 de4dot.exe  路径+dll名称 如果显示: ...

  6. DOS版PE工具制作

    // PE.cpp : 定义控制台应用程序的入口点. //DOS版PE工具制作 #include "stdafx.h" #include <windows.h> #in ...

  7. [.NET] ConfuserEx脱壳工具打包

    [.NET] ConfuserEx脱壳工具打包 ConfuserEx 1.0.0脱壳步骤        Written by 今夕何夕[W.B.L.E. TeAm] 1.先用UnconfuserEx把 ...

  8. InnoSetup汉化版打包工具下载-附带脚本模板

    InnoSetup汉化版打包工具下载地址: https://www.90pan.com/b1907264 脚本模板 ; 脚本用 Inno Setup 脚本向导 生成.; 查阅文档获取创建 INNO S ...

  9. 基于dalvik模式下的Xposed Hook开发的某加固脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77966109 这段时间好好的学习了一下Android加固相关的知识和流程也大致把A ...

随机推荐

  1. [luogu]P1800 software_NOI导刊2010提高(06)[DP][二分答案]

    [luogu]P1800 software_NOI导刊2010提高(06) 题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块, ...

  2. Luogu P3408 恋爱

    题目链接:Click here Solution: 设f[x]表示要使x向它的父亲写信需要花的最少的钱,per[x]为要使x向它的父亲写信最少要多少人 则\(f[x]=\sum_{i=1}^{per[ ...

  3. Linux简介安装、系统启动过程、目录结构

    Linux简介安装.系统启动过程.目录结构 Linux 教程 Linux 英文解释为 Linux is not Unix. Linux 简介 Linux内核最初只是由芬兰人李纳斯·托瓦兹(Linus ...

  4. Jedis下的ShardedJedis

    jedis客户端操作redis主要三种模式:单台模式.分片模式(ShardedJedis).集群模式(BinaryJedisCluster) ShardedJedis是通过一致性哈希来实现分布式缓存的 ...

  5. linux 文本文件显示行数

    一般的我们在使用linux编辑器编辑文本文件的时候是不会像其他编程软件一样显示行数 临时方法: 在命令模式下输入:set nu或者:set number都可以为vi设置行号,如果要取消的话,则输入:s ...

  6. Window、Linux查看本机外网ip

    前言 我们上网用的IP并不一定是本机网卡的IP地址,由于公网IP地址稀少,国内绝大多数电脑上网,一般都是通过拨号或者端口映射.多个内网地址映射到一个公网地址来实现上网的. 目录 1.查看本机网卡ip ...

  7. 一款基于jQuery Ajax的等待效果

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  8. Zookeeper集群及配置

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. Mysql 数据库锁表的原因和解决方法

    摘自: https://www.csdn.net/gather_2f/MtTaIgxsMTM5NC1ibG9n.html 锁表的原因:当多个连接(数据库连接)同时对一个表的数据进行更新操作,那么速度将 ...

  10. 微服务SpringCloud系列

    https://my.oschina.net/hmilyylimh?tab=newest&catalogId=5703366