欢迎来到Frida

本网站致力于成为一个全面的Frida指南。我们会介绍如何使用命令进行交互式函数追踪,如何基于Frida提供的接口构建你自己的工具, 并给出日后开发Frida的实用建议。

所以,Frida究竟是什么?

Frida 是为原生应用提供的 Greasemonkey 更专业的说法是,Frida 是一个动态代码调试工具. 它可以帮助你将一小段JavaScript代码,或者你自己的库注入到原生应用中 (Windows, macOS, GNU/Linux, iOS, watchOS, tvOS, Android, FreeBSD, and QNX). 此外在Frida提供的API之上,你可以构建一些简单的小工具,这些工具可以根据情况定制。

我为什么要这样做?

这是一个非常好的问题。我们将会用一些具体的场景例子来回答:

  • 市面上出现了一个受人追捧的热门app,可惜的是这款app只有iOS版本,现在你想将它移植到其他平台。 你发现该应用依赖于一个加密的网络协议,而像wireshark这类工具根本没办法工作。此时你打开了Frida并使用它做API跟踪。
  • 你现在正在开发一款桌面应用,该应用已经部署到客户的站点上了。你的应用里有个小问题,但是之前内置的 记录代码不太够用。此时你需要给你客户重新构建一个增加更多记录代码的新版本。然后你忽然意识到,你可以使用Frida开发一个 该应用特有的工具,用来增加所有你需要的诊断,而实现这些仅需要几行Python代码。没有必要给客户发送一个新的定制版本——你只需要发送这个简单的工具, 而这个简单的工具甚至能同时适用该桌面应用的多个版本。
  • 你想构建一个嗅探加密协议的Wireshark。Frida甚至可以修改针对虚假网络条件的函数调用,如果不用Frida,你可能需要重置整个测试实验室。
  • 你想让你的内部应用在不污染代码的前提下使用一些黑盒测试。

为什么使用Python接口,却使用JavaScript的调试逻辑?

Frida 的核心是使用 C 编写的,并在工作时会注入 QuickJS 到目标进程中, 在这里,你的JS代码在运行时,会拥有对内存,拦截函数,甚至调用原生函数的全部权限。 此外还有一个双工通信的频道,架设在你的应用以及目标进程内的JS代码之间,用于提供通信。

使用Python和JS允许快速的开发,同时规避掉潜在的风险。Frida可以帮助你捕获错误并返回异常,而不是干看着程序崩溃。

可以使用Python开发吗?完全没有问题. 你可以直接使用Frida的C接口, 也可以使用 C内核之上的其他语言绑定, 比如 Node.js, Python, Swift, .NET, Qml, Go, 等等. 新语言的绑定过程十分简单。

高级技巧™, 注意, 以及 警告

贯穿整个指南,会有一些短小但实用的信息,这些信息可以简化Frida的使用,或者让其使用更有技巧性。你需要留意一下

高级技巧™ 帮助你更好使用Frida。

这里的小提示和技巧会帮助你成为Frida大神!

注意事项 是一些短小精悍的建议。

一些额外的,能帮助你更好理解Frida的提示。

警告信息 可以帮助你别把事情搞砸了。

如果你不想你的程序崩溃的太快,你最好留意一下。

如果你遇到了什么本指南没有讲到的内容,或者你知道什么对其他人也有帮助的技巧,请 提交issue ,我们会尽快将其包含在此教程内。

上一页