Как обнаружить взломанное приложение iPhone и взломанное устройство (разные методы) - PullRequest
12 голосов
/ 18 января 2011

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

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

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

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

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

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

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

и

  • Есть ли способ обнаружить джейлбрейк?

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

Ответы [ 2 ]

18 голосов
/ 19 января 2011

НИКОГДА не пытайтесь заблокировать взломанные устройства от использования вашего приложения, только взломанные.Если вы блокируете взломанные устройства, они будут вынуждены использовать исправленную версию со всеми удаленными проверками.
Также ВСЕ мои устройства взломаны, поэтому, если разработчик блокирует взломанные устройства, мне придется игнорировать их приложения.Более 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"]);
}
7 голосов
/ 15 сентября 2011
-(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

...