VB .NET -  Protegendo o seu Sistema


No artigo de hoje eu vou mostrar uma maneira bem simples de proteger o seu sistema usando os recursos da classe ManagementClass a partir de onde iremos gerar um serial a partir do endereço MAC.

A primeira coisa que vou deixar bem claro é que o código apresentando neste artigo é bem simples e tem como objetivo apenas dar uma idéia de como proteger um sistema usando o endereço MAC e gerando uma chave de ativação.

Não preciso dizer que o código poderá ser quebrado por programadores mais experientes e por isso não recomendo que você o utilize como esta em seus sistemas de produção.

Existem muitas abordagens que podem ser feitas para proteger o seu sistema e esta é uma forma de mostrar como usar a classe ManagementClass.

Essa classe representa uma classe de gerenciamento do Common Information Model (CIM). Uma classe de gerenciamento é uma classe WMI como Win32_LogicalDisk, que pode representar uma unidade de disco e Win32_Process, que representa um processo como Notepad.exe. Os membros dessa classe permitem que você acesse dados WMI usando um caminho de classe WMI específico.

Vamos criar duas classes:

1- A classe GerenciaChaves que possui o método GeraChaveAtivacao() que gera a chave de ativação para o cliente a partir do número serial informado.  (Esta classe não deve estar no código do cliente)

2- A classe GerenciaAtivacao que possui os métodos: (Essa classe esta no código do cliente)

a - GetNumeroSerialCliente() -  obtém o número serial do cliente a partir do seu endereço MAC
b - VerificaChaveAtivacao() - verifica se a chave de ativação informada pelo cliente é válida

O cliente informa o seu número serial e recebe a chave de ativação que deve informar para validação.

Recursos usados:

Nota: Baixe e use a versão Community 2015 do VS ela é grátis e é equivalente a versão Professional.

Criando o projeto no Visual Studio 2015 Community

Abra o VS 2015 Community e clique em New Project;

Selecione a linguagem Visual Basic e o template Windows Forms Application;

Informe o nome VB_NumeroSerial e clique no botão OK;

Referenciando o namespace ManagementClass

Vamos incluir uma referência ao namespace System.Management em nosso projeto.

No menu Project clique em Add Reference;

Selecione a guia Assemblies e marque a opção System.Management e clique em OK;

Criando a classe para gerar o serial e verificar a chave de ativação

No menu Project clique em Add Class e informe o nome GerenciaAtivacao.

A seguir inclua o código abaixo nesta classe:

Imports System.Management
Public Class GerenciaAtivacao
    Public Function GetNumeroSerialCliente() As Long
        ' a classe Win32_NetworkAdapterConfiguration
        ' representa os atributos e comportamentos do adaptador de rede
        Dim mc As New ManagementClass("Win32_NetworkAdapterConfiguration")
        Dim mac As String = ""
        'Obtem a coleção de adaptadors de rede
        Dim moc As ManagementObjectCollection = mc.GetInstances
        'Itera sobre os adaptadores obtendo o primeiro que puder
        For Each mo As ManagementObject In moc
            If mo.Item("IPEnabled") Then
                mac = mo.Item("MacAddress").ToString
                Exit For
            End If
        Next
        mc.Dispose()
        ' Esta função pega o serial a partir do endereço MAC
        ' Se x for o MAC e y for o serial 
        ' a função será  y += x[i] + (i * 2) 
        ' ond i é o indíce do elemento do endereço MAC
        Dim soma As Long = 0
        Dim index As Integer = 1
        For Each ch As Char In mac
            If Char.IsDigit(ch) Then
                soma += soma + Integer.Parse(ch) * (index * 2)
            ElseIf Char.IsLetter(ch) Then
                Select Case ch.ToString.ToUpper
                    Case "A"
                        soma += soma + 10 * (index * 2)
                    Case "B"
                        soma += soma + 11 * (index * 2)
                    Case "C"
                        soma += soma + 12 * (index * 2)
                    Case "D"
                        soma += soma + 13 * (index * 2)
                    Case "E"
                        soma += soma + 14 * (index * 2)
                    Case "F"
                        soma += soma + 15 * (index * 2)
                End Select
            End If
            index += 1
        Next
        Return soma
    End Function
    Public Function VerificaChaveAtivacao(ByVal chaveAtivacao As Long) As Boolean
        Dim x As Long = GetNumeroSerialCliente()
        Dim y As Long = x * x + 53 / x + 113 * (x / 4)
        Return y = chaveAtivacao
    End Function
End Class

Incluindo o projeto Class Library

Para poder testar o sistema vamos incluir um novo projeto do tipo Class Library onde vamos criar a classe GerenciaChaves().

No menu File clique em Add -> New Project e selecione o template Class Library e informe o nome Ativacao.

Altere o nome da classe Class1 gerada por padrão para GerenciaChaves e inclua o código abaixo nesta classe:

Public Class GerenciaChaves
    Public Function GeraChaveAtivacao(ByVal serialCliente As Long) As Long
        Dim x As Long = serialCliente
        Return x * x + 53 / x + 113 * (x / 4)
    End Function
End Class

Temos nesta classe o método GeraChaveAtivacao() que gera a chave do cliente a partir do seu serial.

Implementando o lado do cliente

A seguir temos uma implementação bem simples feita apenas para mostrar uma forma de usar as funcionalidades criadas.

No projeto VB .NET Windows Forms abra o formulário Form1.vb e inclua os controles Label, TextBox e Button no formulário conforme o leiaute mostrado na figura abaixo:

No formulário declare o seguinte namespace:

Imports Ativacao

Após a definição da classe Form1 defina as seguintes variáveis:

Dim reg As GerenciaAtivacao
Dim ger As GerenciaChaves

No evento Load do formulário inclua o código abaixo:

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim reg As New GerenciaAtivacao
        Try
            txtSerial.Text = reg.GetNumeroSerialCliente()
        Catch ex As Exception
            MessageBox.Show("Erro : " + ex.Message)
        End Try
 End Sub

Este código obtém o serial do cliente a partir do seu endereço MAC e exibe na caixa de texto do formulário.

No evento Click do botão de comando - btnGerarChave :

Private Sub btnGerarChave_Click(sender As Object, e As EventArgs) Handles btnGerarChave.Click
        Dim reg As New GerenciaAtivacao
        Try
            Dim chaveAtivacao As Long = Convert.ToInt64(txtChaveAtivacao.Text)
            If reg.VerificaChaveAtivacao(chaveAtivacao) Then
                MessageBox.Show("Ativação realizada com sucesso !")
            Else
                MessageBox.Show("Ativação falhou !!!")
            End If
        Catch ex As Exception
            MessageBox.Show("Erro : " + ex.Message)
        End Try
    End Sub

Neste código temos a validação da chave de ativação que o usuário informa na caixa de texto txtChaveAtivacao.

Você pode melhorar o código apresentado de diversas formas fique à vontade...

Pegue o projeto completo aqui :  VB_NumeroSerial.zip

Mas, ó homem, quem és tu, que a Deus replicas? Porventura a coisa formada dirá ao que a formou: Por que me fizeste assim?
Ou não tem o oleiro poder sobre o barro, para da mesma massa fazer um vaso para honra e outro para desonra?

Romanos 9:20,21

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 ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti