 VB6 
-  Protegendo o seu programa
contra a pirataria.
VB6 
-  Protegendo o seu programa
contra a pirataria.
No artigo - Protegendo o seu Aplicativo contra Pirataria - eu tratei do assunto e usei a OCX - nslock15vb5.ocx - para implementar a proteção no seu programa Visual Basic.
No final do artigo eu prometia que iria voltar ao assunto , disse o seguinte : "A seguir veremos como gerar via código um rotina no VB para proteger seu sistema" .
Pois bem estou cumprindo a promessa e meu artigo vai mostrar como proteger seu programa VB usando código VB.
O código que eu vou mostrar
aqui é muito simples e tem como objetivo proteger o seu programa
de usuários curiosos e mal intencionados , mas , atenção ,
isto não quer dizer que seu programa será inviolável ; se
empresas como a Microsoft , IBM , Oracle , gastando milhões de
dólares , não conseguem evitar a pirataria (aposto que na
sua cidade tem um camelô ou alguém que vende programas
copyrights como Windows XP , VisualAge , Oracle 9i, a valores
irrisórios.) não será este código que vai tornar o seu
programa 'incopiável'  .
.
A ideia
Como posso proteger meu programa VB ?
Que tal esta ideia : 
Parâmetros na linha de comando
Como os parâmetros na linha de comando são passados para o Visual Basic ?
| Simples
        , basta digitar o nome do aplicativo VB executavel
        seguido pelo parâmetro que deseja informar. Ex: |  | 
| Ou
        informar no seu projeto um parâmetro na caixa de
        diálogo - Proteção - Project Properties em : Command Line Arguments Toda vez que você executar o seu aplicativo EXE o parâmetro será passado para seu programa VB. Obs: Usamos esta forma somente para testar a aplicação com o parâmetro informado. |  | 
E como os parâmetros passados na linha de comando são reconhecidos pelo programa VB que esta sendo executado ?
Os argumentos da linha de comando quando passados para um arquivo executável Visual Basic são armazenados em um variável especial de Sistema e podem ser capturadas e retornadas para o programa através da função : Command.
Então para verificarmos se algum argumento foi passado na linha de comando podemos usar uma instrução if no código verificando o valor da função Command : If Command = "" Then.
Se nenhum parâmetro for passado o valor retornado será uma string vazia ("").
Como gerar um identificador único do usuário ? ( Globally Unique Identifier )
Eu já abordei este assunto no artigo : GUID - Gerando um identificador Único , portanto vou mostra apenas o código usado :
1- Código das API´s declaradas no formulário.
| Private Declare Function CoCreateGuid Lib "OLE32.DLL" (pGUID As GUID) As Long Private Declare Function StringFromGUID2 Lib "OLE32.DLL" (pGUID As GUID, _ ByVal PointerToString As Long, ByVal MaxLength As Long) As Long Private Type GUID Guid1 As Long Guid2 As Long Guid3 As Long Guid4(0 To 7) As Byte End Type | 
2- O código da função CreateGUID que irá gerar o código identificador.
| Public Function CreateGUID() As String Dim udtGUID As GUID Dim sGUID As String Dim lResult As Long lResult = CoCreateGuid(udtGUID) If lResult Then sGUID = "" Else sGUID = String$(38, 0) StringFromGUID2 udtGUID, StrPtr(sGUID), 39 End If CreateGUID = sGUID End Function | 
3- Para gerar o código invocamos a função assim : CreateGUID
Usando a rotina eu gerei o código : 4BE96C57-F3BF-11D6-A57D-B2A419659821 usado no exemplo.
Como gravar e recuperar informações do registro do Windows ?
Os conceitos relacionados ao registro do windows estão no artigo : Acessando o registro do Windows
O Visual Basic fornece um localização padrão no registro para armazenar informações sobre as aplicações criadas com o Visual Basic :
HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section\key
Implementando a segurança na sua aplicação VB
Vamos agora juntar todas as peças e partir para o nosso objetivo : implementar a segurança na aplicação VB.
No programa VB para o qual você deseja implantar a segurança faça o seguinte : (eu vou estar usando um projeto com o nome de Proteção.vbp)
- Insira um módulo no seu projeto : Menu Project | Add Module
- No módulo inserido seção General Declarations insira o código abaixo:
| Option Explicit Const GUI = "4BE96C57-F3BF-11D6-A57D-B2A419659821" | 
a constante GUI refere-se ao código identificador único para o usuário que você deve gerar previamente.
- Crie uma sub rotina Main() e insira o código conforme abaixo:
| Sub Main() If Command = "Ativar" Then                                              
     AtivaAplicativo (GUI)
Else
     DesativarEm "10/11/02"   
End IffrmProtecao.Show End Sub | 
| - Usamos a função Command
        para verificar se algum argumento foi passado na linha de
        comando - Se o comando informado for a String "Ativar" chamamos a função AtivaAplicativo(GUI) - Se nenhum parâmetro for informado a função DesativarEm é invocada irá desativar a aplicação para a data indicada. | 
- A rotina DesativarEm recebe a data na qual será desativada o sistema e verifica se a data atual é superior ou igual a data indicada.
| Public Sub DesativarEm(Data As Date)
'Desativa o programa na data informada
Dim chave As String
'Gera a chave com base no codigo identificador do usuario
chave = Left(GUI, 8)
'Se a chave for invalida encerra a aplicação
If GetSetting("Aplicativo", "Security", chave, GUI) <> GUI Then
     MsgBox "Não é possivel executar a aplicação entre em contado com o suporte técnico", vbCritical, _ 
     "Erro de Validação de chave : A-1"
     End
End If
'Se a data expirar, desativa o aplicativo
If Date >= Data Then
   'grava um valor invalido na chave do registro
   SaveSetting "Aplicativo", "Security", chave, "A-1"
   MsgBox "O periodo de demonstração terminou ! " & vbCrLf & _ 
   " Para adquirir o sistema entre em contato com seu revendedor", vbCritical, "Erro Interno"
   End
End If
End Sub | 
- Finalmente a rotina AtivaAplicativo que recebe como argumento o valor do código do usuário - GUI - gerado anteriormente.
| Public Sub AtivaAplicativo(codigo As String) Dim chave As String chave = Left(codigo, 8) If Command = "Libera" Then SaveSetting "Aplicativo", "Security", chave, codigo End If End Sub | 
As informações são gravadas/recuperados do registro do Windows usando as funções SaveSetting e GetSetting.
Como funciona ?
Suponha que você distribuiu o seu aplicativo para um usuário testar , e, que definiu que o travamento da aplicação deverá ocorrer no dia 10/11/02.
O usuário irá executar normalmente (fig 1) seu programa até a data informada , neste dia ,ao ser executado ,a rotina DesativarEm será invocada e irá gravar uma chave inválida no registro do Windows. A partir dai a aplicação não poderá ser mais executada (fig 2), mesmo que a data seja alterada ou que o programa seja instalado em outra máquina.
|  |  | 
| fig 1 | fig 2 | 
Gostou ??? Simples mas funcional
... até o próximo artigo... 
 
| Veja os 
    Destaques e novidades do SUPER DVD Visual Basic 
(sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? 
 Quer aprender C# ?? 
 Quer aprender os conceitos da Programação Orientada a objetos ? 
 | 
             Gostou ?
  Compartilhe no Facebook
Compartilhe no Facebook
  
 Compartilhe no Twitter
 
Compartilhe no Twitter
 
Referências: