返回介绍

在 iOS 上使用 Frida

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

  • 在 iOS 设备上,Frida 支持两种使用模式,具体使用哪种模式要看你的 iOS 设备是否已经越狱。

使用场景

  1. 已越狱机器
  2. 未越狱机器

已越狱机器

  • 在越狱的环境下,是用户权限最大的场景,在这样的环境下你可以很轻松的调用系统服务和基础组件。
  • 在这篇教程中,我们来看下如何在 iOS 设备上进行函数追踪。

设置 iOS 设备

  • 启动 Cydia 然后通过 Manage -> Sources -> Edit -> Add 这个操作步骤把 https://build.frida.re 这个代码仓库加入进去。然后你就可以在 Cydia 里面找到 Frida 的安装包了,然后你就可以把你的 iOS 设备插入电脑,并可以开始使用 Frida 了,但是现在还没有必要马上插到电脑上。

快速的冒烟测试

  • 现在在你的主控端电脑上(Windows、macOS)执行如下命令,确保 Frida 可以正常工作:
  • 如果你还没有把你的 iOS 设备插入到电脑里面(或者插到电脑但是没有被正常识别),那应该会像下面这样提示:
  • 如果 iOS 设备已经正常连接了,那应该会看到设备上的进程列表了,大致如下:
  • 如果到了这一步没有问题,那就可以很开心的继续往下走了。

跟踪 Twitter 中的加密函数

  • OK,现在我们来开始搞点好玩的。在你的设备上启动 Twitter,然后让它持续的保持在前台,并确保你的机器不会进入睡眠状态。现在在你的主控端的机器上执行如下命令:
  • 目前, 很多 App 的加密、解密、哈希算法基本上都是使用 CCryptorCreate 和相关的一组加密函数。
  • 现在,开始尝试在 App 里面触发一些网络操作,然后就应该能看到一些输出了,比如我的输出是下面这样的:
  • 现在,你还可以实时的修改 JavaScript 脚本,然后继续在 App 里面深挖各种功能。

没有越狱的 iOS 设备

  • 为了让一个 App 能使用 Frida,必须想办法让它加载一个 .dylib ,就是一个 Gadget 模块。
  • 在这篇教程里面我们需要配置一下 xcode 的编译配置来让你的 App 可以集成 Frida。当然也可以使用相关的工具来修改一个已经编译好的 App, 比如 insert_dylib 这样的工具。

定制你的 xCode 工程

  • 给 iOS 设备下载最新的 FridaGadget.dylib 库,然后给这个库签名:
  • 在 xCode 里面打开你的工程,然后把 Frameworks 文件夹拖动到 AppDelegate 旁边,注意一定要拖动整个文件夹,而不是文件,xCode 会提示你 Choose options for adding these files: , 然后选择 Copy items if needed 选项,并且勾选 Create folder references ,然后点击 完成 。然后选中项目,切换到 Build Phases 页面,展开 Frameworks 文件夹,然后把 FridaGadget.dylib 拖进 Link Binary With Libraries 一节,并确保 Frameworks 文件夹被加入了 Copy Bundle Resours 一节。

快速的冒烟测试

  • 在 xCode 里面启动 App,然后就应该能看到下面的输出:
  • 现在你会发现 App 处于挂起状态,这是因为集成进来的 Frida 起作用了,Frida 正在等待你来执行任何你感兴趣的 API 或者你可以选择直接让程序继续运行。
  • 现在 Frida 正在等待我们操作,并且集成到 App 内部的 Gadgetfrida-server 提供的是一样的接口,现在我们尝试枚举一下进程列表试试:
  • 不同于 frida-server ,我们只能枚举到一个进程,就是这个 App 本身。
  • 我们还可以使用下面的命令来看下可以运行哪些 App:
  • 到目前为止还不错, 现在如果我们调用 attach() 函数,目标 App 就会结束等待状态,继续运行。但是如果我们一开始使用 spawn(["re.frida.Gadget"]) 启动 App 的话,我们这个时候再 attach() 的话,这个时候目标 App 也不会直接运行的, 除非我们主动调用 resume() ,也就是说使用前一种方式我们的代码执行时机晚一点,后一种方式可以在更早的时机执行我们的代码。

跟踪 libc 函数

  • 现在假如你使用 xCode 启动的程序,现在 App 处于挂起状态,现在我们尝试开始和 Frida 交互吧,看下面的例子:
  • 现在你可以实时的编辑 JavaScript 脚本了,然后继续在 iOS 的 App 里面深挖。

使用模拟器

  • 现在在模拟器中进行测试,就要把上面的命令行中的 -U 替换成 -R ,这样一来底层的内部调用也从 get_usb_device() 变成 get_remote_device()

打造自己的工具

  • 像是 Frida,Frida-trace 等这些工具确实很有用,但是有时候你会发现你还是需要定制自己更加个性化的功能,那就最好去读一下 FunctionsMessages 这两章,比如当你使用到 frida.attach() 的时候,其实底层调用的就是 frida.get_usb_device().attach()

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

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

发布评论

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