私はジェイルブレイクされたアプリ用に開発していますが、アプリストアによって拒否されてもかまいません。この方法でiPhoneを完全に消去する方法を見つけましたプログラムでiPhoneデータを完全に消去する方法はありますか?。ただし、この方法には問題があります。それは私のiphoneを無価値にし、私はitunesを使用してそれを回復しなければなりません。プログラムでiPhoneを工場出荷時に復元したいだけです。
質問する
3141 次
1 に答える
12
SpringboardServicesプライベートフレームワークにはプライベートAPISBDataResetがあります。すべてのデータを消去します。
使い方など、以下のコードを確認できます。
このAPIを使用するアプリケーションは、動作するために「com.apple.springboard.wipedevice」エンタイトルメントを持っている必要があります。
ところで。もう1つの方法は、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関数には2番目のパラメーターがあることに注意してください。
4は通常のワイプモードで、6はブリックワイプモードのようです。
免責事項このコードは現状のまま提供されます。デバイスがブリックモードでワイプされるとどうなるかわかりません。
于 2013-03-04T16:07:40.680 に答える