eumnq8 发表于 2021-1-29 13:51:02

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]
查看完整版本: frida objc对象方法和静态方法调用规则