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

前言

之前介绍了普通常见的反编译模式 但对于使用了 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 肯定可以全部还原

爱盘地址             ZjDroid地址


实战案例

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

注意 JEB 反编译出来的代码 初始状态都为smali  需要用快捷键Q或者鼠标右键Decompile下 

安卓逆向之基于Xposed-ZjDroid脱壳_第1张图片


简单分析过后 下载apk到安装好ZjDroid的手机中   打开应用到主界面  

安卓逆向之基于Xposed-ZjDroid脱壳_第2张图片

我们需要获取这个应用的pid值 这就需要用到一个命令了 PC端 WIN+X+R CMD 进入CMD窗口输入命令
命令: adb shell dumpsys activity top 
获取到当前程序的Activity信息 这个命令很实用 最好记一下

如果显示过多 可以写成 adb shell dumpsys activity top |more  按行输出

 安卓逆向之基于Xposed-ZjDroid脱壳_第3张图片


获取这个应用的包名 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脱壳_第4张图片
输入这条命令 我们发现并没有什么实际的变化 需要使用ZjDroid 特有的查看LOG命令
 LOG 查询  后戳为你要查询应用的包名
adb logcat -s zjdroid-shell-com.haiqu.oem

记住在开个CMD窗口哦  
安卓逆向之基于Xposed-ZjDroid脱壳_第5张图片

这就获取到了 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窗口进行查看

安卓逆向之基于Xposed-ZjDroid脱壳_第6张图片


上面的/data/data/com.haiqu.oem/files/dexfile.dex  就是脱出来的dex 拿到了dex基本就是拿到了源码 

我们使用RE文件管理器 进到这个目前下 直接使用QQ发送电脑不行 该文件不支持此操作 

需要把他挪到根目录下 在使用豌豆荚或者其他工具 直接发送到电脑上
安卓逆向之基于Xposed-ZjDroid脱壳_第7张图片
安卓逆向之基于Xposed-ZjDroid脱壳_第8张图片

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


总结

到这里这个工具最重要的功能介绍完毕 很简单 但也能对付一些普通加壳应用 

但胜在效率快 很方便  缺点不能重打包但如果单纯的想看代码 进行学习或者HOOK操作 也够用了



你可能感兴趣的:(安卓逆向,Android逆向工程)