Frida对Android app的JS脚本注入方法

Frida可以将JS脚本注入Android app进程,从而实现动态更改app行为。


##PC端环境配置
Python + JavaScript
安装frida(Python bindings)和frida-tools(命令行工具)

pip install frida
pip install frida-tools

##手机端环境配置
下载对应版本的frida-server
将frida-server放入手机并运行

adb push frida-server /data/local/tmp/
adb shell "chmod 755 /data/local/tmp/frida-server"
adb shell "data/local/tem/frida-server &"

##编写脚本
JavaScript API详见
常用语法:

  • Java.use(className)
    获取类的JavaScript wrapper(即包装Java类)
  • $new()
    调用构造器
  • $dispose()
    清除实例
  • Java.scheduleOnMainThread(fn)
    在VM主线程中运行fn方法
  • Java.choose(className, callbacks)
    枚举Java堆中存活的实例
  • Java.cast(handle, klass)
    由句柄handle指向的klass(由Java.use而来)类型的实例,创建JavaScript wrapper(即包装Java实例)
  • $init
    实例的构造方法
  • overload(…, …)
    重载参数

示例:

import frida, sys

def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)

jscode = """
Java.perform(function() {
    var TargetClass = Java.use('目标className');
    TargetClass.目标methodName.implementation = function() {
        console.log('targetMethod is hooked');
    };
});
"""

rdev = frida.get_usb_device()
print(rdev)
process = rdev.attach('目标packageName')
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
sys.stdin.read()

你可能感兴趣的:(Android)