Frida官方手册 - 使用姿势

发布者:freakish
发布于:2017-10-19 15:14

使用姿势

  • 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逻辑的,这个是最大的区别吧,大家最好再看下原文,避免被我误导)

声明:该文观点仅代表作者本人,转载请注明来自看雪