1.摘要
Frida是一款基于Python+javascript的Hook框架, 可运行在Windows、Android、iOS、Linux、MacOS全平台系统中,主要使用了动态二进制插桩技术。插桩技术是指将额外的代码注入到目标程序中, 以实现收集目标运行时信息, 插桩技术主要分为两种:源代码插桩和二进制插桩, 源代码插桩是将额外代码注入到程序源代码中,二进制插桩是将额外代码注入到二进制可执行文件中。
使用Frida可以访问目标进程的内存空间,在目标程序运行时可以覆盖一些功能,从导入的类中调用函数,在堆上可以查找对象实例并使用这些对象实例,并可以Hook、跟踪和拦截函数等等。
2.Frida的能力
Frida是一个非常强大的动态instrumentation框架,其主要能力包括:
-
拦截(Hook)系统API调用:可以hook目标程序的各种系统API调用,如文件、网络、进程、加密等,拦截和修改参数或返回值。
-
注入JS代码:可以实时向目标程序注入JavaScript代码,调用其函数接口或修改程序运行逻辑。
-
动态调试:可以动态地设置断点、Dump内存、遍历对象等,无需重启程序。
-
反混淆和脱壳:可以通过dump内存或hook相关函数的方式对加壳/混淆的目标程序进行反混淆和脱壳。
-
适用范围广:支持Windows、Linux、macOS、iOS、Android等主流平台。
-
多语言绑定:提供Java、Python、C#等语言的绑定库, 可以使用脚本语言进行交互。
-
插件机制:支持扩展自己的插件,实现自定义功能。
-
开源免费:Frida是完全开源免费的,社区活跃。
3.Frida常用语法
Frida在实战使用过程中,经常使用的功能语法主要包括以下这些:
导入frida模块:
const frida = require('frida');
附加/注入进程:
// 附加
const session = await frida.attach(pid);
// 注入
const session = await frida.spawn([path], options);
创建/加载/卸载脚本实例:
# 创建
const script = await session.createScript(source);
# 加载
await scri