Login com licença através do MAC Address utilizando C# e Firebase.
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.