0

我想给Backboardd注入一些功能,由于某些原因,我不能使用plist来限制它,所以我想用“if”来确定它是否在Backboardd里面。我知道在'Logos'中我可以这样使用:

%ctor{
    如果(%c(跳板)){
    }
}

但是没有 Logos,我可以像下面那样做吗?它不起作用。

初始化 {
    if (objc_getClass("Backboardd")) {
        CFMessagePortRef local = CFMessagePortCreateLocal(NULL, CFSTR(MACH_PORT_NAME), messageCallBack, NULL, NULL);
        CFRunLoopSourceRef source = CFMessagePortCreateRunLoopSource(NULL, local, 0);
        CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
    }
}
4

1 回答 1

3

通常,您需要找到一些对您要挂钩的内容独特的 obj-c 类。理想情况下,它应该是在该二进制文件中定义的类,而不是从框架中导入的。例如,在 SpringBoard 中有一个SpringBoard类只能在 SpringBoard 的二进制文件中找到。如果objc_getClass("SpringBoard")返回非 NULL 值,那么您在 SpringBoard 内。

现在,篮板。在这种情况下,我正在做的是在我的 PC 上复制二进制文件并使用类转储或 IDA 获取该二进制文件中所有类的列表。在篮板的情况下,好的候选人将是BKApplication。所以

if (objc_getClass("BKApplication")) {
    ...
}

会做的工作。backboardd 中没有Backboardd类。

只是为了将来,对这样的问题使用更流行的标签。如果您使用jailbreakiphone-privateapi标记,则更有可能获得答案。

于 2014-01-20T18:39:24.700 回答