查看: 5408|评论: 0
个人博客

[破解逆向] frida objc对象方法和静态方法调用规则

eumnq8 2021-01-29 13:51 5408 0
[复制链接]

3382

文章

19

评论

40

积分

普通会员LV2

积分
40

技术达人

发表于 2021-1-29 13:51:02 | 显示全部评论序号 |阅读模式
frida研究ios的时候,
函数名以”+”开头的,如:“+ URLWithString:”,可以直接通过类名调用方法,相当于java中的static函数
函数名以“-”开头的需要找到一个实例化的对象,然后再调用方法

如果内存中没有这样的对象,这种情况需要手动生成一个实例,用法为ObjC.classes.类名.alloc()
如果内存中存在实例化后的对象,这种情况需要先找出一个类的实例,使用var tmp=ObjC.chooseSync(ObjC.classes.类名),例如:
ObjC.chooseSync(ObjC.classes.PARSHealthPedometer10thHomeViewController)[0]
其中[0]表示取找到的实例中的第一个实例,可根据实际情况换成其他的实例。
调用函数时,以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)[0]
        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 下一条

QQ|易游网-易游模拟器 Copyright @2015-2026 ( 浙ICP备15028007号-1 )

© 2026 易游网-易游模拟器 Copyright @2015-2026

快速评论 返回顶部 返回列表