5

私はジェイルブレイクされたアプリ用に開発していますが、アプリストアによって拒否されてもかまいません。この方法でiPhoneを完全に消去する方法を見つけましたプログラムでiPhoneデータを完全に消去する方法はありますか?。ただし、この方法には問題があります。それは私のiphoneを無価値にし、私はitun​​esを使用してそれを回復しなければなりません。プログラムでiPhoneを工場出荷時に復元したいだけです。

4

1 に答える 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 に答える