Obter fileSize de info.plist para evitar a pirataria
-
05-09-2019 - |
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]);
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?