安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳

前言 之前介绍了普通常见的反编译模式 但对于使用了 360加固 棒棒 爱加密 等等的加固应用就没办法了、
你会发现反编译出来的dex 只有几个类 逻辑都是调用so
真正的dex会被加载到内存中隐藏起来 加固应用都是多dex这种形式
要想拿到他真正的dex 需要进行脱壳处理基本原理都是从内存中dump 我一般会先用工具来尝试 不行的话就得上 IDA(反汇编神器)超级强的一个工
具 杀手级别 贯穿移动端 PC端的逆向 但使用IDA 进行静态分析 动态调试脱壳就变的很麻烦了 而且并不是一两天能学会的
以后会介绍使用 我们今天先用工具尝试简单的脱壳



【安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳】
ZjDroid工具介绍
ZjDroid是基于Xposed Framewrok的动态逆向分析模块,逆向分析者可以通过ZjDroid完成以下工作: 1、DEX文件的内存dump 2、基于Dalvik关键指针的内存BackSmali,有效破解主流加固方案 3、敏感API的动态监控 4、指定内存区域数据dump 5、获取应用加载DEX信息。 6、获取指定DEX文件加载类信息。 7、dump Dalvik java堆信息。 8、在目标进程动态运行lua脚本。


ZjDroid github开源的一个项目 主要功能就是脱壳 基于内存dump 其他功能一般作者很NB 总有些人可以把Xposed玩出花来
我下篇博客会介绍一个针对安卓端应用分析工具 很强大!
工具准备 已ROOT手机一台并装好xpsoed框架在装上ZjDroid模块
JEBapk专业逆向工具 但是和IDA一样要花钱 吾爱论坛提供破解版本
这里提一下jeb的优势 可以直接打开apk进行反编译 而已还原效果好 jd-gui看反编译出来的jar(源码)有些代码为注释状态 显示不出来但JEB 肯定可以全部还原
爱盘地址ZjDroid地址

实战案例 某个朋友托我逆向个应用 叫微丢丢 微信营销的 去官网下载APK 拖到JEB里简单的看了下 只有几个类 一看就是加固应用 并且使用的是360加固这种结构的类 在有个Application 铁定的加固应用至于做了哪些操作 基本都是常见的套路 释放so文件 到应用沙盒目录下安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片

注意 JEB 反编译出来的代码 初始状态都为smali需要用快捷键Q或者鼠标右键Decompile下
安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片



简单分析过后 下载apk到安装好ZjDroid的手机中打开应用到主界面
安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片


我们需要获取这个应用的pid值 这就需要用到一个命令了 PC端 WIN+X+R CMD 进入CMD窗口输入命令 命令: adb shell dumpsys activity top获取到当前程序的Activity信息 这个命令很实用 最好记一下
如果显示过多 可以写成 adb shell dumpsys activity top |more按行输出
安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片


获取这个应用的包名 com.haiqu.oem 还要牢记这个pid 8445之后的操作都会用到他接着我们来使用pid查看这个应用在手机里面 dex 所在的位置 查询 dex 信息 所在位置
am broadcast -a com.zjdroid.invoke --ei target 8445 --es cmd '{action:dump_dexinfo}'


有些时候输入这条命令会报一条警告: WARNING: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix.
WARNING: linker: app_process has text relocations. This is wasting memory and is a security risk. Please fix.

警告:链接器:app_process有文本重定位。 这是浪费记忆,是一个安全隐患。 请修复
无视就可以 警告而已
记住先adb shell 一下进到手机目录 在输入这条命令
安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片

输入这条命令 我们发现并没有什么实际的变化 需要使用ZjDroid 特有的查看LOG命令 LOG 查询后戳为你要查询应用的包名
adb logcat -s zjdroid-shell-com.haiqu.oem

记住在开个CMD窗口哦安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片


这就获取到了 apk所在的位置 filepath: /data/app/com.haiqu.oem-1.apk记下来下一步我们会用到这个 这里说明下 5792 是我重启了次手机 pid变成了5792 开始脱壳命令:
am broadcast -a com.zjdroid.invoke --ei target5792 --es cmd '{action:backsmali, "dexpath":"/data/app/com.haiqu.oem-1.apk"}'

输入完命令 回到LOG cmd窗口进行查看
安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片



上面的/data/data/com.haiqu.oem/files/dexfile.dex就是脱出来的dex 拿到了dex基本就是拿到了源码
我们使用RE文件管理器 进到这个目前下 直接使用QQ发送电脑不行 该文件不支持此操作
需要把他挪到根目录下 在使用豌豆荚或者其他工具 直接发送到电脑上 安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片

安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片


在使用 安卓逆向助手把dex转成jar 或者用dexjar 都行 就可以使用jd-gui直接查看代码 工具很多 我之前有一篇博客介绍了安卓逆向助手的使用 不懂的可以去看下JEB也可以直接打开dex格式文件 直接进行查看 安卓逆向|安卓逆向之基于Xposed-ZjDroid脱壳
文章图片



总结 到这里这个工具最重要的功能介绍完毕 很简单 但也能对付一些普通加壳应用
但胜在效率快 很方便缺点不能重打包但如果单纯的想看代码 进行学习或者HOOK操作 也够用了


    推荐阅读