sábado, 26 de setembro de 2020
DVD
ConteÚdo
DOWNLOADS
Interação
dicas aleatórias
Dica #44
Função para remover acentos de strings
Publicado: 29/05/2005

Artigos

Protegendo seu aplicativo contra cópia e definindo tempo para execução com o controle ActiveLock

Aprenda a proteger seu aplicativo e de quebra veja como enviar e-mail a partir da sua aplicação e remover o registro da aplicação no Windows.

Por: Élcio Luiz Pauli (elpauli@hotmail.com)
Publicado: 04/07/2007  Visitas: 10420
Dificuldade: Avançado

Indicação de Artigo  Imprimir

Aprenda a proteger seu aplicativo e de quebra veja como enviar e-mail a partir da sua aplicação e remover o registro da aplicação no Windows.

O ActiveLock:
Este controle foi desenvolvido pelo nobre colega Nelson Ferraz a quem devemos nossos sinceros agradecimentos. Saibam que esse controle é usado por programadores do mundo inteiro. Você poderá encontrar o controle e outros exemplos em:

http://www.activelock.com/

1. Antes de tudo é necessário que você copie e registre o controle nslock15vb5.ocx:


Copiando...

C:\ %Systemroot%\system32\regsvr32.exe nslock15vb5.ocx

Ou

C:\ %Systemroot%\system\regsvr32.exe nslock15vb5.ocx


...o system32 ou system depende de sua versão do Windows.



Registrando no Windows...


2. Usando o Controle (passo a passo):

2.1. O formulário


Primeiro vamos criar o formulário que servirá de registro de sua APP (“APP” daqui para frente quer dizer “aplicação” (o seu sistema) no nosso informatês).

Vamos dar a ele o nome de F_REGISTRO:


O seu Access não tem a referência ao controle? Então, adicione a referência:
Na janela de códigos clique em Ferramentas/Referências:



Depois clique em procurar e selecione a OCX: nslock15vb5.ocx


Clique em “Abrir”.


Pronto: está aí o controle ActiveLock 1.5 (VB5 SP3) do Nelson Ferraz.


Voltando ao formulário:

2.2 O controle ActiveLock

Adicione a ele o controle nslock15vb5.ocx e atribua a ele o nome de ActiveLck.



Como adicionar o controle no formulário? Na caixa de ferramentas do MS-Access, clique no botão “Mais Controles” e clique em nslock15vb5.ActiveLock e finalmente clique no form. Pronto: o controle com a imagem de um cadeado está acoplado ao form.


Adicionem neste formulário três campos (caixas de texto) não acoplados:


2.3 Primeiro campo è S_CODE (software code)

Este campo irá conter o Código do Software. Ele será preenchido com o Código gerado de sua App, e atribuído à propriedade do ActiveX SoftwareCode e usamos da seguinte forma:


Me!S_CODE = Me!ActiveLck.SoftwareCode



2.4 Segundo Campo è KEY_LIB

Este campo receberá do usuário a chave de liberação do software que será gerada pelo KeyGenerator.



2.5 Terceiro Campo è strCidade

Neste campo eu tenho um uso particular, mas pode ser usado diferentemente para cada desenvolvedor, dependendo de sua necessidade. Eu uso para que o usuário informe sua cidade de origem visto que tenho softwares em diversas cidades.

Para que o controle possa funcionar adequadamente, são necessárias algumas outras informações (propriedades) que passaremos ao mesmo.

3. Criando as propriedades do ActiveLock:

3.1 ActiveLck.Password

Esta será a senha utilizada pelo controle para gerar a “contra-chave” de liberação. Não vamos atribuí-la diretamente na folha de propriedades do controle, mas sim, em tempo de execução, logo a folha de propriedade do mesmo poderá ficar da forma default. Para atribuir este valor, usamos o seguinte:


Me!ActiveLck.Password = "minhaSenha"


3.2 ActiveLck.SoftwareName

Precisamos definir também a propriedade SoftwareName o que fazemos desta forma:


ActiveLck.SoftwareName = "suachavedaapp" do tipo string. Você pode usar qualquer nome válido, inclusive o nome de sua app ou o que achar conveniente.



4. Gerenciando o ActiveLock

Bom, agora já temos o essencial ao funcionamento, e precisamos gerenciar o que desejamos do controle.

Você encontrará todas as formas possíveis de utilização do ActiveLock na documentação disponibilizada no download.

Para esse artigo, vamos supor que desejamos que nossa APP funcione durante um período específico de dias. Vamos informar esse período ao controle e caso o Cliente deseje registrar a APP, então forneceremos uma forma de liberar a APP. Essa situação é o caso típico de um “demo” para o Cliente testar a APP, e se ele aprovar a APP então você poderá fornecer a chave.


4.1 Definindo as variáveis (com código comentado):

Vamos dimensionar 3 variáveis que serão necessárias para que isso ocorra:



Dim iDias As Integer, iFalta As Integer, sK As String

iDias= Contará o Número de Dias que o software está sendo utilizado;

iFalta= A quantidade de dias que faltam para vencer o prazo definido para sua utilização;

Sk= que receberá o KeyCode gerado pelo assistente KeyGenerator (utilitário que gera a chave de liberação).



4.2 Definindo se a nossa APP foi registrada:

No evento Open do formulário verificamos qual a situação da nossa APP, executando:


Private Sub Form_Open(Cancel As Integer)

On Error GoTo Er_Acx


Na linha abaixo, verifico se o usuário está registrado. A propriedade RegisteredUser retorna se nossa APP já foi registrada. Como o controle possui as suas propriedades definidas em tempo de execução, você poderia afirmar que estou sendo incoerente em tentar saber se o controle vai responder se a propriedade é verdadeira ou não: é claro que será sempre falsa, mas tem um motivo óbvio que você pode ver na linha Er_Acx. Se o usuário tentar excluir o controle e você não gerenciar esta possibilidade, vai passar batido e pronto, lá se foi a sua segurança. Tente fazer isso, veja o que acontece e entenda por que é necessário!


If Me!ActiveLck.RegisteredUser Then

Cancel = -1

End If

Exit_Acx:

Exit Sub

Er_Acx:

'caso o atcx tenha sido excluido - erro

MsgBox "Houve problemas ao carregar o ActiveX deste Objeto!" & vbCrLf & vbCrLf & _

"O Mesmo pode ter sido excluído de seu Disco Rígido!" & _

vbCrLf & "Solicite suporte para solução deste Item.", vbCritical, "SuaApp"

DoCmd.Quit acQuitSaveNone



4.3 Passando os valores para as variáveis e tornando possível o funcionamento do ActiveLock:

No evento Load do formulário, agora sim, vamos verificar se nossa APP está em fase de demo ou registrada. O código a seguir faz a verificação:



Private Sub Form_Load()

On Error Resume Next


Você pode definir esses valores usando o número do hard disk como parte do SoftwareName ou outro critério qualquer mas que seja diferente em cada máquina, caso contrário SoftwareName será sempre o mesmo em todas as máquinas e uma única chave seria válida para todas as cópias com configuração de máquina iguais.



Me!ActiveLck.Password = "minhachave"

Me!ActiveLck.SoftwareName = "suachavedaapp"


Leio a chave da APP e passo o valor para a variável. Aqui nós vamos fazer uma leitura no Registro no Windows onde gravamos nossa chave. Veja no Help sobre o uso de GetSetting e SaveSetting. Atribuo à variável sK o valor da chave, e caso seja nula ou não tenha sido ainda gravada, isso vai acontecer na primeira execução, então informo que se nula é para retornar o valor “123”.


sK = GetSetting("MinhaApp", "KeyApp", "NumberKey", "123")

If sK = "123" Then


Se retorna 123 então será necessário gravá-la pois na primeira inicialização ela não existe, e se existir será regravada com o mesmo valor. Gravo os valores no registro do Windows com dados incoerentes ao Keycode verdadeiro.


SaveSetting "MinhaApp", "KeyApp", "NumberKey", "123"

Else


Leio a chave no Windows e se for nula retorna 123 = falso. Caso contrário, a chave é verdadeira ou o valor 123 que passei antes. O último valor é passado como parâmetro NULO, pois se a chave não existe tem que haver um retorno. Faça isso depois de executar pelo menos uma vez a abertura do form.


sK=GetSetting("MinhaApp", "KeyApp", "NumberKey", "123")

End If



Para ver o valor gravado no registro do Windows navegue até a seguinte chave:


HKEY_CURRENT_USER\Software\VB and VBA Program Settings\MinhaApp


Toda aplicação em VB ou VBA grava por padrão nesta chave. Se você deixou o código como está proposto neste artigo, irá ver o que foi gravado nesta chave.



Lindo não... Simples, prático e chique no último!

N.R. Dados do valor acima ficou diferente porque usamos outros valores no nosso exemplo.


Após isso registre o software usando a chave abaixo e veja o que acontece! Informe no campo è LiberationKeyLength ç o número 16 caso você use o utilitário KeyGenerator.


Chave: 79F9C3C0F6C14F24


Confira o que será gravado este número no lugar do
123
. Agora atribuímos o valor retornado na seção do registro da variável SK à propriedade LiberationKey.


Me!ActiveLck.LiberationKey = sK

If Me!ActiveLck.RegisteredUser Then

'Se verdadeira, prossegue e abre o form inicial.

DoCmd.OpenForm "frmToolbar", acNormal
DoCmd.Close acForm, Me.Name

Else


Caso falsa, atribuímos à propriedade iDias os valores retornados pelo controle:



iDias = Me!ActiveLck.UsedDays è Quantos dias o software já foi usado;

iFalta = 30 – iDias è Quantos dias restam de uso e a mensagem para o usuário;

If iFalta > 0 Then MsgBox "Presado Usuário.... Atenção...." & vbCrLf & vbCrLf & "Você tem " & iFalta & " dias para Ativar este Software!", vbCritical, "SuaApp"


Informo no formulário os valores da propriedade do controle para que possam ser passados para que a chave possa ser gerada, neste caso, pois o cliente não tem o KeyGenerator para gerar o KeyCode de liberação.

Transfiro para os campos do formulário, a propriedade SoftwareCode para que ele possa passar esta chave para a geração do KeyCode deixo o Botão de Registro habilitado.



Me!S_CODE = Me!ActiveLck.SoftwareCode

Me!KEY_LIB = ""

Me.cmdRegister.Enabled = True

End If
End Sub


4.4 Tornando possível registrar a APP

Bem, até aqui já definimos tudo o que era necessário para que o ActiveLock funcione adequadamente. Agora vamos fazer com que o registro do mesmo seja possível.

No código do Botão temos a seguinte instrução:


Private Sub cmdRegister_Click()

On Error GoTo Er_Registra


Verificamos se foi digitado algo no campo de registro


If Me!KEY_LIB = "" Then

MsgBox "A Chave de Liberação não pode ser Vazia!!!! " & vbCrLf & vbCrLf & "Insira o KeyCode fornecedido para esta cópia do Software!", vbCritical, "suaApp"

Else

Me!ActiveLck.LiberationKey = Me!KEY_LIB.Value

End If ' Verifica se ela é correta:

If Not (Me!ActiveLck.RegisteredUser) Then
MsgBox "Chave de Liberação Inválida!!!! " & vbCrLf & vbCrLf & "Solicite o KeyCode para este Produto.", vbCritical, "Chave Inválida"
Else


Se a chave é válida, gravamos seu conteúdo no registro do Windows e definimos a propriedade LiberationKey como verdadeira, agora somente, pois na próxima execução será novamente falsa conforme explicado acima.



SaveSetting "MinhaApp", "KeyApp", "NumberKey", Me!KEY_LIB.Value

Me!ActiveLck.LiberationKey = -1

MsgBox "Obrigado por efetuar o registro!" & vbCrLf & vbCrLf & "Copie a chave informada em local seguro." & _

vbCrLf & vbCrLf & "Você precisará dela sempre que Atualizar seu Software Operacional!", vbInformation, "Obrigado"

'> abre o form inicial >DoCmd.OpenForm "frmToolbar", acNormal

DoCmd.Close acForm, Me.Name

End If

Exit_Registra:

Exit Sub

Er_Registra:

MsgBox "Aconteceu um Erro: " & Err.Number & vbCrLf & vbCrLf & Err.Description, vbCritical, "SuaApp"

Resume Exit_Registra

End Sub



Pronto, software validado e registrado.



Para que sua APP tenha sempre um código de software diferente em cada Máquina, você pode usar o número de série do HD ou número do Processador ou outro qualquer que seja único no equipamento como parte do código do Software na propriedade SoftwareName.

Por exemplo:



ActiveLck.SoftwareName = "elcio" & strNumeroDoHD



5. E depois de tudo pronto?

Depois que o desenvolvedor fizer o exercício, e correr tudo bem, como fazer para limpar o registro da APP no Windows?

Navegando até a chave do registro de selecionando a linha e apertando Del ou executando a função que criei para executar este procedimento.

Mas atenção, o Registro do Windows é uma ferramenta poderosa e se bem usada, pode ser de grande proveito para o programador e principalmente para alguém, que como eu, tem assistência técnica e vira e mexe está às voltas com vírus.

Mas para “mexer” neste gigantesco banco de dados, é necessário conhecimento, pois, caso contrário, pode haver problemas que só uma Restauração do Sistema poderá resolver. Portanto, não entrarei em maiores detalhes para não correr o risco de incentivar aventuras mal-sucedidas.

6. Considerações:


SoftwareName:

No exemplo, eu inseri a função GetComputerName para identificar a máquina que está solicitando o KeyCode, e que pode ser usada como parte desta propriedade, fazendo com que seja criado um Código para cada equipamento conforme o nome do Computador. Como em uma rede você não pode ter dois micros com o mesmo nome, impede o registro simultâneo, mas pode fazer com que o software seja liberado para outra empresa que nomeie o micro com o nome licenciado.

Logo, o Código deverá possuir uma identidade única que somente exista no equipamento e em nenhum outro, neste caso seriam: O Número do HD ou a ID do processador. Exemplos que são fartamente encontrados nos fóruns e sites sobre o Access e Vb.

Sobre o KeyGenerator:

1 – Informe a senha que você definiu na Propriedade “Password” do controle, que neste caso é minhaSenha;
2 – Informe o Numero 16 para tamanho da Chave a ser gerada;
3 – Insira o Código do Software enviado pelo Cliente no Campo SoftwareCode;
4 – Clique em Generate key e “Copie” o valor informado no campo “Liberation Key” para enviar ao seu Cliente. Esta será a chave de Registro de sua App.

No formulário de exemplo ainda tem a opção de enviar por e-mail a solicitação do KeyCode. Já postei outro exemplo (uso de dlls) que contém o código necessário para envio de e-mail.

Caros amigos. Espero que esta pequena contribuição sirva de auxílio a todos.

Não seria possível é claro, sem a participação de nosso querido amigo Nelson Ferraz que cedeu tão gentilmente esta, entre muitas outras criações de indescritível valor a todos nós.

No site http://www.activelock.com/ é possível baixar exemplos melhores que este que vos ofereço.

Um grande e fraterno abraço e até a próxima. Caso você tenha comentários com referência a este artigo, por favor, envie para o meu e-mail elpauli@hotmail.com. Você também encontrará outros comentários, exemplos e respostas minhas como participante, nos grupos: Access Brasil do Orkut e GD Fórum Access.

Élcio

(*) Élcio Luiz Pauli é Programador e Técnico em Informática e atua em Cuiabá [/SIZE]– MT

N.R.: Arquivos contidos no arquivo Seguro_xp.zip disponível para download no site do AtivoAccess, sessão Downloads/Exemplos para estudo/Categoria Segurança:

REG_APPXP.MDB – Versão Access XP
REG_APP.MDB - Versão Access 97
nslock15vb5.ocx – Controle ocx
KeyGenerator.exe – Utilitário para gerar o KeyCode
AtivoAccess.doc – contem este artigo


Links relacionados:
http://www.activelock.com/

Artigos relacionados:
  Nenhum artigo relacionado



 

   Copyright © Ativo Access 2003 - 2020- Todos os direitos reservados   Política de Privacidade | Fale conosco