| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/08/2007 19:08:24
|
tmoretto
Debugger
![[Avatar]](/images/avatar/7296d81c3d5e425bc1785994bea8a0d2.jpg)
Membro desde: 08/05/2006 19:04:52
Mensagens: 56
Localização: Big Field
Offline
|
Olá colegas,
Tenho uma aplicação que precisa ter alguns recursos de segurança extras. É o seguinte, a aplicação não pode ser replicada, ou seja, de alguma forma preciso dificultar a replicação do software, que deve funcionar após uma ativação.
Esta aplicação, no caso é para celulares, utilizando J2ME, porém, estou colocando neste fórum pois não se trata de algo muito ligado ao J2ME.
O caso é o seguinte, o usuário no caso instala o software no aparelho, e digita um serial único para ativar o binário junto ao um servidor de ativação. A grande questão, que esta abordagem ainda gera umas dúvidas em relação à segurança. A idéia geral é que cada binário tenha um serial, gerado e colocado direto no seu código fonte. A pergunta, nesta abordagem é a seguinte, existe a possibilidade, e qual a dificuldade dela, de algum usuário mal intencionado que conheça bem java consiga pegar o software, extrair o serial, instalar em outro aparelho e ativá-lo? Ou seja, crackear mesmo.
Eu, se fosse mal intencionado, utilizada um Java Decompiler. (Mesmo o programa ter sido "obfuscado" pelo Proguard, daria para retirar a string do serial, certo?).
Alguem, vendo este caso, acha que apesar desta abordagem ser insegura, é viável? Alguem tem outras alternativas? Colocar um humano no processo de ativação poderia ajudar a tentar detectar fraudes?
No meu cenário, eu tenho um servidor que será o servidor de ativação para ajudar, só será ativado perante uma consulta. E no caso do J2ME, não posso pegar nem o IMEI, nem o ID do SIMCard para diferenciar aparelhos, imagine um cenário com o mínimo de informação possível.
O meu problema é que NÃO pode ter replicações. Não se trata de um Jogo ou coisa qualquer que algumas replicações causem apenas um pequeno prejuízo.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/08/2007 19:22:14
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
1 - Distribua binários únicos apenas aos usuários que ligarem para se cadastrar, contendo algum tipo de identificação.
2 - Com isto, todos os usuários que utilizarem o sistema serão identificados
3 - Mantenha no servidor algum algoritmo de bloqueio, pois se algum usuário conectar 2x será bloqueado.
4 - Mantenha algum bloqueio a nível de aplicação, a aplicação deve verificar se o software já foi registrado no servidor antes de ser utilizada inicialmente.
Qualquer outra forma de segurança vai ser quebrada facilmente.
[]'s
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/08/2007 20:10:21
|
tmoretto
Debugger
![[Avatar]](/images/avatar/7296d81c3d5e425bc1785994bea8a0d2.jpg)
Membro desde: 08/05/2006 19:04:52
Mensagens: 56
Localização: Big Field
Offline
|
aleck wrote:1 - Distribua binários únicos apenas aos usuários que ligarem para se cadastrar, contendo algum tipo de identificação.
É exatamente o caso que tentei explicar, os usuários serão identificados, o problema é alguém replicar e utilizar o sistema como se fosse este mesmo usuário em benefício próprio, prejudicando o usuário real, dando um prejuízo financeiro ao usuário real (meu problema causa isto...).
aleck wrote:
2 - Com isto, todos os usuários que utilizarem o sistema serão identificados
Sim, serão identificados, mas cai no mesmo problema. Sabemos que serão identificados, mas isso não quer dizer que é a mesma pessoa.
aleck wrote:
3 - Mantenha no servidor algum algoritmo de bloqueio, pois se algum usuário conectar 2x será bloqueado.
É sim, isso é verdade, só pode ser ativado uma vez. O problema é o cara replicar o software já ativado, ou seja, o software não conseguir identificar se esta sendo executado pela primeira vez, já que o "cracker" pode replicar a base de dados junto. Com o J2ME não tenho um "registro" que fica no sistema operacional ou algo mais que me ajude. Imagine um cenário bem desfavorável.
Copiar o RMS do aparelho para outro é algo muito dificil, porém possível. O cracker terá que conhecer muito bem o sistema de arquivos de ambos aparelhos e como tudo funciona. É algo muito dificil, mas não improvável.
Se fosse improvável, eu não teria problemas, nem teria utilizado este fórum para levantar questões de segurança. =)
aleck wrote:
4 - Mantenha algum bloqueio a nível de aplicação, a aplicação deve verificar se o software já foi registrado no servidor antes de ser utilizada inicialmente.
aleck wrote:
Mesmo problema que citei anteriormente.
Qualquer outra forma de segurança vai ser quebrada facilmente.
[]'s
aleck, Muito obrigado, você levantou questões muitos importantes, vai me ajudar a pensar em vários recursos de segurança. Estou testando a possibilidade de utilizar criptografia simétrica em algum lugar. Isto já será utilizado na comunicação entre o servidor e o cliente.
A utilização do software é o seguinte, não expliquei no inicio no post, uma vez ativado, o usuário utilizará o programa em que as ações serão feitas conectadas em um servidor, ocorrendo uma troca de dados. Ou seja, nao é um jogo que você ativa e utiliza off-line. O sistema é todo online.
O binário será assinado digitalmente, mas isto não resolve meu problema.
Tem, o J2ME, pacotes opcionais que me ajudariam muito, mas neste caso, o software só pode utilizar as bibliotecas 'standard', MIDP e CLDC, nada mais.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 20/08/2007 21:09:42
|
aleck
GUJ Ranger
![[Avatar]](/images/avatar/2051bd70fc110a2208bdbd4a743e7f79.jpg)
Membro desde: 27/03/2006 08:08:33
Mensagens: 843
Localização: Rio de Janeiro
Offline
|
A possibilidade de criptografia é algo que pode realmente dificultar, porém não impede alguém realmente interessado em quebrar o sistema.
Recomendo que o usuário seja informado de cada transação que ele mesmo fizer via SMS, instruindo o mesmo a entrar em contato caso ele não tenha feito.
Com isto vocês tem como cancelar a operação ou algo do gênero sem causar prejuizo ao usuário.
Uma coisa que aprendi é que não podemos confiar apenas nos sistemas para garantir a segurança, os processos devem andar em paralelo.
[]'s
|
Desenvolvedor iOS/Android
http://blog.alexandresoli.com.br
@alexandresoli |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/09/2010 20:59:35
|
RaulCrash
Entusiasta Java
![[Avatar]](/images/avatar/79b5c11b012dcb7cce5793afab9d29ce.jpg)
Membro desde: 13/04/2010 08:57:59
Mensagens: 24
Localização: Rondonópolis - MT
Offline
|
Olá amigos .. sou novo nisso e gostaria de saber se a a assinatura digital dos jar's com uma quantidade de dias ajuda a proteger minha aplicação após o limite de uso dias .. e se funciona certin .. tipo .. o cara pode atrazar a data do pc e não vai adianta nada quando o certificado expirar .. falo isso pois ja ouvi essa possibilidade ..
|
|
|
 |
|
|
|
|