需求: hook一个oc方法,该方法有个参数是地址,如何对这个方法进行传参
**代码:
OC方法:
-[DBTool encStrWithData:error:]
// 调用方式应该是
NSError *error;
[tool encStrWithData:data error:&error];
data是一个正常的参数没有问题,error是一个地址
我是这样写的
function encrypt2(inputstr) {
log_debug('+[DBTool encStrWithData:error:] begin hook...');
var msg = ObjC.classes.NSString.stringWithString_(inputstr);
console.log("msg2: " + msg);
var msg_data = msg.dataUsingEncoding_(4);
console.log("--------------------");
console.log("msg_data2: " + msg_data);
console.log("--------------------");
var myDBTool = ObjC.classes.DBTool.alloc();
// 0x1031728a8是随意写的一个地址
var res = myDBTool['- encStrWithData:error:'].call(msg_data, ptr(0x1031728a8));
console.log("--------------------");
console.log("res2: " + res);
console.log("--------------------");
return res;
}
操作步骤:
msg_byte = b'\xe4\xba\xba\xe7\x94\x9f\xe8\x8b\xa6\xe7\x9f\xad\xef\xbc\x8c\xe6\x88\x91\xe8\xa6\x81\xe7\x94\xa8python'
msg = str(msg_byte, 'utf-8')
rpc.encrypt2(msg)
报错:
frida.core.RPCException: Error: expected a pointer
at m (<input>:1)
at call (native)
at encrypt2 (/script1.js:172)
at encrypt2 (/script1.js:200)
at apply (native)
at <anonymous> (frida/runtime/message-dispatcher.js:13)
at c (frida/runtime/message-dispatcher.js:23)
看出我传的地址出问题了,所以请问,这个入参应该怎么构建呢?
额外的一个问题:如果这个error是个block,那又该如何构建这个参数呢?
大佬们帮忙解惑。 谢谢!