{'type': 'error', 'description': 'Error: VM::AttachCurrentThread failed: -1', 'stack': 'Error: VM::AttachCurrentThread failed: -1\n
at o (frida/node_modules/frida-java-bridge/lib/result.js:4)\n
at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:25)\n
at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:14)\n
at Xe (frida/node_modules/frida-java-bridge/lib/android.js:499)\n
at Ie (frida/node_modules/frida-java-bridge/lib/android.js:195)\n
at Ce (frida/node_modules/frida-java-bridge/lib/android.js:16)\n
at _tryInitialize (frida/node_modules/frida-java-bridge/index.js:17)\n
at g (frida/node_modules/frida-java-bridge/index.js:9)\n
at <anonymous> (frida/node_modules/frida-java-bridge/index.js:317)\n
at call (native)\n
at o (/_java.js)\n
at <anonymous> (/_java.js)\n
at <anonymous> (frida/runtime/java.js:1)\n
at call (native)\n
at o (/_java.js)\n
at r (/_java.js)\n
at <eval> (frida/runtime/java.js:3)\n
at _loadJava (native)\n
at get (frida/runtime/core.js:125)\n
at <eval> (/script1.js:11)', 'fileName': 'frida/node_modules/frida-java-bridge/lib/result.js', 'lineNumber': 4, 'columnNumber': 1}
重新搞了一下,在原来
Java.perform(function()
{
var MainActivity = Java.use("com.rom.cpptest.MainActivity"); // 类的加载路径
MainActivity.onCreate.overload('android.os.Bundle').implementation = function(str){
send("success1");
this.onCreate(str);
send("success2 "+str);
};
});
再包裹一下
function hook_OnCreate()
{
Java.perform(function()
{
var MainActivity = Java.use("com.rom.cpptest.MainActivity"); // 类的加载路径
MainActivity.onCreate.overload('android.os.Bundle').implementation = function(str){
send("success1");
this.onCreate(str);
send("success2 "+str);
};
});
}
setImmediate(hook_OnCreate);
整体代码如下,就可以运行了
import frida # 导入frida模块
import sys # 导入sys模块
jscode = """
function hook_OnCreate()
{
Java.perform(function()
{
var MainActivity = Java.use("com.rom.cpptest.MainActivity"); // 类的加载路径
MainActivity.onCreate.overload('android.os.Bundle').implementation = function(str){
send("success1");
this.onCreate(str);
send("success2 "+str);
};
});
}
setImmediate(hook_OnCreate);
"""
def on_message(message, data): # js中执行send函数后要回调的函数
if message["type"] == "send":
print("[*] {0}".format(message["payload"]))
else:
print(message)
device = frida.get_usb_device()
pid = device.spawn(['com.rom.cpptest']) # app包名
process = device.attach(pid) # 加载进程号
script = process.create_script(jscode) # 创建js脚本
script.on('message', on_message) # 加载回调函数,也就是js中执行send函数规定要执行的python函数
script.load() # 加载脚本
device.resume(pid) # 重启app
sys.stdin.read()
备注:该方法适用于android12以下的机器,高了不好用了