frida是一个面向开发人员、逆向工程师和安全研究人员的动态检测工具,它可以帮助使用者在没有程序源代码的情况下对程序进行分析、监控。frida框架是一款hook框架,基于动态二进制插桩技术,研究人员在使用时只需要将自行编写的javascript代码通过python脚本注入到所要分析的程序进程中即可。frida还是一款易用的跨平台工具,原生支持Win、Mac、Linux、Android、iOS等平台。
由于其简单、跨平台的特性,在程序黑盒调试发挥出来强大的作用,在Android平台上已经超越了此前非常流行的Xposed框架。
frida的官方网址为https://frida.re/,frida是一款开源框架,下载地址为https://github.com/frida/frida。
frida分为客户端和服务端,客户端即为分析端,服务端即为被分析端。以在Windows上进行Android应用分析为例,Windows为客户端,Android设备为服务端。本文下面均以Windows作为客户端,Android设备作为服务端举例进行。
首先进行frida客户端的安装部署,由于frida需要使用python脚本将javascript代码注入到被分析进程中,所以首先需要安装python环境。
本文所使用的python环境为python3.7.7,此处建议使用pyenv启动指定的python版本,方便在由于python版本和frida版本不匹配出现异常时可以快速切换python版本
pyenvinstall 3.7.7
pyenvlocal 3.7.7

使用pip安装frida,建议指定frida版本进行安装,本文使用的frida版本为12.8.0
pipinstall frida==12.8.0

安装frida-tools
pipinstall frida-tools==5.3.0

安装objection
pipinstall objection==1.8.4

上述安装过程结束后使用命令frida --version查看所安装的frida版本,版本无误则frida客户端的安装部署就成功了。

frida客户端安装成功后,接下来进行frida服务端的安装。
本文使用的Android设备为夜神模拟器最新版本(7.0.1.6),Android版本为7.1.2
https://www.yeshen.com/cn/download/fullPackage?beta

进入到夜神模拟器根目录
使用命令nox_adb.execonnect 127.0.0.1:62001,使电脑和模拟器建立连接
使用命令adb.exedevices和adb.exe shell getprop ro.product.cpu.abi查看目前正在运行的Android设备的状态和位数

到https://github.com/frida/frida中下载相对应的frida服务端,版本、系统、位数均要正确。

下载解压后使用命令adb.exepush C:\ChangZhi\frida-server data/local/tmp/frida-server将frida服务端传送到Android设备中
给frida服务端分配权限并运行
chmod 777frida-server
./frida-server

上面的窗口不要关闭
新开一个命令行窗口,执行以下命令
adb.exeforward tcp:27042 tcp:27042
adb.exeforward tcp:27043 tcp:27043
进行端口转发

最后执行frida-ps-U命令,使用frida查看所连接的Android设备的进程列表,输出进程列表则证明frida的服务端可客户端均已安装部署成功。

若执行frida-ps-U命令报错或者无任何显示,则需要确认python版本、frida客户端版本、frida-tools版本、frida服务端版本是否匹配正确,重新安装部署即可。
编写脚本使用fridaHook Android应用程序。
frida官方提供了进行Hook的javascript API(https://frida.re/docs/javascript-api/#java),只需要根据官方提供的JavascriptAPI编写js脚本即可实现对Android应用程序的Hook。
如下,编写一个helloWorld.js脚本,Hook“别摸我”应用进程,使其打印出“helloworld!”


通过frida-ps-U获取到应用进程包名后,使用下面的命令即可进行Hook操作
frida -U-l C:\frida\helloWorld.js com.deepnoite.bmw2

接下来使用官方文档中的 CTF APK来演示frida在Android逆向分析中的能力
首先下载官方提供的Hookpython脚本
https://frida.re/docs/examples/android/

然后下载官方提供的APK并安装到模拟器上,这个APP是一个石头剪子布的游戏,通过点击下方的R、P、S三个按键和机器进行石头剪刀布的游戏,游戏的结果会在屏幕上显示。

运行上面的Hook脚本,此时会发现,点击R、P、S三个按钮中的任何一个,每次游戏都会获得“WIN!”,这是由于frida在程序运行过程中修改了游戏的结果,使得返回的游戏结果都是机器输自己赢。







