Fermion 是一个封装了 frida-node 和 monaco-editor 的 electron 应用程序。它通过单一 UI 提供了一个完全集成的环境,用于原型设计、测试和优化 Frida 脚本。随着 Monaco 的集成,带来了你所期望的 Visual Studio Code 的所有功能:代码检查(Linting)、IntelliSense、按键绑定等。此外,Fermion 还带有 Frida API 的 TypeScript 语言定义,因此编写 Frida 脚本很容易。
名字里有什么? 费米子可以是基本粒子,例如电子,也可以是复合粒子,例如质子。费米子包括所有夸克和轻子,以及由奇数个此类粒子组成的复合粒子,例如所有重子和许多原子及原子核。
下载仓库并在终端中导航到 Fermion 文件夹。进入后,设置以下环境变量。
# Windows
set npm_config_runtime=electron
set npm_config_target=21.0.0
# Linux / OSX
export npm_config_runtime=electron
export npm_config_target=21.0.0
之后,使用以下命令安装运行 Fermion 所需的包:
npm install
完成后,你可以通过执行以下命令运行 Fermion:
npm start
完成上述步骤,然后在终端中执行以下命令:
# Windows
electron-packager . --icon .\src\images\fermion-ico.ico
# Linux
electron-packager . --icon ./src/images/fermion-ico.png
# OSX
electron-packager . --icon ./src/images/fermion-ico.icns
你可以从 releases 获取适用于 x64 Windows 和 Linux 的最新预构建 Fermion。
Fermion 中看到一条消息,告诉你问题所在以及如何解决。但一般来说,你可以以 root 身份运行 Fermion 或 Frida Server,或者运行以下命令 sudo sysctl kernel.yama.ptrace_scope=0。问:我想针对新版本的 Frida/Electron 构建自己的 Fermion 版本。如何找出当前存在哪些 prebuild?
ELECTRON_TARGETS_DEFAULT 和 ELECTRON_TARGETS_FREEBSD 中分别查看默认构建版本。问:我想查看/更改/更新 Monaco 编辑器中使用的类型定义,我该怎么做?
node_modules/@types/frida-gum/index.d.ts。问:老哥,为啥你的 trace 不稳定 (╯°□°)╯︵ ┻━┻
hot pointer 和/或跟踪生成的图包含数千个节点,那么你很可能会发现 trace 窗口 在接收数据时会出现延迟。此外,与任何类型的跟踪一样,它可能导致进程不稳定 / 崩溃 / 冻结。你可以在下面看到一个 Fermion 实际运行的示例,本例中是对 kernel32!ReadFile 进行插桩。

Fermion 具有自动补全、代码检查(linting)和 Frida API 符号支持。

Fermion 可以使用 device 上下文菜单连接到 Frida server,以调试远程应用程序。在许多情况下,例如通过 USB 调试或通过类似 genymotion 的模拟器附加到移动应用程序时,Fermion 会自动检测到可用的服务器。不过,也可以使用 IP 和 Port 组合来指定远程服务器。

Fermion 内置了对线程 CALL tracing 的支持。

这可能并不完全符合你的预期。当你定义一个 pointer 或 module/Symbol 组合时,tracer 将 attach 到该位置,只要有 thread 在该位置执行,它就会开始跟踪该线程在执行期间执行的所有 CALL 指令,直到它返回。这意味着不同的执行可能会生成不同的图,也意味着你可能无法看到函数所做的所有事情(例如,如果在函数内部产生了一个不同的线程)。

Fermion 使用 dot 将这些跟踪转换为 Graphviz SVG 格式,然后你可以对其进行探索。这是我在进行探索性工作时偶尔会觉得有用的一个功能(函数做了什么?那次执行有多复杂?)。话虽如此,这是一个我在 Fermion 之上构建的 prototype 功能,可能需要更多的打磨才能更适合生产环境。
Fermion 还内置了 Frida JavaScript API 的文档。和其他人一样,我并不总能记住所有东西是如何工作的,而在应用程序中内置文档则无需再打开浏览器窗口。

有关版本具体变更的更多详细信息,请参阅 changelog。
如果你将 Fermion 集成到你的工作流中并觉得它有用,我鼓励你提交 pull request、提交 bug 报告以及提出功能请求来改进这个应用程序。我并非一名专业的 Node 开发者,所以我相信人们会找到方法来优化和重做某些组件。
Frida v15.0+ 中的新功能。我只想表达一些特别的感谢!