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 If frmProtecao.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 Twitter
Referências: