1.4.1 Frida介绍
官网对Frida的介绍是:Frida是平台原生App的Greasemonkey,说得专业一点,就是一种动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,这些原生平台可以是Windows、Mac、Linux、Android或者iOS,同时Frida还是开源的。
Greasemonkey可能看起来比较陌生,其实它是Firefox的一套插件体系,通过利用Greasemonkey插入自定义的JavaScript脚本可以定制网页的显示或行为方式。换言之,可以直接改变Firefox对网页的编排方式,从而实现想要的任何功能。同时,这套插件还是“外挂”的,非常灵活机动。同样,Frida也可以通过将JavaScript脚本插入App的内存中,对程序的逻辑进行跟踪监控,甚至重新修改程序的逻辑,实现逆向人员想要实现的功能,这样的方式也可以称为Hook。
Frida目前非常火爆,该框架从Java层的Hook到Native层的Hook无所不能,虽然持久化还是要依靠Xposed和Hookzz等开发框架,但是Frida的动态和灵活对逆向及自动化逆向帮助非常大。
Frida为什么这么火爆呢?
动静态修改内存实现作弊一直是刚需,比如金山游侠,本质上Frida做的是跟它一样的事情。原则上是可以用Frida把金山游侠,包括CheatEngine等“外挂”做出来的。当然,现在已经不是直接修改内存就可以高枕无忧的年代了。建议读者也不要这样做,要知道做外挂的行为是违法的,学安全先学法。
在逆向的工作上也是一样的道理,使用Frida可以“看到”平时看不到的东西。出于编译型语言的特性,机器码在CPU和内存执行的过程中,其内部数据的交互和跳转对用户来说是看不见的。当然,如果手上有源码,甚至哪怕有带调试符号的可执行文件包,就可以使用GDB、LLDB等调试器连上去调试查看。
那如果没有,是纯黑盒呢?如果仍旧要对App进行逆向和动态调试,甚至自动化分析以及规模化收集信息,此时我们需要的是拥有细粒度的流程控制和代码级的可定制体系以及不断对调试进行动态纠正和可编程调试的框架,Frida做这种工作可以说是游刃有余。
另外,Frida使用的是Python、JavaScript等“胶水语言”,这也是它火爆的一个原因:可以迅速地将逆向过程自动化,并整合到现有的架构和体系中去,为发布“威胁情报”“数据平台”甚至“AI风控”等产品打好基础。