Pergunta

Eu estou tentando colocar o código anti-pirataria em meu aplicativo. A resposta anterior a este (o que eu não pode conectar-se a causa de meu status de membro - é uma porcaria) pode ser facilmente combatida, já que a string "SignerIdentity" pode ser procurado e substituído no binário usando um editor hexadecimal.

Em vez disso, verificar o tamanho do arquivo do arquivo info.plist e comparando-a com um valor de referência sons mais sólidas (desde o info.plist está sendo modificado aqui e ali, quando quebra o app). Como eu faria isso? Eu tentei o seguinte mas ele registra 0.

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

Solução

Você pode impedir que os biscoitos noobish de encontrar referências a "SignerIdentity" em seu código, aplicando ROT13 ou um algoritmo simples obscurecendo semelhante http://en.wikipedia.org/wiki/ROT13

Depois de aplicar ROT13, "SignerIdentity" se tornaria "FvtareVqragvgl".

De qualquer forma, a resposta à sua pergunta (como você obter o tamanho do arquivo 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]);
    }           
}

Além disso, mantenha em mente que o tamanho (em bytes) do Info.plist no diretório do projeto Xcode eo Info.plist dentro do pacote podem ser diferentes. Você provavelmente vai querer construir o jogo uma vez, em seguida olhar para o tamanho da <your app bundle.app>/Info.plist e, em seguida, atualizar seu código antipirataria.

Outras dicas

Eu nunca programado para o iPhone, mas você não pode apenas tomar um hash do arquivo e compará-lo com uma referência, possivelmente, salga o valor de hash para evitar que alguém mudando apenas o hash de referência para o novo?

que o código tem ainda muitos brindes:

a corda Info.plist é fácil de encontrar. NSFileSize também é muito suspeito ....

Como disse aqui Determinar se um iPhone é Jail quebrada programaticamente parece que alguns dos mais recentes aplicativos rachados instalados via install0us não têm o seu info.plist modificado. (Pelo menos o info.plist não contêm qualquer tecla signeridentity). Como poderíamos detectar a rachadura em tal caso?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top