[原创]Frida 加载和启动 XServer
2020-7-7 21:15 7519
XServer 是我常用的通信协议分析工具,是一个 Xposed 插件,可能有些同学也在用。
然而 Xposed 的使用空间受限,不但很多应用对其做了检测,去做绕过有时很麻烦,而且 Xposed 无法在一些特殊的定制安卓系统上使用。
Frida 在这些环境下较为方便,但是在工具开发上有难度,因为:
- Frida 的 JS 脚本里缺少各类支持的库,想要做个 HTTP 请求都要自己写。
- Frida 对 Java 方法的 Implementation 里应该是 native 状态,不方便进行异步操作。
当我在使用 Frida 时,并没有一个现成的既支持实时篡改方法调用,又能很好地处理应用内各类复杂 Java 对象的工具。
所以,作为一个 Xposed 的遗民,我决定挣扎一下,用 Frida 加载和驱动 XServer,冒充 Frida 工具,让这个旧时代的 Xposed 插件焕发新春。
XServer 启动,长得完全就像是个 Frida 工具
使用 XServer 查看应用已加载的类
在图形化界面 Hook 特定的方法
跟踪应用内的方法调用
点进去还能跟踪调用的堆栈信息
并通过 Burp 动态拦截应用的方法调用,并实时篡改参数或结果
并且可以在 Burp 里重放请求,从而直接调用对应方法(用于通信协议或加解密)
再就是可以直接读取 / 修改 / Dump 内存,这个功能还很简陋
以上,XServer 的功能全部都能用 Frida 正常实现。
XServer 本身是一个 Xposed 插件,但其实依赖 Xposed 的地方只是注入目标应用和 Hook,大部分功能其实都是 Java 层面的奇技淫巧。
所以我对 Hook 部分进行了封装,使其既可以被 Xposed 实现(默认),也可以被其他 Hook 框架实现(比如 Frida),从而使一个 Xposed 插件可以脱离 Xposed Framework 工作。
然后我用 Frida 实现了 XServer 的注入和 Hook 功能。然后,就正常工作了。这部分实现可以在XServer.js中看到,使用了一些技巧。
(实际上,我还用 Frida 实现了 Xposed API,从而可以加载一般的 Xposed 插件,但还不稳定,所以不拿出来了)
使用 Frida 的时候,比起 JS+Python,JS+Java 也有它的优势,比如说 Java 可以很容易在安卓应用内部玩花活,这对熟悉安卓的人十分友好。
用 Java 编写工具的逻辑,然后用 Frida 去实现它的底层功能,至少,我这个 Xposed 遗民觉得,挺香。
XServer:https://github.com/monkeylord/XServer
(另附操作视频,见附件)
[注意] 欢迎加入看雪团队!base 上海,招聘 CTF 安全工程师,将兴趣和工作融合在一起!看雪 20 年安全圈的口碑,助你快速成长!
最后于 2020-7-7 21:55 被 Monkeylord 编辑 ,原因: 补充附件
https://bbs.pediy.com/thread-260541.htm