在 iOS 上使用 Frida
在 iOS 设备上,Frida 支持两种使用模式,具体使用哪种模式要看你的 iOS 设备是否已经越狱。
使用场景
已越狱机器
未越狱机器
已越狱机器
在越狱的环境下,是用户权限最大的场景,在这样的环境下你可以很轻松的调用系统服务和基础组件。
在这篇教程中,我们来看下如何在 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 内部的?Gadget?和?frida-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 等这些工具确实很有用,但是有时候你会发现你还是需要定制自己更加个性化的功能,那就最好去读一下?Functions?和?Messages?这两章,比如当你使用到?frida.attach()?的时候,其实底层调用的就是?frida.get_usb_device().attach()。
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~
作者:?小蓝人敌法
来源:csdn
链接:https://blog.csdn.net/freakishfox/article/details/78299349
著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~-~