Hook 的目标函数只有一个参数,a1,拦截之后,想打印x的值,frida 该怎么去实现呢?
因为OC 的Native 的类型,frida 中很多对不上,不知道该怎么处理了,objc_msgSend 调用的函数是: NSArray 的 arrayWithObjects:count: ,我最开始的方式是:
var tmp=args[0].add(0x30).readPointer(); // 获取a1[6]
console.log(“tmp is :”,tmp);
var selfobj=new ObjC.Object(tmp); // a1[6]创建 一个OC的Object
var array_obj=ObjC.classes.NSArray["+ arrayWithObjects:count:"].call(selfobj,1)
然后提示
提示1要变成指针,我改成 ptr(1)传进去,然后又提示这个:
通过看上面的类型呢,发现那个1的参数应该是NSUInteger,可是这个类型,它也不是类啊,看了OC 他其实就是相当于 C语言的 Long类型,无解了。
然后换了一种思路,按照IDA中显示的拿来构造objc_msgSend的主动调用来实现截图中的部分,构造如下:
前面定义 objc_msgSend 的nativefunction 是这样的:
var func_send=new NativeFunction(objc_msgSend_addr,‘pointer’,[‘pointer’,‘pointer’,‘pointer’,‘int’]);
然后 主动调用的代码如下:
var tmpstring=Memory.allocUtf8String(“arrayWithObjects:count:”);
console.log(“come here alloc utfstring”);
var func_string=ObjC.classes.NSString’+ stringWithUTF8String:’;
console.log(“come here:”,func_string.toString());
var tmp=args[0].add(0x30).readPointer(); // 获取a1[6]
console.log(“tmp is :”,tmp);
var selfobj=new ObjC.Object(tmp); // a1[6]创建 一个OC的Object
var goal=ObjC.classes.NSArray.alloc();
var transation_array=func_send(goal,func_string,selfobj,1)
然后一运行就崩,研究看了好多资料,还是没解决,初次接触IOS 逆向,不懂的还有很多,特来论坛请教各路大神,希望能解答疑惑