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 肯定可以全部还原

爱盘地址 ZjDroid地址

实战案例

某个朋友托我逆向个应用 叫微丢丢 微信营销的 去官网下载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脱壳的更多相关文章

  1. 基于xposed逆向微信、支付宝、云闪付来实现个人免签支付功能

    我的个人网站如何实现支付功能? 想必很多程序员都有过想开发一个自己的网站来获得一些额外的收入,但做这件事会遇到支付这个问题.目前个人网站通过常规手法是无法实现支付管理的,所有支付渠道都需要以公司的身份 ...

  2. ART模式下基于Xposed Hook开发脱壳工具

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik ...

  3. 20145307陈俊达_安卓逆向分析_APKtools分析smail

    20145307陈俊达_安卓逆向分析_APKtools分析smail 引言 真刺激呢!到了第二篇博客了,难度开始加大,之前是简单的dex2jar和有图形界面的jd-gui,现在来隆重介绍强大的反汇编工 ...

  4. 20145307陈俊达_安卓逆向分析_Xposed的hook技术研究

    20145307陈俊达_安卓逆向分析_Xposed的hook技术研究 引言 其实这份我早就想写了,xposed这个东西我在安卓SDK 4.4.4的时候就在玩了,root后安装架构,起初是为了实现一些屌 ...

  5. 基于xposed Hook框架实现个人免签支付方案

    我的个人网站如何实现支付功能? 想必很多程序员都有过想开发一个自己的网站来获得一些额外的收入,但做这件事会遇到支付这个问题.目前个人网站是无法实现支付功能的. 今天我就给大家分享一下我的实现方案:&l ...

  6. 查找和定位Android应用的按钮点击事件的代码位置基于Xposed Hook实现

    本文博客地址:https://blog.csdn.net/QQ1084283172/article/details/80956455 在进行Android程序的逆向分析的时候,经常需要通过Androi ...

  7. 2019年5月1日起安卓应用应基于API 26开发,那么API等级是啥?

    2019年5月1日起安卓应用应基于API 26开发,那么API等级是啥? 转 https://www.ithome.com/html/android/372234.htm   据泰尔终端实验室公众微信 ...

  8. 基于xposed实现android注册系统服务,解决跨进程共享数据问题

    昨花了点时间,参考github issues 总算实现了基于xposed的系统服务注入,本文目的是为了“解决应用之间hook后数据共享,任意app ServiceManager.getService就 ...

  9. CTF的一道安卓逆向

    前几天打CTF时遇到的一道安卓逆向,这里简单的写一下思路 首先用jadx打开apk文件,找到simplecheck处(文件名是simplecheck),可以看到基本逻辑就是通过函数a对输入的内容进行判 ...

随机推荐

  1. 用Grub4dos引导,硬盘安装ArchLinux

    本来在工作机上用winXP,最近想深入Linux开发,于是决定装个Linux.家里的archLinux + awesome用得很好, 于是决定在工作机上也装一套. 不想刻盘,也不想用U盘,通过Grub ...

  2. 20155225 2016-2017-2 《Java程序设计》第七周学习总结

    20155225 2016-2017-2 <Java程序设计>第七周学习总结 教材学习内容总结 java提供的时间处理API 认识时间与日期,时间日期处理不是我想象中那么简单的问题,涉及地 ...

  3. datagrid时间插件

    jquery easyui日期控件中,在页面里用JS拿到设立的日期值的方法 链接:http://blog.csdn.net/liweibin_/article/details/13509917 jqu ...

  4. NYOJ 119 士兵杀敌(三) (线段树)

    题目链接 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算 ...

  5. zookeeper集群查看状态时报错Error contacting service. It is probably not running的一些坑以及解决办法

    最近在搭建mq集群时候需要用到,zookeeper,可是启动的时候显示成功了,查看状态的时候却报错了: 碰到这个问题也是研究好好半天才解决,这里就总结出一个快速解决办法! 首先,必须看日志: 报错信息 ...

  6. 洛谷 P4592: bzoj 5338: [TJOI2018]异或

    题目传送门:洛谷P4592. 题意简述: 题面说的很清楚了. 题解: 发现没有修改很快乐.再看异或最大值操作,很容易想到可持久化 01trie. 这里要把 01trie 搬到树上,有点难受. 树剖太捞 ...

  7. mysql远程连接数据库

    配置mysql允许远程连接的方法. (1)查看3306端口状态 netstat -an | grep 3306 (2)修改mysql配置文件 ubuntu系统:vim /etc/mysql/mysql ...

  8. 20 Organizing Go code 组织go代码

    Organizing Go code 16 August 2012 Introduction Go code is organized differently to that of other lan ...

  9. orcale数据库分配用户

    account lock:创建用户的时候锁定用户 account unlock:创建用户的时候解锁用户,默认该选项 create user zhou8–用户名 identified by zhou88 ...

  10. No.16 selenium学习之路之异常处理

    一.常见的几种异常: SyntaxError:语法错误 NameError:试图访问的变量名不存在 IndexError:索引错误,使用的索引不存在,超出序列范围 KeyError:使用了不存在的关键 ...