前提条件:

1、Root手机一部

2、需要通过Xposed installer(http://dl.xposed.info/latest.apk)安装Xposed Framework;

一、ZjDroid工具介绍

ZjDroid是基于Xposed Framewrok的动态逆向分析模块,逆向分析者可以通过ZjDroid完成以下工作:

  • DEX文件的内存dump
  • 基于Dalvik关键指针的内存BackSmali,有效破解加固应用
  • 敏感API的动态监控
  • 指定内存区域数据dump
  • 获取应用加载DEX信息。
  • 获取指定DEX文件加载类信息。
  • dump Dalvik java堆信息。
  • 在目标进程动态运行lua脚本。

二、ZjDroid相关命令

1、获取APK当前加载DEX文件信息:

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_dexinfo"}' 

2、获取指定DEX文件包含可加载类名:

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_class","dexpath":"*****"}' 

4、根据Dalvik相关内存指针动态反编译指定DEX,并以文件形式保存。

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"backsmali","dexpath":"*****"}'

该方式可以脱壳目前大部分流行的加固防护。(由于手机性能问题,运行较忙)

例外情况:

由于ApkProtect特定防修改检测,需要做如下修改即可解固该保护:

(1)在设备上创建特定目录(如/data/local)并 chmod 为777
(2)复制zjdroid.apk到该目录,并修改文件名为zjdroid.jar
(3)修改/data/data/de.robv.android.xposed.installer/conf/modules.list,模块代码文件修改为zjdroid.jar,然后重启设备即可。

5、Dump指定DEX内存中的数据并保存到文件(数据为odex格式,可在pc上反编译)。

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_dexfile","dexpath":"*****"}' 

6、Dump指定内存空间区域数据到文件

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_mem","start":1234567,"length":123}' 

7、Dump Dalvik堆栈信息到文件,文件可以通过java heap分析工具分析处理。

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"dump_heap"}' 

8、运行时动态调用Lua脚本

该功能可以通过Lua脚本动态调用java代码。

使用场景:

a.可以动态调用解密函数,完成解密。

b.可以动态触发特定逻辑。

adb shell am broadcast -a com.zjdroid.invoke --ei target pid --es cmd '{"action":"invoke","filepath":"****"}' 

luajava相关使用方法:http://www.keplerproject.org/luajava/

9、敏感API调用监控

三、相关命令执行结果查看

1、命令执行结果:

adb shell logcat -s zjdroid-shell-{package name} 

2、敏感API调用监控输出结果:

adb shell logcat -s zjdroid-apimonitor-{package name}

四、ZjDroid的安装

1.首先需要安装xposed框架,运行后选择“框架”==》“安装/更新”操作。

2.安装模板(ZjDroid.apk)

安装ZjDroid.apk后,点击xposed的模块选项,勾上ZjDroid选项,然后重启系统激活软件

五、脱壳案例演示

以“捕鱼达人3(1.01版)”为例来演示ZjDroid的脱壳过程,“捕鱼达人3”加的是“某加密”的壳,这个壳的关键词是chaosvmp。在手机上安装好程序并运行,然后依据以下步骤进行脱壳:
1、打开命令行输入以下命令查看logcat:

adb logcat -s zjdroid-shell-org.cocos2d.fishingjoy3

如下图所示:

记下hook的pid=14630
2、另外开启一个命令窗口,通过adb shell向手机发送执行命令获取APK当前加载的DEX文件的信息,命令如下:

am broadcast -a com.zjdroid.invoke --ei target 14630 --es cmd '{action:dump_dexinfo}'

这时候第一个打开的命令窗口就会出现以下信息:

从图中可以看到3个filepath信息,到底应该dump哪个呢?我们一般首先选择.apk后缀的,如果dump出现错误,可以再试试包含classes.jar的路径(梆梆加固的要选择classes.jar的路径)。现在开始执行dump dex的命令:

am broadcast -a com.zjdroid.invoke --ei target 14630 --es cmd '{action:backsmali, "dexpath":"/data/app/org.cocos2d.fishingjoy3-1.apk"}'

正常情况下,如果dump完毕,则会提示“build the dexfile ok”,dump出来的dex文件保存在/data/data/应用包名/files目录下,文件名为dexfile.dex。我们将该文件重命名为classes.dex替换掉原包中的同名文件,再重新签名安装运行就可以了。下图所示为对陌陌5.0版本成功dump的结果。

但是在本例中,等待一段时间后,并没有出现跟上面类似的提示,并且程序停止不再运行,如下图所示。

查看/data/data/ org.cocos2d.fishingjoy3/files目录下的dexfile.dex文件,内容为空,说明dump时建立dex文件不成功。不过不要紧,还有一个smali文件夹,里面包含了执行backsmali命令后得到的全部smali文件。

注意:如果执行backsmali命令的时候提示“the cmd is invalid”,则可能是以下几个原因:

(1)命令输入不对。仔细检查一下命令是否输入正确,包括引号的输入。

(2)没有获取root权限。已经root的手机su一下即可。

3、修复错误
       用apktool把原apk反编译,将smali文件夹里面的文件用dump出来的文件替换,然后重编译,出现如下错误信息:

根据错误提示,找到对应文件的1767和3963行的代码

将这几行代码注释掉,并以同样方法处理掉接下来的错误,就可以顺利进行重打包了。将重打包后的文件签名并安装运行,闪退。后来在AndroidManifest.xml文件中发现android:name没有修改,于是把该属性删除,重打包安装还是闪退,这到底是肿么了?

通过LogCat查看log信息,发现问题在这里:

用IDA打开各个so文件,按下shift+F12快捷键,搜索“fuck exit1!”,在libfishingjoy3.so中找到了该字符串,查看其调用情况,如图所示:

在002020B8处存在唯一调用:

用010Editor打开该so,CTRL+G跳转到002020B8处,修改16进制数据为00 00 A0 E1(NOP指令),保存,签名重新安装,这下可以正常运行了。

转载请注明:「电脑玩物」中文网 » ZjDroid工具介绍及脱壳详细示例

ZjDroid工具介绍及脱壳详细示例的更多相关文章

  1. asp.net core系列 39 Razor 介绍与详细示例

    原文:asp.net core系列 39 Razor 介绍与详细示例 一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor ...

  2. Android系统性能调优工具介绍

    http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...

  3. 网络攻防工具介绍——Wireshark

    网络攻防工具介绍 Wireshark 简介 Wireshark(前称Ethereal)是一个网络封包分析软件.它是一个理想的开源多平台网络协议分析工具.网络封包分析软件的功能是撷取网络封包,并尽可能显 ...

  4. [转帖]Oracle 补丁体系(PSR/PSU/CPU) 及 opatch 工具 介绍

    Oracle 补丁体系(PSR/PSU/CPU) 及 opatch 工具 介绍 原文:http://blog.csdn.net/tianlesoftware/article/details/58095 ...

  5. Redis集群维护、运营的相关命令与工具介绍

    Redis集群的搭建.维护.运营的相关命令与工具介绍 一.概述 此教程主要介绍redis集群的搭建(Linux),集群命令的使用,redis-trib.rb工具的使用,此工具是ruby语言写的,用于集 ...

  6. Linux centos7 rsync工具介绍、rsync常用选项、rsync通过ssh同步

    一.rsync工具介绍 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync.rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync ...

  7. pip软件包管理工具介绍及基本使用

    pip软件包管理工具介绍及基本使用 一分耕耘,一分收获,要收获得好,必须耕耘得好.-- 徐特立 一.pip软件包管理工具介绍: 定义:pip是Python包管理工具 作用:对Python包的查找.下载 ...

  8. 常用的HTTP服务压测工具介绍

    常用的HTTP服务压测工具介绍 在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量.排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资 ...

  9. 【极力分享】[C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例【转载自https://segmentfault.com/a/1190000004152660】

      [C#/.NET]Entity Framework(EF) Code First 多对多关系的实体增,删,改,查操作全程详细示例 本文我们来学习一下在Entity Framework中使用Cont ...

随机推荐

  1. Postgres数据库在Linux中的I/O优化

    I/O 优化1 打开 noatime方法: 修改 /etc/fstab2 调整预读方法: 查看 sudo blockdev --getra /dev/sda 设置 sudo blockdev --se ...

  2. mysql日志详细解析【转载】

    转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...

  3. 命名空间“Microsoft”中不存在类型或命名空间名称“Office”(是缺少程序集引用吗?)

    通过引用这个解决,不同的的office版本,中间的版本号可能不同,如图所示:

  4. Inno Setup入门(七)——提供安装语言选项

    Inno Setup安装目录下有一个Languages的文件夹,该文件夹提供了可供使用的语言,通过在脚本中加入[languages]段,可以实现该项功能,实现代码如下: [setup] ;全局设置,本 ...

  5. Sql Server异常捕获 try catch

    declare @num int begin try end try begin catch select ERROR_LINE() as 错误行数, ERROR_MESSAGE() as 错误消息 ...

  6. python gui编程

    1.准备工作 下载PyCharm 3.4(选择他的原因:1.有破解版,2.它的默认风格是PEB风格,一旦不符合PEB风格就会有提示) 下载并且安装界面设计工具wxFormBuilder 给python ...

  7. GCC: compilation process..

    gcc -Iproj/src myfile.c -o myfile gcc -c myfile.c "compile without linking gcc -D DEBUG myfile. ...

  8. 隐式intent启动电子邮件,不需要非电子邮件应用程序。

    Intent intent = new Intent(Intent.ACTION_SENDTO); intent.setType("text/plain"); intent.put ...

  9. hadoop中联结不同来源数据

    装载自http://www.cnblogs.com/dandingyy/archive/2013/03/01/2938462.html 有时可能需要对来自不同源的数据进行综合分析: 如下例子: 有Cu ...

  10. HDU 4738 Caocao's Bridges(割边)

    乍一看一个模板题,仔细一看还是模板题,但是三个坑.1,不是连通图,放0个.2 守卫为0,放1个. 3注意重边. #include<iostream> #include<cstdio& ...