Login com licença através do MAC Address utilizando C# e Firebase.

Leonardo Appio
2 min readApr 9, 2021

--

Quando se desenvolve um software que será vendido através de licenças, um grande desafio que se encontra é a pirataria, uma pessoa compra uma licença do seu software e compartilha a conta dela com diversas outras pessoas, fazendo assim, com que você deixe de ganhar dinheiro.

Neste artigo irei falar sobre como eu desenvolvi um software de gestão para o mercado financeiro e me protegi do compartilhamento de contas.

As tecnologias utilizadas foram, C# para o desenvolvimento e Firebase com RealTime Database NOSQL no Backend.

Antes de tudo, eu criei uma classe Conta, na qual eu declarei as seguintes propriedades.

class Conta
{
public string Usuario {get; set;}
public string Senha {get; set;}public string Nome {get; set;}public string MacAdress {get; set;}public DateTime DiaTeste {get; set;}
}

O método que eu utilizei para validar se a conta pertence mesmo a aquele usuário é validando o MAC Address dele. Quando o usuário faz o primeiro login, o sistema salva o MAC Address no Firebase, e a partir dos próximos logins é validado se aquele computador é o mesmo do cliente que fez a compra.

Mas o que é o MAC Address?

O endereço MAC (Media Access Control) é o endereço físico da placa de rede de um computador ou qualquer outra estação com interface de rede.

Para o primeiro acesso do cliente, eu utilizei o seguinte método, dentro da classe Conta, para pegar o MAC Address e salvar no Firebase.

public static string GetMACAddress()
{
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
if (nics.Length == 0)
return String.Empty;
NetworkInterface adapter = nics[0];
String enderecoMAC = adapter.GetPhysicalAddress().ToString();
return enderecoMAC;
}

Após isso, os dados no Firebase ficarão assim:

Agora basta apenas você puxar os dados da conta do Firebase através da chave.

FirebaseResponse resultado = await client.GetTaskAsync("contas/" + usuario);

Instancie uma nova conta através do resultado. Como as propriedades da classe Conta e o nome das chaves no banco são os mesmo, é possível instanciar uma nova conta apenas passando como parâmetro o resultado retornado pelo Firebase.

Conta conta = resultado.ResultAs<Conta>();

Agora é simples, basta você verificar se a senha está correta, verificar se não é o primeiro acesso do cliente e verificar se os MAC Address são iguais, após isso é só liberar o acesso ao sistema.

if (Conta.GetMACAddress() == conta.MacAdress)
{
//libere acesso ao sistema.
}

Agora basta tratar as exceções e mostrar mensagens quando os dados não conferirem.

--

--