Получить размер файла info.plist для предотвращения пиратства

Я пытаюсь вставить антипиратский код в свое приложение. Предыдущий ответ на этот вопрос (который я не могу связать из-за моего статуса участника - отстой) можно легко отменить, поскольку строку «SignerIdentity» можно искать и заменять в двоичном файле с помощью шестнадцатеричного редактора.

Вместо этого проверка fileSize файла info.plist и сравнение его с эталонным значением звучит более убедительно (так как info.plist изменяется тут и там при взломе приложения). Как бы я это сделал? Я попробовал следующее, но он регистрирует 0.

NSBundle *bundle = [NSBundle mainBundle];
NSDictionary *mainDictionary = [bundle infoDictionary];
NSLog(@"%d", [mainDictionary fileSize]);

Ответы на вопрос(4)

Строка Info.plist легко найти. NSFileSize тоже очень подозрительно ....

Определение, сломан ли iPhone джейлом Программно похоже, что некоторые из последних взломанных приложений, установленных через install0us, не имеют измененного info.plist. (по крайней мере, info.plist не содержит ключа подписи). Как мы можем обнаружить трещину в таком случае?

 yonel12 янв. 2010 г., 10:47
Нет, но могу ли я сделать какие-либо предположения о размере info.plist после загрузки из магазина приложений пользователем iPhone? Будет ли это так же, как когда я загружаю его в магазин приложений (через iTunes Connect)? Тот факт, что этот файл иногда находится в формате xml, иногда в виде двоичного файла, не дает мне четкой картины всего потока этого файла:
 samvermette18 янв. 2010 г., 22:48
Размер файла будет таким же, как в вашем .app-пакете дистрибутива. Я не уверен, что Apple изменяет что-то в файле info.plist после отправки вашего приложения ...
 samvermette12 янв. 2010 г., 07:48
Вы пытались сравнить 2 размера файла info.plist?

но не могли бы вы просто взять хеш этого файла и сравнить его со ссылкой, возможно, солитировать значение хеша, чтобы предотвратить просто изменение ссылочного хеша на новый?

Решение Вопроса

в вашем коде, применив ROT13 или аналогичный простой алгоритм затемнения.http://en.wikipedia.org/wiki/ROT13

После применения ROT13 «SignerIdentity» станет «FvtareVqragvgl».

В любом случае, ответ на ваш вопрос (как узнать размер файла Info.plist):

NSBundle *bundle = [NSBundle mainBundle];
NSString* bundlePath = [bundle bundlePath];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString* path = [NSString stringWithFormat:@"%@/Info.plist", bundlePath ];

NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path 
                                                             error:NULL];

if (fileAttributes != nil) {
    NSNumber *fileSize;

    if (fileSize = [fileAttributes objectForKey:NSFileSize]) {
        NSLog(@"File size: %qi\n", [fileSize unsignedLongLongValue]);
    }           
}

Также имейте в виду, что размер (в байтах)Info.plist в вашем каталоге проекта Xcode иInfo.plist Внутри расслоения могут отличаться. Возможно, вы захотите собрать игру один раз, а затем посмотрите на размер<your app bundle.app>/Info.plist а затем обновите свой антипиратский код.

 samvermette24 мая 2009 г., 19:38
Дело в том, что пират может изменить эту строку "FvtareVqragvgl" на что-то другое, и это проверит другой ключ в info.plist ... который, вероятно, будет нулевым. Атрибут filesize сравнивается с int, поэтому на самом деле нет простого способа найти его в двоичном файле.
 samvermette26 мая 2009 г., 07:24
Спасибо за ответ!
 meronix26 февр. 2011 г., 18:10
обновление: сейчас // NSDictionary * fileAttributes = [fileManager fileAttributesAtPath: pathP traverseLink: YES]; устарело ... использовать: -> ... NSDictionary * fileAttributes = [fileManager attributeOfItemAtPath: pathP error: NULL]; ... вместо

Ваш ответ на вопрос