Frida使用方法

下面内容均已Android为主

框架

普通

import frida
import sys


def on_message(message, data):
    print(message)


dev = frida.get_remote_device()
# 需要hook的应用包名
session = dev.attach('com.gotokeep.keep')

# hook代码的核心部分
jscode = """
Java.perform(function () {
	// hook的类
    var b0 = Java.use('l.q.a.y.p.b0');
    // hook的方法
    b0.a.overload("java.lang.String").implementation = function(){
    	// 获取方法入参
        var args = arguments[0];
        // 打印log
        send("字符串转MD5 b0.a args:"+args);
        // 根据需要返回结果,这里使用this调用原方法
        return this.a(args);
    }
});
"""
script = session.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()

在python文件中写入上面文件,执行该文件即可。
运行时如果报错,建议检查下手机端frida-server是否运行,是否进行了端口映射,详见Frida环境搭建

人性化

对于上面的方法,hook代码部分需要是字符串的形式,对于我这种习惯了用ide提示的人,简直太不友好了,大大降低了ide的作用。不过不要慌,frida-agent-example了解一下?
这是一个能让你使用TypeScript语法编写hook代码的脚手架,工程结构并不复杂,clone到本地之后,先使用npm命令安装下依赖

npm install

会有一个如下的工程目录结构
Frida使用方法_第1张图片
其中index.ts文件便是编写hook代码的地方
Frida使用方法_第2张图片
如果想自定义文件名称或者路径,可以在package.json中修改目录指向
Frida使用方法_第3张图片
然后执行如下命令就可以进行hook了

# 将ts代码转换为js
npm run build
# 将代码注入
frida -U -f android应用包名 --no-pause -l _agent.js

为了方便起见可以在终端执行如下命令,检查代码有变更后自动build并注入

npm run watch

常用方法

方法hook

Java.perform(function () {
	// hook的类
    var b0 = Java.use('l.q.a.y.p.b0');
    // hook的方法,如果有重载方法也通过overload中的参数区分
    b0.a.overload("java.lang.String").implementation = function(){
    	// 获取方法入参
        var args = arguments[0];
        // 打印log
        send("b0.a args:"+args);
        // 根据需要返回结果,这里使用this调用原方法
        return this.a(args);
    }
});

构造方法hook

变量hook

静态变量hook

Java.perform(function () {
    var CrypLib = Java.use('com.gotokeep.keep.common.utils.CrypLib');
    CrypLib.a.overload("java.lang.String").implementation = function(){
        var arg = arguments[0];
        send("静态变量a:"+CrypLib.a.value);
        return this.a(arg);
    }
});

native方法hook

持续更新中

你可能感兴趣的:(逆向之路)