Подтвердить что ты не робот

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

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

В тот момент, когда для службы доступны следующие методы обнаружения трещины:

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

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

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

Мой вопрос:

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

и

  • Есть ли способ обнаружить Jailbreak?

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

4b9b3361

Ответ 1

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

EDIT. Поскольку я получаю много голосов для этого, я отправлю некоторые методы для обнаружения джейлбрейка.

- (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"]);
}

Ответ 2

-(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])
            [email protected]"y";
        else
            [email protected]"n";

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

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