易游网-易游模拟器

 找回密码
 立即注册
查看: 3331|回复: 0

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

[复制链接]

3382

主题

3401

帖子

38

积分

超级版主

Rank: 8Rank: 8

积分
38

技术达人

发表于 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!");
}

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|易游网-易游模拟器 Copyright @2015-2021 ( 浙ICP备15028007号-1 )

GMT+8, 2024-5-2 11:30 , Processed in 0.050783 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表