5

我正在为越狱的应用程序开发,我不在乎它是否被应用商店拒绝。我找到了一种使用这种方式彻底清除 iPhone 的方法有没有办法以编程方式完全清除 iPhone 数据?. 然而,这种方法存在一个问题。它使我的 iphone 一文不值,我必须使用 iTunes 恢复它。我只想以编程方式恢复我的 iphone。

4

1 回答 1

12

SpringboardServices 私有框架中有一个私有 API SBDataReset。它会擦除所有数据。

您可以查看以下代码,例如如何使用它。

使用此 API 的应用程序应具有“com.apple.springboard.wipedevice”工作权限。

顺便提一句。另一种选择是使用 MDM 协议。它有一个擦除命令。但是,它需要更多的机器(MDM 服务器,注册用户)。

更新 1

看起来链接中的示例代码已过时。我查看了 Preferences 和其他几个使用 SBDataReset 的 iOS 软件,看起来新参数被引入到 SBDataReset。

试试下面的代码(对不起,我现在没有越狱的iOS设备,所以我不能自己尝试)

#import <UIKit/UIKit.h>
#import <UIKit/UIApplication.h>
#include <dlfcn.h>
#include <stdio.h>

// Framework Paths
#define SBSERVPATH "/System/Library/PrivateFrameworks/SpringBoardServices.framework/SpringBoardServices"
#define UIKITPATH "/System/Library/Framework/UIKit.framework/UIKit"

#define WIPE_MODE_NORMAL 4

int main(int argc, char **argv)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    // Fetch the SpringBoard server port
    mach_port_t *p;
    void *uikit = dlopen(UIKITPATH, RTLD_LAZY);
    int (*SBSSpringBoardServerPort)() = 
    dlsym(uikit, "SBSSpringBoardServerPort");
    p = SBSSpringBoardServerPort(); 
    dlclose(uikit);

    // Getting DataReset proc
    void *sbserv = dlopen(SBSERVPATH, RTLD_LAZY);
    int (*dataReset)(mach_port_t* port, int wipeMode) = dlsym(sbserv, "SBDataReset");
    dataReset(p, WIPE_MODE_NORMAL);
    dlclose(sbserv);

    [pool release];
}

请注意,SBDataReset 函数还有第二个参数。

看起来 4 是普通擦除模式,6 是砖块擦除模式。

免责声明此代码按原样提供。我不知道如果设备以砖块模式擦除会发生什么。

于 2013-03-04T16:07:40.680 回答