frida objc对象方法和静态方法调用规则
frida研究ios的时候,函数名以”+”开头的,如:“+ URLWithString:”,可以直接通过类名调用方法,相当于java中的static函数
函数名以“-”开头的需要找到一个实例化的对象,然后再调用方法
如果内存中没有这样的对象,这种情况需要手动生成一个实例,用法为ObjC.classes.类名.alloc()
如果内存中存在实例化后的对象,这种情况需要先找出一个类的实例,使用var tmp=ObjC.chooseSync(ObjC.classes.类名),例如:
ObjC.chooseSync(ObjC.classes.PARSHealthPedometer10thHomeViewController)
其中表示取找到的实例中的第一个实例,可根据实际情况换成其他的实例。
调用函数时,以my_obj['- requestUploadWithSure:'](1)的函数,如果有参数直接附在括号中。
除了用[]形式调用,也可以自己转成字符调用,规则为:
:转为_
比如- openURL:
调用的时候可以写成对象.openURL_(url)
比如+ actionWithTitle:style:handler:
调用的时候写成类.actionWithTitle_style_handler_(title, style, handler)
有一个:说明有一个参数
if (ObjC.available)
{
try
{
//var my_obj=ObjC.chooseSync(ObjC.classes.PARSHealthPedometer10thHomeViewController)
var my_obj=ObjC.classes.PARSHealthPedometer10thHomeViewController.alloc()
my_obj["- requestUploadWithSure:"](1)
//my_obj.requestUploadWithSure_(1)
}
catch(err)
{
console.log("[!] Exception2: " + err.message);
}
}
else
{
console.log("Objective-C Runtime is not available!");
}
页:
[1]