Как обнаружить взломанное приложение iPhone и взломанное устройство (разные методы)

Я создаю черный список для взломанных приложений для iPhone, и мне любопытно, пропустил ли я метод обнаружения взломанных приложений.

На данный момент для сервиса доступны следующие методы обнаружения трещин в приложении:

  1. проверка размера списка
  2. проверка личности подписавшего
  3. проверять, зашифрован ли двоичный файл (не уверен, что он работает правильно, так как взломанное приложение не было обнаружено таким образом)
  4. проверка измененной даты в info.plist по сравнению с измененной датой пакета (не уверен, что это работает - используйте код, например: http://snippie.net/snip/f7530ff2 чтобы сделать это)

Мне также интересно, можно ли проверить, не взломано ли устройство? Это также поможет, потому что служба будет работать как черный список спама, а джейлбрейк может быть использован для увеличения оценки.

Я также включил honeypot, который показывает мне, что инструменты, используемые взломщиками, исключают некоторые проверки, которые я делаю. Например, проверка plist для размера или личности подписавшего.

Мой вопрос сейчас:

  • Есть ли еще "хорошие" проверки, которые я должен использовать?

а также

  • Есть ли способ обнаружить побег из тюрьмы?

Спасибо за любую помощь!

2 ответа

НИКОГДА не пытайтесь заблокировать взломанные устройства от использования вашего приложения, только взломанные. Если вы заблокируете взломанные устройства, они будут вынуждены использовать исправленную версию со всеми удаленными проверками.
Также ВСЕ мои устройства взломаны, поэтому, если разработчик блокирует взломанные устройства, мне придется игнорировать их приложения. Более 10% всех iDevices взломаны, так что это очень плохая идея.

РЕДАКТИРОВАТЬ: Поскольку я получаю много голосов за это, я опубликую некоторые методы, чтобы обнаружить побег из тюрьмы.

- (BOOL)fileExistsAtPath:(NSString *)path{
    NSLog(@"Check if file '%@' exists", path);

    struct stat buffer;   
    return stat([path UTF8String], &buffer) == 0;
}

- (BOOL)jailbroken{
    return ([self fileExistsAtPath:@"/Applications/Cydia.app"]);
}
-(IBAction)rootCheck:(id)sender {

    NSArray *jailbrokenPath = [NSArray arrayWithObjects:
                               @"/Applications/Cydia.app",
                               @"/Applications/RockApp.app",
                               @"/Applications/Icy.app",
                               @"/usr/sbin/sshd",
                               @"/usr/bin/sshd",
                               @"/usr/libexec/sftp-server",
                               @"/Applications/WinterBoard.app",
                               @"/Applications/SBSettings.app",
                               @"/Applications/MxTube.app",
                               @"/Applications/IntelliScreen.app",
                               @"/Library/MobileSubstrate/DynamicLibraries/Veency.plist",
                               @"/Applications/FakeCarrier.app",
                               @"/Library/MobileSubstrate/DynamicLibraries/LiveClock.plist",
                               @"/private/var/lib/apt",
                               @"/Applications/blackra1n.app",
                               @"/private/var/stash",
                               @"/private/var/mobile/Library/SBSettings/Themes",
                               @"/System/Library/LaunchDaemons/com.ikey.bbot.plist",
                               @"/System/Library/LaunchDaemons/com.saurik.Cydia.Startup.plist",
                               @"/private/var/tmp/cydia.log",
                               @"/private/var/lib/cydia", nil];

    NSString *rooted;
    for(NSString *string in jailbrokenPath)
        if ([[NSFileManager defaultManager] fileExistsAtPath:string])
            rooted=@"y";
        else
            rooted=@"n";

    NSLog(@"%@", rooted);
}

пример кода: http://www.evernote.com/shard/s13/sh/e45f27ee-3dd5-4eb1-9f56-1981cdd3286b/bc156eb773315647c13c2c7ee4191866

Другие вопросы по тегам