- (void)clearTrace
{
// Kill all App Store Apps
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:@"/var/mobile/Library/Caches/com.apple.mobile.installation.plist"])
{
NSDictionary *dictionary1 = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Caches/com.apple.mobile.installation.plist"];
NSDictionary *dictionary2 = [dictionary1 objectForKey:@"User"];
NSEnumerator *enumerator = [dictionary2 keyEnumerator];
NSString *key;
while ((key = [enumerator nextObject]))
{
NSDictionary *dictionary3 = [dictionary2 objectForKey:key];
NSString *targetApp = [dictionary3 objectForKey:@"CFBundleExecutable"];
system([NSString stringWithFormat:@"killall -9 %@", targetApp] UTF8String]);
}
}
// Kill Safari
system("killall -9 MobileSafari");
// Enumerate all App Store Apps' directories and delete /Documents, /Library, /tmp, /StoreKit
NSDirectoryEnumerator *dirEnum = [fileManager enumeratorAtPath:@"/var/mobile/Applications/"];
NSString *file;
while ((file = [dirEnum nextObject]))
if ([file hasSuffix:@"/Documents"] || [file hasSuffix:@"/Library"] || [file hasSuffix:@"/tmp"] || [file hasSuffix:@"/StoreKit"])
{
[fileManager removeItemAtPath:[NSString stringWithFormat:@"/var/mobile/Applications/%@", file] error:nil];
[fileManager createDirectoryAtPath:[NSString stringWithFormat:@"/var/mobile/Applications/%@", file] withIntermediateDirectories:NO attributes:[NSDictionary dictionaryWithObjectsAndKeys:@"mobile", NSFileOwnerAccountName, @"mobile", NSFileGroupOwnerAccountName, nil] error:nil];
}
// Delete cookies
[fileManager removeItemAtPath:@"/var/mobile/Library/Cookies/Cookies.binarycookies" error:nil];
[fileManager removeItemAtPath:@"/private/var/root/Library/Cookies/Cookies.binarycookies" error:nil];
[fileManager removeItemAtPath:@"/var/mobile/Library/Safari/History.plist" error:nil];
[fileManager removeItemAtPath:@"/var/mobile/Library/Safari/SuspendState.plist" error:nil];
// Delete pasteboard contents and relaunch pasteboardd
system("launchctl unload -w /System/Library/LaunchDaemons/com.apple.UIKit.pasteboardd.plist");
dirEnum = [fileManager enumeratorAtPath:@"/var/mobile/Library/Caches/com.apple.UIKit.pboard/"];
while ((file = [dirEnum nextObject]))
[fileManager removeItemAtPath:[NSString stringWithFormat:@"/var/mobile/Library/Caches/com.apple.UIKit.pboard/%@", file] error:nil];
system("launchctl load -w /System/Library/LaunchDaemons/com.apple.UIKit.pasteboardd.plist");
// Delete entries in keychain-2.db
sqlite3 *database;
int openResult = sqlite3_open("/var/Keychains/keychain-2.db", &database);
if (openResult == SQLITE_OK)
{
int execResult = sqlite3_exec(database, "DELETE FROM genp WHERE agrp<>'apple'", NULL, NULL, NULL);
if (execResult != SQLITE_OK) NSLog(@"iOSRE: Failed to exec DELETE FROM genp WHERE agrp<>'apple', error %d", execResult);
execResult = sqlite3_exec(database, "DELETE FROM cert WHERE agrp<>'lockdown-identities'", NULL, NULL, NULL);
if (execResult != SQLITE_OK) NSLog(@"iOSRE: Failed to exec DELETE FROM cert WHERE agrp<>'lockdown-identities', error %d", execResult);
execResult = sqlite3_exec(database, "DELETE FROM keys WHERE agrp<>'lockdown-identities'", NULL, NULL, NULL);
if (execResult != SQLITE_OK) NSLog(@"iOSRE: Failed to exec DELETE FROM keys WHERE agrp<>'lockdown-identities'', error %d", execResult);
execResult = sqlite3_exec(database, "DELETE FROM inet", NULL, NULL, NULL);
if (execResult != SQLITE_OK) NSLog(@"iOSRE: Failed to exec DELETE FROM inet, error %d", execResult);
execResult = sqlite3_exec(database, "DELETE FROM sqlite_sequence", NULL, NULL, NULL);
if (execResult != SQLITE_OK) NSLog(@"iOSRE: Failed to exec DELETE FROM sqlite_sequence, error %d", execResult);
sqlite3_close(database);
}
else NSLog(@"iOSRE: Failed to open /var/Keychains/keychain-2.db, error %d", openResult);
}
複製程式碼