本篇介绍
frida 是一个hook工具,可以监控和修改app的行为,相比xposed优势是配置简单和支持主动调用
环境配置
frida的执行脚本是javascript,因此需要先安装nodejs和npm,安装frida只需要一条安装命令
代码语言:javascript复制pip install frida-tools
安装完后,frida就可以用了,安装的可用命令如下:
image.png
目前用的最多的是frida,frida-ps, frida-trace, 按照名字基本就可以看出功能了,第一个就是hook命令,第二个是查看进程的,第三个是跟踪函数调用。
接下来需要在Android设备上安装frida server,需要找和PC版本一样的server,然后push到 手机里。
当前的最新版本就是15.1.24,那么就应该选择下面这个
image.png
下载后好解压,然后push 到 /data/local/tmp
, 执行下面命令启动起来:
chmod a x frida-server-15.1.24-android-arm64
./frida-server-15.1.24-android-arm64 &
这时候在PC端执行frida-ps -Ua,如果配置正确,那么就会输出如下所示:
image.png
这个是我手机上装的应用,其他手机上可能会不一样,不过不影响。
这时候就可以试下frida-trace了,比如想看下微信会打开哪些文件,那么执行命令
frida-trace -U -f com.tencent.mm -i open
输出如下:
image.png
hook 演示
接下来搞一个demo,来hook下微信。首先先clone 下frida-agent-example
代码语言:javascript复制git clone https://github.com/oleavr/frida-agent-example.git
cd frida-agent-example
npm install
接下来打开这个目录,就可以写js 代码了, 新建一个hook.js
代码语言:javascript复制function main() {
console.log("load success")
Java.perform(function () {
var textView = Java.use('android.widget.TextView')
var str = Java.use('java.lang.String')
textView.setText.overload('java.lang.CharSequence').implementation = function (x) {
this.setText(str.$new('hooked'))
}
})
}
setImmediate(main)
然后执行命令:
代码语言:javascript复制frida -U -f com.tencent.mm -l hook.js
输出如下:
image.png
再执行下
代码语言:javascript复制%resume
这时候手机就运行起来了。
image.png
需要知道的是frida相比xposed的优势是frida 支持函数主动调用,这时候就需要用到一些js函数,对于类方法,那么直接调用就行
代码语言:javascript复制var clazz = Java.use('xxx')
clazz.fun()
对于成员方法,就需要用Java.choose:
代码语言:javascript复制 Java.choose('xxx', {
onMatch:function(instance) {
instance.func()
},
onComplete:function(instance) {
//todo
}
})
frida也支持RPC方式调用,通过python脚本翻译指令,这样我们就能通过交互来主动调用方法了。