我知道方法困惑方面有无数资源。但是,是否有可能从私有(private)API中混淆方法?问题是没有头文件。我想从PrivateFramework中的私有(private)类中筛选一个方法,例如(随机示例)Message.framework方法

这是用于个人测试,我知道它将被苹果遗忘。

最佳答案

您可以使用NSClassFromString来获取Class并使用运行时库来执行方法转换。不需要头文件。您只需要知道类名和方法签名即可。

sel_getUid给出有关@selector(somePrivateMethod)的错误信息时,可以使用somePrivateMethod无效的选择器(因为 header 不可用)

来自my Xcode plugin的代码

SEL sel = sel_getUid("codeDiagnosticsAtLocation:withCurrentFileContentDictionary:forIndex:");
Class IDEIndexClangQueryProviderClass = NSClassFromString(@"IDEIndexClangQueryProvider");

Method method = class_getInstanceMethod(IDEIndexClangQueryProviderClass, sel);
IMP originalImp = method_getImplementation(method);

IMP imp = imp_implementationWithBlock(^id(id me, id loc, id dict, IDEIndex *idx) {
    id ret = ((id (*)(id,SEL,id,id,id))originalImp)(me, sel, loc, dict, idx);

    // do work

    return ret;
});

method_setImplementation(method, imp);

关于ios - 淹没私有(private)框架iOS API的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24442348/

10-11 05:31