随着编程技术不断发展, 逆向分析也要与时俱进. 自从核弹级的调试框架frida面世后, 就迅速走红成为圈内当之无愧的顶流. 无论是能还原vmp的顶级大佬还是刚入坑汇编都看不懂的萌新, 对frida全都欲罢不能. frida的出现直接对软件保护进行了降维打击, 大大降低了逆向的入门门槛. 国内互联网巨头的攻城狮们苦心设计的加密算法统统被逆向大神用frida还原, 各类CTF中全部都有frida的身影. 本文将初步尝试学习使用神器frida, 以追赶时代的脚步.
frida的主要用途是动态的二进制插桩, 也就是通过hook函数分析程序执行流程, 通过监控函数入参与返回值分析函数功能, 进而修改程序来实现特定功能. 类似的工具最为著名的就是安卓的Xposed框架, 但frida和同类工具相比有着巨大优势:
跨平台: android/ios/windows/macos/linux 几乎支持常见的所有平台.分析三端都支持的软件或者游戏时不需要换工具.
支持多种语言: 支持对 安卓java/苹果OC/PC汇编 的hook. 常见的软件无论是java层还是jni层, 无论是il2cpp还是纯C++编译的客户端程序, 或者运行在centos里的服务器, 全部都可以使用frida编写插件分析.
使用js语言编写脚本: 高级动态语言大大降低了入门门槛, 极大提升开发效率.
支持热加载脚本: 对于分析环境复杂的软件, 省去了重新编译重启调试环境的时间, 使调试分析思路更连贯.
官网有详尽的api文档: 因为使用者众多, 生态较好, 教程讨论以及"轮子"插件也多.
代码开源: frida作者github代码更新频繁, issue互动较多, 工具本身的bug会被及时修复, 性能也在不断优化.
逆向最重要的是实现三个功能: 读写任意内存, hook任意函数, 执行任意函数. 只要实现了这三个功能就算是图灵完备了, 拥有了对程序的完全控制力, 可以实现原开发者能够实现的任何功能. 在frida中, 实现这三个功能的代码极其简单, 不需要任何IDE, 不需要写一行汇编代码, 打开记事本, 几十行代码就能实现想要功能.
本文将以台服为例, 简单介绍如何使用frida编写服务器插件以及客户端插件. 通过离线奖励/装备回收/时装镶嵌/nut扩展/无限难度地下城/转生系统等几个小功能, 来介绍如何用frida编写插件在台服实现任何想要的功能.