如何在我的iOS调整中检测它是否在Backboardd中?

时间:2014-01-20 15:01:38

标签: objective-c jailbreak iphone-privateapi tweak cydia-substrate

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

%ctor{
    if (%c(SpringBoard)) {
    }
}

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

MSInitialize {
    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);
    }
}

1 个答案:

答案 0 :(得分:3)

一般来说,你需要找到一些obj-c类,它对你所挂钩的东西是唯一的。理想情况下,它应该在二进制文件中定义类,而不是从框架导入。例如,在SpringBoard中有SpringBoard类只能在SpringBoard的二进制文件中找到。如果objc_getClass("SpringBoard")返回非NULL值,那么你就在SpringBoard中。

现在,背板。我在这样的情况下正在做的是在我的PC上复制二进制文件并使用class-dump或IDA获取该二进制文件中所有类的列表。如果是背板,那么好的候选人将是BKApplication。所以

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

会做这个工作。在backboardd中没有Backboardd类。

就未来而言,使用更受欢迎的标签来解决这类问题。如果您使用jailbreakiphone-privateapi代码,则可以更好地获得答案。