- 对本书的赞誉
- 前言
- 基础篇
- 第 1 章 Android 中锁屏密码加密算法分析
- 第 2 章 Android 中 NDK 开发
- 第 3 章 Android 中开发与逆向常用命令总结
- 第 4 章 so 文件格式解析
- 第 5 章 AndroidManifest.xml 文件格式解析
- 第 6 章 resource.arsc 文件格式解析
- 第 7 章 dex 文件格式解析
- 防护篇
- 第 8 章 Android 应用安全防护的基本策略
- 第 9 章 Android 中常用权限分析
- 第 10 章 Android 中的 run-as 命令
- 第 11 章 Android 中的 allowBackup 属性
- 第 12 章 Android 中的签名机制
- 第 13 章 Android 应用加固原理
- 第 14 章 Android 中的 so 加固原理
- 工具篇
- 第 15 章 Android 逆向分析基础
- 第 16 章 反编译神器 apktool 和 Jadx
- 第 17 章 Hook 神器 Xposed
- 第 18 章 脱壳神器 ZjDroid
- 第 19 章 Native 层 Hook 神器 Cydia Substrate
- 操作篇
- 第 20 章 静态方式逆向应用
- 第 21 章 动态调试 smali 源码
- 第 22 章 IDA 工具调试 so 源码
- 第 23 章 逆向加固应用
- 第 24 章 逆向应用经典案例分析
- 第 25 章 Android 中常见漏洞分析
- 第 26 章 文件加密病毒 Wannacry 样本分析
18.5 工具使用案例
下面就要用一个案例来看看这个工具到底如何使用,有哪些功效。案例是捕鱼达人 v1.0.1 版本,具体的 apk 文件可以自行去网上搜索。安装游戏之后,然后顺便把上面的 ZjDroid 模块工具也安装上,之后进行重启生效。
最好是单独开一个 CMD 窗口用来查看打印结果,但是从上面的命令可以看到,应该需要这游戏的包名和进程 id,那么这两个数据怎么获取呢?其实在前几章已经介绍很多次,用一个命令即可:adb shell dumpsys activity top。如下所示,但是这时候需要运行起来捕鱼达人游戏:
使用命令就可以获取到游戏的包名 org.cocos2d.fishingjoy3 和进程 id=25304,这两个数据非常重要,这里可以先进行保管,进而后面使用。
下面首先来看一下这个应用用了哪些敏感的 API 数据,使用上面查看日志的命令即可:
运行结果如下所示:
这里有网络请求信息、网络切换的广播等数据,感觉这个工具的功能还是蛮多的。
下面再来看一下这个应用的 dex 文件信息,可以使用下面命令即可:
运行之后的结果如下所示:
这时候会发现,运行没有看到实际效果,原因是需要通过日志才能看到数据,因为上面命令运行的结果都是需要通过这个日志才可以看到的:
查看日志信息,结果如下所示:
这里可以看到具体的信息,看到有一个 filepath,这就是后续有些命令需要用到的 dex 路径,所以一定要记下来。
接下来看一个关于 dump 出游戏中所有的类名的命令:
这里的路径就是上面获取到的 apk 路径,结果还需要通过上面的日志命令才可以看到,如下所示:
这就导出了游戏包含的所有类名了。
最后来看如何脱壳,这是最关键的,也是本章的重点,当然也是这个工具最实用的一个功能。而本章用的游戏也是经过加固处理的,可以反编译看看这个游戏,如图 18-3 所示。
图 18-3 游戏加固图
会发现没几个类,而且有一个 Application 类,那么可以认定这个游戏被加固了,这里不介绍是使用哪家的加固平台操作了,也不再使用 IDA 等工具去动态调试脱壳了,这里直接使用这个工具进行操作即可。为了后续代码阅读方便,可以直接获取它的 smali 代码,使用这个命令:
这个命令的运行结果通过日志查看,如下所示:
而这个 smali 文件夹是存放在应用的/data/app/org.cocos2d.fishingjoy3/smali 中,可以把它拷贝出来即可,如图 18-4 所示。
图 18-4 dump 出游戏之后的 smali 代码
可以看到成功脱壳了,生成了游戏的所有 smali 文件代码。这个脱壳操作和后面章节介绍使用 IDA 工具进行脱壳的原理都差不多,因为应用程序不管怎么加固,最终都会使用一个系统函数将 dex 文件加载到内存中,而加载之前肯定要进行解密操作,只要在加载之前解密之后进行拦截即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论