邦邦邦邦 真神来了 Frida¶
注意
本文档内容基于frida 17 版本,有部分破坏性更新,请注意版本区别 本文大部分场景是 android 平台下的场景,windows 等平台有相同之处,但也有区别,需自行查阅文档
什么是frida¶
frida 是一款基于 python+javascript 的 hook 框架,可运行在 android、ios、linux、win等各个平台,主要使用的动态二进制插桩技术。
基础配置¶
-
安装frida
Bash -
如果在本机注入,则可以直接使用,例如:
-
在目标设备配置对应版本的frida-server并运行 > 通过远程连接方式,端口转发方式连接,详见绕过端口检测
-
测试frida正常连接
Bash
基础使用¶
- frida使用python将javascript脚本注入到目标进程中运行,从而实现hook功能
- javascript基础语法较为简单,但是在frida中有大量自定义接口,需通过文档与脚本阅读理解学习,我将会在本帖按照随心而定的顺序介绍一些常用的接口。
注入模式¶
- attach 附加到正在运行的进程
- spawn 重启进程在运行开头注入,即加入-f参数
脚本参数¶
获取进程信息¶
插桩¶
- Interceptor.attach(target, callbacks[, data])
- target: 需要hook的函数地址
- callbacks: 回调函数对象
- data: 可选数据对象
frida 检测隐藏¶
文件名检测¶
- 检测:frida-server 文件名
- 绕过:修改frida-server的文件名
端口检测¶
- 检测:frida 默认 27042 和 27043 端口,通过检测这两个端口可以检测frida的存在
-
绕过:修改frida-server的端口号
??? note "为什么需要端口转发" USB 连接不是 TCP/IP 网络连接 虽然你通过 USB 连接了 Android 设备,但 USB 并不自动暴露设备上的 TCP 端口给你的电脑。 你的电脑无法直接访问设备上的 127.0.0.1:1234 或 0.0.0.0:1234。 ./frida-server在 Android 设备上监听一个 TCP 端口。但你的电脑无法直接访问这个端口,除非你通过网络或端口转发建立桥梁。 adb forward 通过端口转发告诉 ADB:把你电脑上的 localhost:1234 映射到 Android 设备上的 localhost:1234。 这样你就可以在电脑上通过 127.0.0.1:1234 访问设备上的 frida-server。此时不能使用 -U 自动连接,应该:
而如果需要 python 脚本连接,则为:Text Only 双进程保护¶
- 检测:进程自己调试自己,使无法被 frida 附加
- 绕过:使用 spwn 方式启动程序
Bash