Então, já passamos por isso várias vezes agora, lançamos um jogo (barato) e alguém o corta e o coloca no espelho. Configuramos os Alertas do Google para todos os nossos aplicativos, para que seja informado diariamente sobre quem está fazendo o hacking. Até o momento, implementamos o serviço de licenciamento, como o Google sugeriu, nosso sal é feito aleatoriamente toda vez que a licença é iniciada com o ID do dispositivo exclusivo. Executamos o serviço de verificação uma vez, quando o aplicativo é iniciado pela primeira vez. Em seguida, geramos um hash de 512 caracteres para a chave e o valor armazenado que é comparado em SharedPreferences a partir daí.
Agora, eu sei que verificar uma vez é provavelmente onde o aplicativo está sendo bloqueado. Nosso bytecode provavelmente foi analisado e recompilado sem a linha que inicia a verificação.
A partir daqui, não quero ofuscar nosso código como já vi antes. Quero algo um pouco mais sólido e também quero aprender como fazer isso corretamente. Estou mais interessado em aprender do que em ganhar dinheiro neste momento, pois apenas 2% das pessoas jamais procurarão uma versão hackeada.
Até agora, por conta própria, criei um gerador de números aleatórios que é colocado em várias áreas de inicialização do jogo. Quando iniciada (digamos, 1 em 50 vezes), a licença é verificada. Eu sei que isso tornaria mais difícil invadir, porque o cracker teria que eliminar cada caso, compilar, eliminar, compilar. Esse método, no entanto, ainda é decifrado ... então o que vocês sugerem? Mais uma vez, estou realmente interessado nesse processo de segurança; portanto, educe, não transforme isso em uma discussão sobre ofuscação ou verificação periódica com base em um carimbo de data / hora.
obrigado
fonte
Respostas:
Minha idéia não é à prova de hackers, mas pode remover parte do interesse por invadir o jogo.
Modelo Freemium
1) Torne os primeiros 5 a 10 níveis gratuitos para que as pessoas possam aprender o jogo e se divertir sem pagar. Menos vai querer hackear o primeiro nível e o jogo se espalhará ainda mais pelo modelo Freemium.
Shareware / pacotes de nível em cluster
2) Deixe parte dos níveis ou lógica do jogo permanecer online. Por exemplo. ao atingir o nível 5 ou 10 ou 15, faça o download de pequenas partes do jogo e sempre envie o log de progresso do jogo e valide-o com os possíveis valores + códigos de hash. Talvez isso possibilite o encerramento automático de contas invadidas.
Proteção furtiva do trapaceiro
3) Você também pode contar "pequenas bandeiras de aviso" que você coloca no jogo. Não basta verificar a "validação" no início, não constrói essas bandeiras na própria lógica do jogo. Não faça isso quebrar a jogabilidade, porque ninguém o procurará. Então, quando o usuário chegar ao fim do monstro de nível, verifique se há algum sinalizador de aviso registrado. Eles não aparecerão dentro do jogo; portanto, o usuário desconhecido com uma edição hackeada pode estar jogando por horas / dias e, de repente, percebe que não pode terminar o jogo ou avançar para o próximo nível, porque o jogo possui um "bug". O que o usuário não sabia era que esse bug ocorre apenas em clientes invadidos.
Conclusão
Seja mais esperto que os biscoitos. Engane-os a pensar que o trabalho foi feito. Faça uma proteção contra cópia e saiba que os crackers mais avançados poderão removê-la. Mas eles provavelmente não querem jogar 50 níveis para verificar se o crack também funciona até o fim.
Quando eles perceberem esse problema, eles também poderão começar a resolvê-lo. Mas se você dividir o jogo em pacotes de nível, ainda poderá validar entre cada download de pacote. Portanto, depois de receber dados de hash do cliente invadidos, basta executar uma exceção e travar o jogo no cliente. Ops, o jogo travou. Não conte porque é hackeado. Pode ocorrer um erro no programa. :-)
Novamente, não é à prova de hackers. Mas isso pode incomodá-los o suficiente para passar para o próximo jogo. Por fim, você também pode lançar atualizações regulares para o jogo e apenas a versão mais recente deve poder "postar os registros" etc., para que os usuários ativos precisem atualizar para se manter atualizados.
fonte
Eu tenho feito alguns descompiladores e hackers por um tempo (não warez, mas mods e hacks principalmente para o google apps e a estrutura android, sempre respeitando as políticas xda-developers).
Depois que você aprende a ler smali, é quase como ler o código java original (mas com muito mais LOCs). Portanto, qualquer código adicionado para verificar as chaves pode ser encontrado, excluído ou substituído. Você nem precisa recompilar a cada vez para eliminar mais de um (algumas pesquisas fazem milagres para encontrar partes semelhantes de código) e, mesmo que sejam necessários ciclos de compilação / recompilação para encontrá-los, é apenas uma questão de um ou dois minutos descompilar: tudo é automatizado pelo apktool e ainda mais pelo apkmanager.
Dito isso, minha sugestão é que você implemente algum tipo de tabela de pontuação on-line ou similar e, quando o usuário olha para a tabela de pontuação on-line, você pode verificar o código de hash implementado e compará-lo com a conta do gmail associada. Dessa forma, você pode denunciar o hack ao google e enviar uma mensagem desagradável ao usuário do warez, explicando por que isso é ilegal.
Obviamente, um novo hack poderia ser implementado para eliminar a tabela de pontuação, mas isso reduziria o interesse pelo warez.
Boa sorte.
Atualizar
Depois de pesquisar para responder a essa pergunta: Injetando código no APK (realmente sobre o mecanismo Amazon DRM), posso contar um pouco sobre como a Amazon está protegendo os aplicativos: inclui métodos para verificar a validade da instalação em todos os lugares (você pode ver um exemplo de como eles fazem isso na minha resposta a essa pergunta). Isso fará com que qualquer tentativa de invadir um aplicativo não seja muito difícil, mas extremamente tediosa. Acredito que esse seja um ponto forte: os hackers não vão querer gastar tanto tempo realizando tantas tarefas repetitivas: não é desafiador e é chato. A principal falha que vejo nessa abordagem é a possibilidade de invadir o próprio aplicativo da Amazon para sempre retornar uma resposta válida, é claro. Mas, se você misturar suas verificações de hash atuais com algum tipo de verificação on-line dispersa entre seus métodos, acredito que as chances de ser hackeado podem ser drasticamente reduzidas.
fonte
Retirado da minha solução deste post Evite apk cracked
Implemente sua própria biblioteca de licenciamento
Também sugiro que você verifique isso na gravação do Google I / O 2011 no YouTube:
Fugindo de piratas e parando vampiros
EDITAR:
As notas de apresentação de Evasão de piratas e parada de vampiros
Alguns pontos-chave básicos
fonte
#%3ar.page.15
nos URLs. Se você não for redirecionado automaticamente para essa página, verifique o link para ver onde / em que página você deveria estar.Sei que você não está realmente ofuscado, mas realmente preciso reagir a isso:
O ProGuard é muito confiável em minha experiência, e isso embora eu use alguns recursos avançados, como AIDL e algum código nativo que chama método Java. É preciso um pouco de trabalho para ler a documentação e fazer as coisas corretamente, mas quando você estiver O ProGuard é extremamente confiável e também otimiza seu aplicativo.
Segurança personalizada / truques criptográficos são bons, mas sem ofuscação é como jogar uma pedra na água na minha humilde opinião.
Eu uso o ProGuard em produção há muitos meses, e ele funciona perfeitamente.
Se você estiver aprendendo, leia o manual do ProGuard com cuidado, experimente-o e inspecione seus logs de saída.
fonte
A chance de que haja programadores mais talentosos do que VOCÊ (aplica-se a todos os programadores) é de 100%. E se isso for verdade, você não pode consertar hackers. Mas você pode gastar tanto tempo e esforço para ir à falência.
Se você quer ganhar muito dinheiro, precisa fazer uma pesquisa no seu grupo de usuários-alvo e na ciência do comportamento. Você precisa criar usuários que tragam dinheiro novo, e é isso.
Além disso, você entendeu tudo errado. Os hackers são membros mais ativos da sua base de usuários, apenas se comportam de uma maneira que você não pretendia.
Pegue os jogos da Zynga no Facebook, por exemplo, você acha que foi hackeado? - Claro, e cerca de 100.000 jogadores só jogam, porque você pode usar bots, que automatizam tudo.
Ter uma enorme base de usuários ativa de pessoas reais faz com que os jogadores do tipo arquivador desejem jogar o jogo - e se você jogar, e parecer legal, o Avarage Joe também desejará jogar. Se o Avarage Joe jogar, seus amigos poderão querer jogar, e o seu provavelmente não se importará com nada, sendo melhor que o seu amigo, perdendo tempo ou tendo algo para conversar. Os amigos médios de Joe provavelmente estarão dispostos a pagar para serem melhores que Joe, mas você gostaria de investir em algo que os torne capazes de melhorar.
Além disso, se o valor real é jogar o jogo de graça, os usuários que usam a versão hackeada gratuita provavelmente nunca teriam pago por isso. Mas tu és o Avarage Joes e os amigos deles podem. Portanto, este é o comercial mais barato que você pode ter. Se você quiser ganhar dinheiro com sua grande base de usuários, faça novas versões do jogo com pequenas alterações nos níveis e gráficos.
fonte
A pirataria sempre será um problema. Por grandes crackers são melhores em jogar este jogo de segurança, embora obscuridade do que os desenvolvedores.
fonte
Que pergunta interessante e perturbadora. :-) Como exercício, você pode tentar lançar um aplicativo pela Amazon; eles têm seu próprio mecanismo de DRM; Gostaria de saber se funciona melhor do que o ProGuard ...
fonte
Um dos elementos-chave na minha opinião é espalhar o código para que não fique tudo em um só lugar. Se você tiver uma função chamada LicenseChecker.checkLicense () que recupera a licença e a verifica, pode ter certeza de que será desabilitada imediatamente.
A única vantagem que você tem é que os crackers não podem ver os comentários do seu código (e, se você ofuscar nomes de métodos / variáveis), então crie algo estranho. No onCreate () de uma atividade, você obtém o ID da licença. Em onResume (), você obtém outro valor para comparar. Talvez crie um thread e faça algumas verificações lá. E então, outro código irrelevante (talvez o controle do jogador) pode pegar o valor, compará-lo e armazenar o resultado em algum lugar. Em seguida, outros três trechos de código irrelevantes verificarão independentemente esse valor e desabilitarão seu aplicativo se ele não corresponder.
Agora, devo dizer antecipadamente que isso pode causar dor de cabeça para você - obviamente, código desorganizado e desagradável é mais difícil de depurar e propenso a causar erros. Na pior das hipóteses, você cria falsos positivos em aplicativos adquiridos legitimamente.
E, é claro, tudo pode ter engenharia reversa - uma vez que os crackers encontram o local em que o aplicativo está desativado, eles remontam ao valor que está sendo lido. Eles poderiam rastrear de volta onde está sendo armazenado e rastrear isso de volta ..... ou, muito mais fácil, eles podem simplesmente desativar a verificação final (é por isso que eu recomendei 3 lugares diferentes, todos com atraso). A segurança é tão boa quanto o elo mais fraco.
Você não será capaz de parar a pirataria. Sua melhor aposta é atrasar a propagação de uma cópia pirata até que o hype inicial sobre seu aplicativo se acalme.
fonte
Primeiro, eu NÃO me considero um profissional no campo da segurança de SW, mas:
Penso que uma coisa importante é permitir que a aplicação dependa em parte da verificação de assinatura. Não deixe afetar imediatamente, mas defina alguns sinalizadores ou altere alguns valores. mais tarde, use esses sinalizadores, verifique-os, deixe a ausência / incorreto deles causar uma exceção de algum tipo que talvez encerre o aplicativo. Desde que a verificação da assinatura seja relevante apenas no momento, é fácil ignorá-la, remover a linha, uma vez que ela toca mais áreas do código, seu aplicativo fica mais difícil (ou menos fácil ...) de hackear. Além disso, a meu ver, nem todas as verificações devem chamar a mesma rotina para a sanção, porque isso também facilitará a localização e o encerramento do mecanismo de proteção.
Obviamente, a sanção a ser tomada em casos de SW ilegal pode variar. Você pode travar o aplicativo quando usado ilegalmente, mas também pode mantê-lo em execução e enviar apenas uma mensagem solicitando que o usuário compre uma cópia legal do aplicativo.
Se é exatamente isso que você não queria ouvir, desculpe pelo seu tempo :)
fonte
Os usuários do Android apenas aceitarão a dor das constantes casas telefônicas. O único aplicativo Android seguro é um aplicativo Android sempre conectado.
Isso se deve, em grande parte, à recusa do Google em bloquear a instalação, como a Apple. No IOS, você precisa fazer o jailbreak do telefone. No Android, você pode carregar qualquer APK em um estoque, instalar de fábrica.
Mantenha parte / a maioria / todo o seu conteúdo no servidor; entregá-lo em pedaços; validar a licença / sessão em cada chamada.
fonte
Será incrivelmente difícil inibir esse tipo de comportamento. Tudo o que é tratado no lado do cliente pode ser hackeado usando a descompilação e modificação do APK, edição de memória com software como o Game Guardian ect.
A única maneira de ver como se locomover parcialmente seria fazer um jogo online. Ou tem certas funções manipuladas online. Ou se a criptografia anti-adulteração como o denuvo já estiver disponível para Android / iOS.
fonte