本篇介绍
frida 是一个hook工具,可以监控和修改app的行为,相比xposed优势是配置简单和支持主动调用
环境配置
frida的执行脚本是javascript,因此需要先安装nodejs和npm,安装frida只需要一条安装命令
pip install frida-tools
安装完后,frida就可以用了,安装的可用命令如下:

目前用的最多的是frida,frida-ps, frida-trace, 按照名字基本就可以看出功能了,第一个就是hook命令,第二个是查看进程的,第三个是跟踪函数调用。
接下来需要在Android设备上安装frida server,需要找和PC版本一样的server,然后push到 手机里。
当前的最新版本就是15.1.24,那么就应该选择下面这个

下载后好解压,然后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,如果配置正确,那么就会输出如下所示:

这个是我手机上装的应用,其他手机上可能会不一样,不过不影响。
这时候就可以试下frida-trace了,比如想看下微信会打开哪些文件,那么执行命令
frida-trace -U -f com.tencent.mm -i open
输出如下:

hook 演示
接下来搞一个demo,来hook下微信。首先先clone 下frida-agent-example
git clone https://github.com/oleavr/frida-agent-example.git
cd frida-agent-example
npm install
接下来打开这个目录,就可以写js 代码了, 新建一个hook.js
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)
然后执行命令:
frida -U -f com.tencent.mm -l hook.js
输出如下:

再执行下
%resume
这时候手机就运行起来了。

需要知道的是frida相比xposed的优势是frida 支持函数主动调用,这时候就需要用到一些js函数,对于类方法,那么直接调用就行
var clazz = Java.use('xxx')
clazz.fun()
对于成员方法,就需要用Java.choose:
Java.choose('xxx', {
onMatch:function(instance) {
instance.func()
},
onComplete:function(instance) {
//todo
}
})
frida也支持RPC方式调用,通过python脚本翻译指令,这样我们就能通过交互来主动调用方法了。
网友评论