返回介绍

使用姿势

发布于 2025-01-02 22:31:48 字数 1761 浏览 0 评论 0 收藏 0

  • Frida 的动态代码执行功能,主要是在它的核心引擎 Gum 中用 C 语言来实现的。一般大家使用 Frida 进行开发的时候,只需要使用脚本就行了,使用脚本来开发就可以大大缩短开发周期了。比如说 GumJS ,只需要很少的几行 C 代码,就可以拉起一个包含 JavaScript 运行环境的执行环境,这个环境中,你可以访问 Gum API,也可以 Hook 函数、枚举模块、内存枚举,甚至是调用导出函数。

本篇内容

  1. 注入模式
  2. 嵌入模式
  3. 预加载模式

注入模式

  • 大部分情况下,我们都是附加到一个已经运行到进程,或者是在程序启动到时候进行劫持,然后再在目标进程中运行我们的代码逻辑。这种方式就是 Frida 最常用的使用方式,因此我们的文档也把大部分的篇幅集中在这种方式上。
  • 注入模式的大致 实现思路 是这样的,带有 GumJS 的 Frida 核心引擎被打包成一个动态连接库,然后把这个动态连接库注入到目标进程中,同时提供了一个双向通信通道,这样你的控制端就可以和注入的模块进行通信了,在不需要的时候,还可以在目标进程中把这个注入的模块给卸载掉。
  • 除了上述功能,Frida 还提供了枚举已经安装的 App 列表,运行的进程列表已经已经连接的设备列表,这里所说的设备列表通常就是 frida-server 所在的设备。 frida-server 是一个守护进程,通过 TCP 和 Frida 核心引擎通信,默认的监听端口是 27042

嵌入模式

  • 在实际使用的过程中,你会发现在没有 root 过的 iOS Android 设备上你是没有办法对进程进行注入的,也就是说第一种注入模式失效了,这个时候嵌入模式就派上用场了。Frida 提供了一个动态连接库组件 frida-gadget , 你可以把这个动态库集成到你程序里面来使用 Frida 的动态执行功能。一旦你集成了 gadget,你就可以和你的程序使用 Frida 进行交互,并且使用 frida-trace 这样的功能,同时也支持从文件自动加载 Js 文件执行 JS 逻辑。
  • 关于 Gadget 更多功能,请参考原文链接(https://www.frida.re/docs/modes)

预加载模式

  • 大家应该熟悉 LD_PRELOAD ,或者 DYLD_INSERT_LIBRARIES 吧, 如果有 JS_PRELOAD 这种东西是不是更爽了呢!事实上对于我们上面讨论的 Gadget 是支持这种模式的, 这才是 Gadget 的强大之处,通过这种模式你就可以达到自动加载 Js 文件并执行的目的了。
  • 译者注 :这种模式我没测试,我猜测主要目的是说可以执行那些在程序入口点执行之前就需要执行的 JS 逻辑,而注入模式是在入口点跑过之后才能执行 JS 逻辑的,这个是最大的区别吧,大家最好再看下原文,避免被我误导)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文