安卓逆向之基于Xposed-ZjDroid脱壳
Posted Siegel的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓逆向之基于Xposed-ZjDroid脱壳相关的知识,希望对你有一定的参考价值。
http://bbs.pediy.com/thread-218798.htm
前言
之前介绍了普通常见的反编译模式 但对于使用了 360加固 棒棒 爱加密 等等的加固应用就没办法了、
你会发现反编译出来的dex 只有几个类 逻辑都是调用so
真正的dex会被加载到内存中隐藏起来 加固应用都是多dex这种形式
要想拿到他真正的dex 需要进行脱壳处理 基本原理都是从内存中dump 我一般会先用工具来尝试 不行的话就得上 IDA(反汇编神器)超级强的一个工
具 杀手级别 贯穿移动端 PC端的逆向 但使用IDA 进行静态分析 动态调试脱壳就变的很麻烦了 而且并不是一两天能学会的
以后会介绍使用 我们今天先用工具尝试简单的脱壳
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模块
JEB apk专业逆向工具 但是和IDA一样要花钱 吾爱论坛提供破解版本
这里提一下jeb的优势 可以直接打开apk进行反编译 而已还原效果好
jd-gui看反编译出来的jar(源码)有些代码为注释状态 显示不出来 但JEB 肯定可以全部还原
实战案例
某个朋友托我逆向个应用 叫微丢丢 微信营销的 去官网下载APK 拖到JEB里简单的看了下
只有几个类 一看就是加固应用 并且使用的是360加固 这种结构的类 在有个Application 铁定的加固应用
至于做了哪些操作 基本都是常见的套路 释放so文件 到应用沙盒目录下
注意 JEB 反编译出来的代码 初始状态都为smali 需要用快捷键Q或者鼠标右键Decompile下
简单分析过后 下载apk到安装好ZjDroid的手机中 打开应用到主界面
我们需要获取这个应用的pid值 这就需要用到一个命令了 PC端 WIN+X+R CMD 进入CMD窗口输入命令
命令: adb shell dumpsys activity top
获取到当前程序的Activity信息 这个命令很实用 最好记一下
如果显示过多 可以写成 adb shell dumpsys activity top |more 按行输出
获取这个应用的包名 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 一下进到手机目录 在输入这条命令
输入这条命令 我们发现并没有什么实际的变化 需要使用ZjDroid 特有的查看LOG命令
LOG 查询 后戳为你要查询应用的包名
adb logcat -s zjdroid-shell-com.haiqu.oem
记住在开个CMD窗口哦
这就获取到了 apk所在的位置 filepath: /data/app/com.haiqu.oem-1.apk 记下来 下一步我们会用到这个
这里说明下 5792 是我重启了次手机 pid变成了5792
开始脱壳 命令:
am broadcast -a com.zjdroid.invoke --ei target 5792 --es cmd ‘{action:backsmali, "dexpath":"/data/app/com.haiqu.oem-1.apk"}‘
输入完命令 回到LOG cmd窗口进行查看
上面的/data/data/com.haiqu.oem/files/dexfile.dex 就是脱出来的dex 拿到了dex基本就是拿到了源码
我们使用RE文件管理器 进到这个目前下 直接使用QQ发送电脑不行 该文件不支持此操作
需要把他挪到根目录下 在使用豌豆荚或者其他工具 直接发送到电脑上
在使用 安卓逆向助手把dex转成jar 或者用dexjar 都行 就可以使用jd-gui直接查看代码 工具很多 我之前有一篇博客介绍了安卓逆向助手的使用 不懂的可以去看下 JEB也可以直接打开dex格式文件 直接进行查看
总结
到这里这个工具最重要的功能介绍完毕 很简单 但也能对付一些普通加壳应用
但胜在效率快 很方便 缺点不能重打包但如果单纯的想看代码 进行学习或者HOOK操作 也够用了
以上是关于安卓逆向之基于Xposed-ZjDroid脱壳的主要内容,如果未能解决你的问题,请参考以下文章