Frida框架是一款基于Python和JavaScript语言进行Hook 和代码调试的框架,简单易学的编程语言配合强大的Hook功能,极大降低了逆向分析的门槛。不习惯Python语言也没关系,Frida的CLI工具也可以直接注入JavaScript代码,而且Frida框架存在多种语言绑定,如Node.js、Swift、.NET、Qml等。本书主要采取Python语言进行脚本编写。
Frida框架可以说是为逆向开发和安全研究人员量身定做的动态插桩工具,开发人员可以将自己编写的代码注入App应用程序的内存空间之中,监控和修改其中的代码逻辑。Frida可以Hook任意关键函数,追踪加密的API接口,甚至在进程中调用本地函数,所有的操作都不需要进行烦琐的编译工作或重新启动程序。此外,Frida框架还支持全平台运行,包括Windows、macOS、Linux、iOS和Android等,因此Frida框架成为逆向界的宠儿。
Frida框架包括客户端和服务端两个部分,如图1-1所示, 其中客户端一般安装在个人计算机上,而服务端安装于移动端。 客户端提交JavaScript代码之后,服务端会运行提交的JavaScript代码,两者之间存在一个用于交互的双向通信通道。其中客户端通常使用Python脚本编写,用于唤醒移动设备上的服务端,而Python脚本中编写的Hook代码则使用JavaScript语言,会经由客户端提交后,在服务端执行。
·图1-1 Frida通信方式
熟知Android安全防护和逆向开发的人员对Xposed框架肯定不会陌生。Xposed框架是一款Android Hook框架,可以在不修改apk的情况下对应用进行自定义,其相比于Frida框架的优势是具有非常多功能强大的模块,能够脱离个人计算机直接在Android端运行,还可以让其他用户下载安装使用。
所谓“闻道有先后,术业有专攻”,Frida框架更像是为专业的安全开发人员准备的调试工具。虽然不像Xposed框架一样编译模块给用户使用,但是却可以方便地对Android应用进行调试分析,分析协议之后可以使用其他编程语言进行协议复现。 此外,Xposed框架只能对Java层代码进行Hook,而Frida框架处理Java层代码和so层代码都游刃有余。
如今,随着开发人员对应用安全的重视,越来越多的Android应用开始在so层进行参数加密,协议分析也不得不深入到so层之中,Frida框架的优势也就体现出来了。