android frida hook介绍

2022-10-25 16:48:08 浏览数 (2)

本篇介绍

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, 执行下面命令启动起来:

代码语言:javascript复制
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脚本翻译指令,这样我们就能通过交互来主动调用方法了。

0 人点赞