frida 如何Hook app启动阶段的方法
参考上面的文章,但是代码在最新的frida15.2上面总是报错,
{type: error, description: Error: VM::AttachCurrentThread failed: -1, stack: Error: VM::AttachCurrentThread failed: -1
at o (frida/node_modules/frida-java-bridge/lib/result.js:4)
at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:25)
at <anonymous> (frida/node_modules/frida-java-bridge/lib/vm.js:14)
at Xe (frida/node_modules/frida-java-bridge/lib/android.js:499)
at Ie (frida/node_modules/frida-java-bridge/lib/android.js:195)
at Ce (frida/node_modules/frida-java-bridge/lib/android.js:16)
at _tryInitialize (frida/node_modules/frida-java-bridge/index.js:17)
at g (frida/node_modules/frida-java-bridge/index.js:9)
at <anonymous> (frida/node_modules/frida-java-bridge/index.js:317)
at call (native)
at o (/_java.js)
at <anonymous> (/_java.js)
at <anonymous> (frida/runtime/java.js:1)
at call (native)
at o (/_java.js)
at r (/_java.js)
at <eval> (frida/runtime/java.js:3)
at _loadJava (native)
at get (frida/runtime/core.js:125)
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()
