PROTE?ÃO DE SOFTWARE
Venho compartilhar com meus colegas, uma linha de raciosinio que tenho e que quero saber se ja existe algo do tipo, e se realmente é possivel fazer
bom é o seguinte, eu tenho um sistema que é distribuido em CDs, porém estive queimando os miolos pensando numa forma de evitar que redistribuam o CD fornecido por mim
pois bem, o que pensei foi o seguinte:
cada vez que gravo o cd com os arquivos é gerado um serial para este CD (gerado altomaticamente na propria gravação, sem minha intervenção)
o que eu pensei em fazer foi usar este numero de serie e com algum algoritimo e geral a chave que seria valida somente para este CD, ao fazer uma cópia do CD, a mesma chave não seria mais valida...
alguem sabe me dizer se dá certo, ou se existe forma simples de driblar esta solução?
Se tiverem outra sugestão tbm será muto bem vinda...
Toda vez que o cara fosse instalar, ele precisaria de uma liberação pra isso. Você assinalaria [Ô]OK[Ô] no teu banco de dados e quando ele tentasse novamente liberaria.
O que acha?
Att,
Citação::
Cara, a única solução que vejo, que te dê uma uma segurança maior é validar via internet.
Toda vez que o cara fosse instalar, ele precisaria de uma liberação pra isso. Você assinalaria [Ô]OK[Ô] no teu banco de dados e quando ele tentasse novamente liberaria.
O que acha?
Att,
sim amigo é uma ideia a se pensar...
Citação::
O problema de se basear no serial do CD é que sua aplicação só passaria a funcionar se o cliente colocasse o CD do sistema no driver. Ficar dependendo do driver pra fazer o sistema funcionar é uma coisa muito chata e isso poderia fazer você perder muitos clientes.
Não amigo, a verificação seria somente na instalação, uma unica vez ao instalar... Pois a ideia não é limitar a quantidade de pcs que ele instale, pode instalar em quantos PCs quiser, desde que seja sempre com o mesmo CD...
Citação::
E o que impediria um malfeitor copiar os arquivos instalados para um outro CD? Se os arquivos que foram instalados no HD ficarem amarrados ao CD para evitar cópias após a instalação, o usuário não iria conseguir usar o software sem pôr o CD no leitor.
Sim claro, existe esse porém, mas alinho ao fato de ser muito trabalhoso fazer isso, por causa das DLLs e OCX e tal, uma vez que o sistema não é assim tão importante...
além do mais, posso dificultar colocando alguns arquivos acultos no CD, coisa que da pra driblar, mas gera mais trabalho...
de qualquer forma eu não tinha pensado nessa situação que vc disse, e ja me ajudou...
Porém teria de ser liberação via Mac (por usuário) ou servidor (para todos os usuários)..
No caso se você utiliza .NET tenho uma rotina bem simples para pegar o IP e o servidor..
Imports System.Net.Dns
Dim nome As String = Environment.MachineName
Dim user As String = Environment.UserName
Terminal.Caption = nome
Maquina.Caption = user.ToUpper
Private Sub GetIP
Try
Dim IPList As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)
Dim IP As IPAddress
For Each IP In IPList.AddressList
If (IP.AddressFamily = Sockets.AddressFamily.InterNetwork) Then
labelIP.text = IP.ToString
End If
Next
Return [Ô][Ô]
Catch ex As Exception
MessageBox.Show(ex.ToString)
Finally
End Try
End Sub
Tudo isso me retorna, Nome do usuário Logado, IP do servidor e o terminal.. No caso eu faço uma segunda conexão com um banco Web e checo se o IP do servidor é autorizado ou não para fazer o acesso, se é o mesmo que o banco autorizado ele executa o acesso...
Citação::
Bom o que tive pensando a tempos é o mesmo que falaram acima..
Porém teria de ser liberação via Mac (por usuário) ou servidor (para todos os usuários)..
No caso se você utiliza .NET tenho uma rotina bem simples para pegar o IP e o servidor..Imports System.Net.Dns
Dim nome As String = Environment.MachineName
Dim user As String = Environment.UserName
Terminal.Caption = nome
Maquina.Caption = user.ToUpper
Private Sub GetIP
Try
Dim IPList As System.Net.IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName)
Dim IP As IPAddress
For Each IP In IPList.AddressList
If (IP.AddressFamily = Sockets.AddressFamily.InterNetwork) Then
labelIP.text = IP.ToString
End If
Next
Return [Ô][Ô]
Catch ex As Exception
MessageBox.Show(ex.ToString)
Finally
End Try
End Sub
Tudo isso me retorna, Nome do usuário Logado, IP do servidor e o terminal.. No caso eu faço uma segunda conexão com um banco Web e checo se o IP do servidor é autorizado ou não para fazer o acesso, se é o mesmo que o banco autorizado ele executa o acesso...
Bacana mestre, gostei...
Mas me diz uma coisa, como vc faz com as constantes mudanças de IP de alguns clientes com IP dinamico?
Citação::
:
Bacana mestre, gostei...
Mas me diz uma coisa, como vc faz com as constantes mudanças de IP de alguns clientes com IP dinamico?
Cara na verdade eu pego pelo domÃnio, então por ele eu vou dando a liberação ou não haha.. nem pego por IP, gravo o IP para eu ter controle de quais maquinas estão acessando o sistema apenas..
O Jeito que o KURTGU falou também é bom.. mas por domÃnio da pra fazer também.. ou seja se algum .exe mesmo que for executado fora da empresa o domÃnio sendo diferente ele não roda..
Ai é bem simples e eficiente, vc cria outra tabela com os dominios permitidos, ai voce joga la o dominio, caso vencer ou o cara não pagar voce deleta o dominio.. é bom que dai eu tenho controle de qual terminal ta acessando o sistema, IP interno e o domÃnio..
Uma base de dados na Web tem suas vantagens, mas também apresenta o mesmo problema com relação á engenharia reversa, e nesse caso, com agravantes.
O que me parece mais convincente é mesmo manter um cadastro dos clientes com um campo GUID em um WebService e fazer com que a aplicação faça a autenticação do usuário/cliente apenas se conectar á Web.