Frida通过其强大的用C语言编写的工具核心Gum提供了动态工具。由于这种工具逻辑易于更改,因此您通常希望用脚本语言编写它,以便在开发和维护它时获得简短的反馈循环。 这就是GumJS发挥作用的地方。 仅需几行C语言,您就可以在可以完全访问Gum API的运行时中运行一段JavaScript,从而允许您挂接函数,枚举已加载的库,其导入和导出的函数,读取和写入内存,扫描内存中的模式 等
Frida提供
目录
注入式的
嵌入式的
预装的
Injected
在大多数情况下,您想生成一个现有程序,附加到一个正在运行的程序,或者劫持一个正在生成的程序并在其中运行您的检测逻辑。由于这是使用Frida的常见方式,因此我们大多数文档都着眼于此。 该功能由frida-core提供,它用作物流层(logistics layer),将GumJS打包到一个共享库中,并注入到现有软件中,并提供双向通信通道,以在需要时与您的脚本对话,然后卸载。 他们。 除了此核心功能之外,frida-core还允许您枚举已安装的应用程序,正在运行的进程和已连接的设备。 连接的设备通常是运行frida-server的iOS和Android设备。 该组件本质上只是一个守护程序,它通过TCP公开frida-core,默认情况下在localhost:27042上侦听。
Embedded
有时无法在注入模式下使用Frida,例如在没有越狱(jailed )的iOS和Android系统上。 在这种情况下,我们为您提供frida-gadget,这是一个共享库,您应该将其嵌入要检测的程序中。 通过简单地加载库,它将允许您使用现有的基于Frida的工具(例如frida-trace)与它进行远程交互。 它还支持一种完全自主的方法,该方法可以在文件系统外运行脚本,而无需任何外部通信。
在这里阅读更多关于Gadget的内容
Preloaded
也许您对LD_PRELOAD或DYLD_INSERT_LIBRARIES很熟悉? 如果有JS_PRELOAD会不会很酷? 这是上一节中讨论的共享库frida-gadget在配置为通过从文件系统加载脚本自动运行时真正有用的地方。
在这里阅读更多关于Gadget的内容