
!!!!!!!!Listing 1 ///Überschrift:SQL mit Prepared Statements

const char *sql = "SELECT username FROM users where uid = ?";
sqlite3_prepare_v2(db, sql, -1, &selectUid, NULL);
sqlite3_bind_int(selectUid, 1, uid);
int status = sqlite3_step(selectUid);





!!!!Listing 2/// Überschrift: Verschlüsselung aller
Daten im App-Verzeichnis <I>Documents<I>



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  NSError *error = nil;
  NSDictionary *fileAttributes = [NSDictionary
                                  dictionaryWithObject:NSFileProtectionComplete
                                  forKey:NSFileProtectionKey];
  if(![[NSFileManager defaultManager] setAttributes:fileAttributes ofItemAtPath:[[self applicationDocumentsDirectory] path] error: &error]) {
      NSLog(@"Unresolved error with store encryption %@, %@", error, [error userInfo]);
      abort();
  }
  return YES;
}
- (NSURL *)applicationDocumentsDirectory
{
  return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}



!!!!Listing 3 //// Überschrift: Ablage von Zugangsdaten in der Keychain




- (BOOL) saveAccountData: (NSData *)password forAccount:(NSString *)account {
  NSMutableDictionary *attrs = [self queryForAccount: account];
  [attrs setObject: password forKey: kSecValueData];
  [attrs setObject: kSecAttrAccessibleWhenUnlockedThisDeviceOnly forKey: kSecAttrAccessible];
  OSStatus status = SecItemAdd(attrs, NULL);
  return status == noErr;
}



!!!Listing 4 /// Überschrift: Eingabefilterung bei der Interprozesskommunikation


- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    // Filterung der aufrufenden Applikation anhand der Bundle-ID
    // Eingabevalidierung der übergegebenen Parameter / Daten
}



!!!Listing 5///Überschrift: Informationspreisgabe in Screenshots verhindern

- (void) applicationWillResignActive:(UIApplication *)application {
    _window.hidden = YES;
}
...
- (void)applicationDidBecomeActive:(UIApplication *)application
{
    _window.hidden = NO;
}



Listing 6////Überschrift: Löschen der Zwischenablage

- (void) applicationWillResignActive:(UIApplication *)application {
  UIPasteboard *pasteBoard = [UIPasteboard generalPasteboard];
  pasteBoard.items = nil;
}




Listing 7///Überschrieft: Beispielimplementierung einer
Jailbreak-Erkennung



- (BOOL) JailbreakCheck{
    NSError *error = nil;
    // Vorhandensein von Applikationen aus dem Jailbreak Umfeld
    NSArray *checkPath = [NSArray arrayWithObjects:
      @"/Applications/Cydia.app",
      @"/usr/sbin/sshd",
      @"/usr/bin/sshd",
      @"/private/var/lib/apt",
      @"/Applications/blackra1n.app",
    // Additional Checks 
    nil];
    for(NSString *string in checkPath)
        if ([[NSFileManager defaultManager] fileExistsAtPath:string]) {
            // Indiz für Jailbreak
        } else{
            // kein Indiz für Jailbreak
        }
    // Systempartition mit Schreibrechten eingebunden
    [fmngr release];
    NSString *fstab = [NSString stringWithContentsOfFile:@"/etc/fstab" encoding:NSISOLatin1StringEncoding error:&error];
    NSRange tmpString;
    NSString *substring = [NSString stringWithString:@" / hfs rw"];
    tmpString =[[fstab lowercaseString] rangeOfString:[substring lowercaseString]];
    if(tmpString.location != NSNotFound)
    {
        // Indiz für Jailbreak
    } else {
        // kein Indiz für Jailbreak
    }   
    // Anlegen von Dateien außerhalb der eigenen Sandbox
    // Achtung: Der nachfolgende Code kann zur Ablehnung der Applikation im 
    // AppStore Review-Prozess führen. 
    NSFileManager *fmngr = [[NSFileManager alloc] init];
    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"jailbreakcheck.txt" ofType:nil];
    if([fmngr copyItemAtPath:filePath toPath:[NSString stringWithString:@"/Applications/jailbreakcheck.txt"] error:&error]) 	{
        // Indiz für Jailbreak
    } else {
        // kein Indiz für Jailbreak
    }
}




Listing 8: /// Überschrift: Selbstzerstörung einer Applikation


 
- (void) deleteData:(NSString *)theFilePath{
    if ([fileMgr removeItemAtPath:theFilePath error:&error] != YES)
        NSLog(@"Fehler: %@", [error localizedDescription]);
}




