1

我的 iphone 应用程序已越狱,我不在乎我的应用程序是否被应用商店拒绝。

我希望DevicePINController在我的程序中使用私有 API。

我最近发现了名为 的私有 API DevicePINController,但是它不能正常工作。该应用程序运行,除了它的方法之外,所有其他方法都不执行任何操作。它的BOOL方法总是返回 false。设置方法不做任何事情。

有谁知道设备引脚控制器需要哪些权利权限?

编辑:代码

    id away = [[objc_getClass("DevicePINController") alloc]init];

    NSLog( [away simplePIN] ? @"YES":@"NO" );
    NSLog( [away _isBlocked] ? @"YES":@"NO" );
    NSLog( [away _attemptValidationWithPIN:@"1234"] ? @"YES":@"NO" );

    NSLog(@"%d",[away _unblockTime] );
    NSLog(@"%@",[away blockedStateKey] );
    NSLog(@"%@",[away blockTimeIntervalKey] );
    NSLog(@"%@",[away failedAttemptsKey] );
    NSLog(@"%d",[away pinLength] );
    NSLog(@"%@",[away stringsBundle] );

    NSLog(@"%@",[away stringsTable]);

每个方法调用都返回错误的答案。有些只返回null。布尔总是返回 NO。

4

1 回答 1

1

所以,第一个问题是你有一个nil对象。在 Objective-C 中,向对象发送消息nil将什么都不做。如果该方法应该返回 a ,则BOOL默认值为,因此如果 away 为 nil,您将返回一堆 NO。BOOLNO

要回答您的后续问题(在您测试您确实有一个nil值之后)......您确实需要确保您的应用程序打开DevicePINController定义的库。否则,它将不知道该类是什么,也无法实例化它。因此,objc_getClass将返回您的nil对象。

对于该类,它在Preferences.framework中定义,位于

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/PrivateFrameworks/Preferences.framework

(显然,根据您的安装目录和/或 SDK 版本进行调整)

您可以将其添加到 Xcode 中的项目中,方法是转到目标设置 ->构建阶段->将二进制文件与库链接并添加它。您当然必须导航到上面的目录,因为它是一个私有框架,并且不会显示在初始弹出列表中。

或者,您可以使用代码动态加载库:

#import <objc/runtime.h>
#include <dlfcn.h>

void* libHandle = dlopen("/System/Library/PrivateFrameworks/Preferences.framework/Preferences", RTLD_LAZY);

id away = [[objc_getClass("DevicePINController") alloc] init];
if (away == nil) {
    NSLog(@"object is nil");
} else {
    if ([away respondsToSelector: @selector(simplePIN)]) {
        NSLog(@"object responds to selector!");
    }
}

close(libHandle);

我在 iOS 6.1(越狱)上测试了它,它可以工作。

顺便说一句,请将您的 PIN 更改为1234. 我的行李箱上有相同的组合;)

于 2013-03-08T07:47:34.280 回答