我正在开发一个越狱应用程序,我不在乎它是否被App商店拒绝了。我找到了一种方法来使用这种方式完全消灭我的iPhone Is there a way to completely wipe out iPhone data programatically?。但是这种方法存在问题。它使我的iphone毫无价值,我必须使用iTunes恢复它。 我只是想以编程方式恢复我的iphone。
答案 0 :(得分:10)
SpringboardServices私有框架中有一个私有API SBDataReset。它擦除了所有数据。
您可以查看following code,例如如何使用它。
使用此API的应用程序应具有“com.apple.springboard.wipedevice”权限。
顺便说一句。另一种选择是使用MDM协议。它有一个擦除命令。但是,它需要更多的机器(MDM服务器,注册用户)。
看起来链接中的示例代码已过时。我查看了偏好设置以及其他一些使用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是砖擦除模式。
免责声明此代码按原样提供。我不知道如果在砖块模式下擦除设备将会发生什么。