前言:
普通常见的反编译模式相对来说比较简单 但对于使用了 360加固 棒棒 爱加密 等等的加固应用就没办法了、
你会发现反编译出来的dex 只有几个类 逻辑都是调用so
真正的dex会被加载到内存中隐藏起来 加固应用都是多dex这种形式
要想拿到他真正的dex 需要进行脱壳处理 基本原理都是从内存中dump 我一般会先用工具来尝试 不行的话就得上 IDA(反汇编神器)超级强的一个工具 杀手级别 贯穿移动端 PC端的逆向 但使用IDA 进行静态分析 动态调试脱壳就变的很麻烦了 而且并不是一两天能学会的
我们今天先用工具尝试简单的脱壳
现在市场中加固apk的方式一般有两种:
第一种是对源apk整体做一个加固,放到指定位置,运行的时候再解密动态加载。
第二种是对so进行加固,在so加载内存的时候进行解密释放。
我们今天主要针对第一种加固方式进行dex文件的获取。
一、工具准备
1.一部Root过的Android手机。
2.安装Xposed模块。
下载Xposed框架:打开手机浏览器,xposed installer,点击下载。
Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。当前,Per APP Setting(为每个应用设置单独的dpi或修改权限)、XPrivacy(防止隐私泄露)、对原生Launcher替换图标等应用或功能均基于此框架。
3.安装DumpDex。(脱壳神器)
打开https://github.com/WrBug/dumpDex, 从这个页面下载APK安装包,或者直接下载源码进行编译项目到手机上。
注意在下载源码进行编译时,因为这个apk安装是没有启动页面的,所以你可能会遇到签名问题和Run configuration配置问题。但都容易解决。配置问题解决方法:Run configuration中Launch Options选项选为Nothing,因为此项目是插件,没有启动页。
4.安装jadx或者jeb。(用于对dex文件进行分析)
这里提一下jeb和jadx的优势 可以直接打开apk进行反编译 而已还原效果好
jd-gui看反编译出来的jar(源码)有些代码为注释状态 显示不出来 但JEB 和jadx肯定可以全部还原
个人比较喜欢jadx看代码更加舒服,因为习惯java的格式。
jadx使用文档 可以直接打开apk dex文件,反编译神器
JEB官网,这个是有的需要收费功能的,破解版的可以去看雪论坛工具里面找找
二、脱壳过程
打开【Xposed Installer】App,在【模块】菜单中勾选DumpDex插件,然后重启设备。
打开需要脱壳的App(此App应该已加固)。
安装一个MT文件管理器,或者re或es文件浏览器都可以,百度都能很容易搜到
打开文件浏览器,在根目录/data/data/应用包名/dump文件下,
如果脱壳成功,就可以搜索到一个或多个dump文件夹,里面就是目标dex,里面有可能有多个dex,要一个个看才知道是不是源码的dex,这个只能自己去一个个看,到底哪个是源码(系统自带文件浏览器,大多找不到root后的data目录)
三、jadx查看完整源码
上面三步是脱壳过程。如果前面已顺利得到dex文件,那么现在就要把dex发送到自己电脑上面,文件管理器有分享功能可以使用QQ传文件或者自己电脑连接手机传输,由于dex文件在root目录下, Android Studio的Device File Explorer没有copy权限,一个便捷的方法是在手机上把这些文件拷贝到外面的一些可见,这里就不多说了。
不过新版本360已经native化原DEX的onCreate中的所有指令了,还用老方法是拿不到onCreate的,所以是看不到onCreate里面的方法的,运行时有一个函数专门解析每一条DEX指令,通过jni反射执行,这里360要想进一步查看代码,还是要进行修复的,修复这个太难了,一时半会学不会,所以暂时放弃。
总结下来发现,对360加固和一些其他第三方加固等加固包都成功拿到dex文件。无论第三方加固怎么加壳,dex文件的加载到内存的时候代码肯定是要进行还原的时候,因为只要在这个时候dump出来就可以,360加固把dex加密了,总归是要解密的,解密操作有可能在dalvik模式里面的dex优化的过程,也有可能在art模式下dex2oat的过程,360就在dex2oat的过程中实现对dex解密然后编译成oat,因此通过修改dex2oat的代码编译一个新的dex2oat可以dump出解密后的dex,然后就可以分析源码了。