Eu tenho pensado a mesma coisa por um longo tempo, mas eu não fui capaz de elaborar mais sobre isso, porque eu não tenho todo o conhecimento necessário, mas isso é apenas uma idéia :
- Gerar pares de chaves aleatórias. Gere um hash da versão atual do seu binário. Armazene-os em um banco de dados local.
- Agrupe uma chave pública com o download, por exemplo enviá-lo via e-mail para o cliente.
- O cliente abre o aplicativo e é recebido por uma janela de verificação. O processo de verificação pede a chave public e gera um hash do binário.
- O cliente envia a chave pública e o hash do binário para seus servidores e você verifica a chave segredo e hash para essa versão binária no banco de dados.
- A resposta é criptografada usando a chave pública por meio de um algoritmo segredo , portanto, qualquer possível golpista não conseguiria interceptar a conexão e fazer com que seu aplicativo pensasse que ela foi corretamente verificado.
- Você pode armazenar a chave pública e a resposta codificada em um arquivo segredo para que você não tenha que repetir o processo validação toda vez . Você acabou de descriptografar a resposta usando o algoritmo segredo e a chave pública para saber se ela foi devidamente validada.
As desvantagens dessa abordagem:
- O cliente deve ter uma conexão com a internet, pelo menos uma vez.
- O programa do cliente não pôde ser verificado duas vezes (por exemplo, em computadores diferentes), mesmo que seja um cliente legítimo.
- Embora o armazenamento do arquivo e da resposta seja criptografado, isso não impedirá que nenhum invasor saiba sua localização e agrupe o par de validação com qualquer binário roubado para ignorar sua segurança.
- O processo de hashing do binário pode demorar um pouco se o binário for relativamente grande.
Isso não impedirá que qualquer scammer faça o download do seu aplicativo e o distribua novamente, mas pelo menos eles não poderão injetar nenhum malware
nele, por causa do > hash -heck ... eles vão? na verdade eles poderiam; o processo de validação pode ser quebrado se o scammer conseguir modificar seu binário e adicionar instruções apropriadas para contornar a segurança do processo de validação. Algo como…
Alterando isso
if (validate(response) == true) {
/* The app is validated */
}
Para isso:
if (!validate(response) == true || true) {
/*
* The app would be validated no matter
* if it was properly validated or not
*/
}
Assim, seu último recurso seria tornar as instruções do processo de validação obscuras o suficiente para não serem facilmente adivinhadas e modificadas e esperar que o scammer não seja inteligente o suficiente para encontrá-los e modificá-los.