使用dumpDex脱壳app
简介
dumpDex , 一个开源的 Android 脱壳插件工具,需要在 Xposed 环境中使用,支持市面上大多数加密壳(实测360加固、腾讯乐固、梆梆加固、百度加固均可脱壳)。
dumpDex需要依赖于Xposed 框架才能发挥作用。
Xposed ,一款可以在不修改 Android APK 的情况下影响程序运行的框架,可用来动态劫持任意 APP ,对于逆向破解有很大的帮助,像微信的自动抢红包功能,也是出自于 Xposed 框架。
由于Xposed 需要手机root权限的支持,然而目前主流的手机root权限获取过程繁琐,所以本例使用雷电模拟器(支持root)作为脱壳环境。
准备工作
安装雷电模拟器
下载地址:
http://www.ldmnq.com/ldy/bd6000.html?renqun_youhua=2269518&bd_vid=8519460175075222331
下载后一键安装即可。
安装及配置Xposed框架
原理简述
Xposed 通过替换 /system/bin/app_process 程序控制 Zygote 进程,使得 app_process 在启动过程中会加载 XposedBridge 这个 jar 包,从而完成对 Zygote 进程及其创建的 Dalvik 虚拟机的劫持。
在 Android 系统中,应用程序进程以及系统服务进程都是由 Zygote 进程孵化出来的,而 Zygote 进程是在系统启动的过程,由 init 进程创建的,执行的程序是 /system/bin/app_process ,Zygote 进程在启动时会创建一个 Dalvik 虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个 Dalvik 虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的 Dalvik 虚拟机实例,这是 Xposed 选择替换 Zygote 的原因。
Zygote 进程在启动的过程中,除了会创建一个 Dalvik 虚拟机实例之外,还会注册一些 Android 核心类的 JNI 方法到 Dalvik 虚拟机实例中去,以及将 Java 运行时库加载到进程中。而一个应用程序进程被 Zygote 进程孵化出来的时候,不仅会获得 Zygote 进程中的 Dalvik 虚拟机实例拷贝,还会与 Zygote 一起共享 Java 运行时库,这是可以将 XposedBridge 这个 jar 包加载到每一个 Android 应用程序中的原因。
安装流程
首先需要设置雷电模拟器Root模式,设置-基本设置-勾选开启ROOT权限。
然后搜索Xposed框架进行下载,安装完成后需要进行框架的安装。
打开Xposed应用,安装Xposed框架。点击“安装/更新”的等待框架下载并安装。
框架安装完成后需要重启激活Xposed框架。
编译dumpDex
dumpDex脱壳原理简述
根据类名查找当前运行的 APP 是否存在支持的加密壳(360加固、爱加密、梆梆加固、腾讯加固、百度加固);
存在支持的加密壳的情况下,根据手机的 Android 版本进行不同的处理,Android 8.0 及以上手机走 NDK 方式,其它低版本手机则走 Hook 方式;
Hook 方式,主要是通过 Hook Instrumentation 类的 newApplication() 方法和 ClassLoader 类的 loadClass() 方法,获取 Application 或 Activity 所在的 dex 的数据;
将这些数据导出到 APP 所在路径的 dump 子文件夹里的 dex 文件。
在编译Dump之前需要从GitHub上下载源码(develop分支),地址:
https://github.com/WrBug/dumpDex
编译环境
Android Studio 3.0
源码编译
使用android studio打开源码,编译release版本的apk,且需要进行签名。
build-》Generate Signed Bundle/APK -》apk-》next-》配置签名-》Release-》Finish
配置dumpDex到Xposed框架
编译成功后,在雷电模拟器中安装apk,将 lib/armeabi-v7a/libnativeDump.so复制到 /data/local/tmp/libnativeDump.so ,权限 设置为777,arm64机型还需要将将 lib/arm64-v8a/libnativeDump.so复制到 /data/local/tmp/libnativeDump64.so可以通过文件管理器操作,也可以使用如下adb shell命令
#仅适用于32位手机(模拟器)
adb shell
su
cp /data/data/com.wrbug.dumpdex/lib/libnativeDump.so /data/local/tmp
chmod 777 /data/local/tmp/libnativeDump.so
安装完成后会提示“模块未激活”
点击激活即可。查看“模块”标签页DumpDex是否被勾选。然后重启模拟器。
脱壳
安装待脱壳的APK。(示例Apk为Unity生成的简单项目,并使用腾讯乐固进行加固)。
APK安装完成后,打开即可。
检查结果
查看日志
首先需要确定Dumpdex已经完成脱壳,在Xposed应用的界面中可以查看操作日志。可以看到“dumpdex.PackerInfo-> find packerType :腾讯加固”字样的日志说明Dumpdex已经识别待脱壳App的加固方式,并进行脱壳。
提取脱壳后的文件
脱壳后生成若干dex文件。(dex是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据。由于dalvik是一种针对嵌入式设备而特殊设计的java虚拟机,所以dex文件与标准的class文件在结构设计上有着本质的区别。)
脱壳后的dex文件路径:
/data/data/<packageName>/dump
/
获取dex文件可以有两种方式:
-
使用adb pull命令把
/data/data/<packageName>/dump/
下内容提取出来。 使用Android -
Studio的 Device File Explorer功能浏览dex文件。
以方式2为例
打开后可以看到具体的类结构。
未脱壳前的类结构: