概述
Frida是个轻量级别的hook框架。用Roy_Chen的话来说,说的专业一点,Frida是一种动态插桩工具,可以插入一些代码到原生app
的内存空间去(动态地监视和修改其行为),这些原生平台可以是Win
、Mac
、Linux
、Android
或者iOS
。
Frida使用Python
注入 JavaScript
脚本,从而能够在程序运行时实时地插入额外代码和数据,尽管大多数情况下,Frida用在对Android程序的Hook,但实际上是可以作用在大部分原生平台的。
关于Frida的使用方法等相关内容,会在后面对Android进行Hook的部分再作讨论,在这之前还有Smail汇编,Arm指令,Dex文件格式等内容的学习。之所以现在就介绍Frida安装的内容,是因为最近打算试着编写Android平台的Hook代码,在安装Frida时遇到了一些坑,防止以后忘记,在此先记录下来。
安装Python3
Frida是用的Python作为接口注入JavaScript代码的,首先我们需要安装Python。为啥是3.7版本的呢?因为网上查阅的资料都是用的Python3.7,我也就用Python3.7了。虽然还是会遇到问题,待会再讨论。(2021.3.14更新:不一定要3.7版本的Python,但是frida的版本,frida-server的版本,以及Python3的版本,一定要能对的上)
去官网下载个Python3.7后,安装,记得点击下面的添加路径
打开命令行,键入python,回车,进入Python交互界面,安装成功。
安装Frida
常规方法
有个非常简单的办法
1 | pip3 install frida |
只要在命令行中执行完这两条语句即可成功安装。但是多数情况下,在一台机器上第一次安装frida时,通过这两行指令,很难一次成功(我在公司一次成功了,还是在没有科学上网的情况下…),会遇到奇奇怪怪的坑,耽误很久。也因此下面还有一个比较常规的半手动安装的办法。
手动安装方法
到这里下载相应的文件如下:两个文件frida-12.8.20.tar.gz 和frida-12.8.20-py3.7-win-amd64.egg,根据自己的系统和型号选择进行下载,但是这两个文件的版本号一定要对应。(2021.3.14更新:在手动安装的情况下,.egg文件必须和当前Python的版本匹配,例如现在是3.7版本,那么就不能用Python3.8,此外手机端的frida-server也必须和.egg文件指定的frida版本匹配,例如现在就必须用frida-12.8.20的frida-server。当然这个版本现在在Android真机上跑不起来了,最好还是安装新版,为此.egg文件以及Python版本也要同步)
将下载的文件frida-12.8.20.tar.gz解压,进入目录后,执行如下指令安装
Code1
python setup.py install
第一次执行时往往会失败,因为指定目录下找不到frida-12.8.20-py3.7-win-amd64.egg文件,我们只需要将该文件复制到它指定的目录下(%UserProfile%),再执行一遍指令即可
这时,我们相对于手动完成了pip3 install frida指令执行的操作,接下来只需进入命令行执行指令(注:这里还需要将frida-12.8.20-py3.7-win-amd64.egg文件复制到*\Python\Lib\site-packages目录下再执行下述指令;该指令会执行失败多次,需要重复尝试以及长时间等待才能完成frida的完整安装。2020/7/5补充)
Code1
pip3 install frida-tools
调试Android真机(2021.3.14新增)
环境:一台电脑(已安装frida和adb)、一部安卓手机(已root,并开启USB调试)
完成上述安装后,在官网下载对应版本的
frida-server-版本号-android-arm.xz
(以Android6.0.1版本的手机为例)解压后,修改文件名为frida-server
进入命令行,执行指令
adb push frida-server /data/local/tmp
,将frida-server给弄到真实机的/tmp目录下接下来
adb shell
进入真机shell,su
切换root用户,找到frida-server后修改权限为755。然后在当前目录下执行./frida-server &
。若看到返回进程PID的结果,说明frida-server成功在手机端被启用。最后,新开一个命令行窗口,执行
frida-ps -U
(U是指明指令应用在USB连接的设备上),若能列出真实机上的进程,则说明实验成功。
小结
以上是在笔记本中配置环境时采的坑,由于台式机尚未配置,写下此篇也是方便以后配置时踩到坑再来看。(2021.3.14,新入职后,负责Android逆向,最近采了不少坑,当然主要是在家配置环境时遇到的,在单位倒是一帆风顺,另一方面,关于IDA动态调试后面也会考虑更新,但目前能力有限,对于壳以及反调试仍没有作为)
参考链接
- https://www.freebuf.com/articles/system/190565.html (Roy_Chen一篇关于对Frida的介绍文章)
- https://www.cnblogs.com/pcat/p/12501850.html (简单Frida安装方法,第一次成功率不高)
- https://www.cnblogs.com/tjp40922/p/12799139.html (常规Frida安装方法,成功率高)
- https://www.jianshu.com/p/c349471bdef7 (一篇关于Frida的简要介绍)