Получите fileSize из info.plist, чтобы предотвратить пиратство

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

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

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

person samvermette    schedule 24.05.2009    source источник


Ответы (4)


Вы можете помешать взломщикам-новичкам найти ссылки на SignerIdentity в вашем коде, применив 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 и затем обновите свой антипиратский код.

person Julio Gorgé    schedule 24.05.2009
comment
Дело в том, что пират может изменить эту строку FvtareVqragvgl на что-то другое, и это проверит другой ключ в info.plist ... который, вероятно, будет нулевым. Атрибут размера файла сравнивается с int, поэтому найти его в двоичном файле действительно непросто. - person samvermette; 24.05.2009
comment
update: now // NSDictionary * fileAttributes = [fileManager fileAttributesAtPath: pathP traverseLink: YES]; устарело ... используйте: - ›... NSDictionary * fileAttributes = [fileManager attributesOfItemAtPath: ошибка pathP: NULL]; ... вместо - person meronix; 26.02.2011

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

person Alex S    schedule 24.05.2009

у этого кода есть еще много подарков:

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

person Yllier    schedule 19.09.2009

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

person yonel    schedule 11.01.2010
comment
вы пробовали сравнить 2 размера файлов info.plist? - person samvermette; 12.01.2010
comment
Нет, но могу ли я сделать какие-либо предположения о размере info.plist, загруженного из магазина приложений пользователем iPhone? Будет ли он таким же, как при загрузке в appStore (через iTunes Connect)? Тот факт, что этот файл иногда находится в формате xml, а иногда в виде двоичного файла, не дает мне четкого представления обо всем потоке этого файла: / - person yonel; 12.01.2010
comment
Размер файла будет таким же, как в вашем .app-пакете сборки вашего дистрибутива. Я не уверен, что Apple изменит что-то в файле info.plist после того, как вы отправите свое приложение ... - person samvermette; 19.01.2010