Pergunta

Pergunta: Eu tenho que criar um ID exclusivo para cada cliente em rede, tal que:

  • ele (ID) deve persistir quando o software cliente for instalado no computador de destino e deve continuar a persistir se o software for reinstalado no mesmo computador e na mesma instalação do sistema operacional,
  • não deve mudar se a configuração do hardware for modificada de várias maneiras (exceto alterando a placa-mãe)
  • Quando o disco rígido com software cliente instalado é clonado para outro computador com configuração de hardware idêntica (ou, o mais semelhante possível), o software cliente deve estar ciente dessa alteração.

Um pouco de explicação e alguma história por trás:

Esta questão é basicamente uma questão antiga que também aborda o tema da proteção contra cópia de software, já que alguns dos mecanismos utilizados nessa área são mencionados aqui.Devo deixar claro neste ponto que não estou procurando um esquema de proteção contra cópia.Por favor, continue lendo.:)

Estou trabalhando em um software cliente-servidor que deveria funcionar em uma rede local.Um dos problemas que tenho que resolver é identificar cada cliente único na rede (não tanto), para que eu possa aplicar certos atributos a cada cliente específico, reter e impor esses atributos durante o tempo de vida da implantação de um cliente específico. cliente.

Enquanto procurava uma solução, percebi o seguinte:

  • O sistema de ativação do Windows usa algum tipo de mecanismo pesado de impressão digital que é extremamente sensível a modificações de hardware,
  • O software de imagem de disco copia todos os IDs de volume (vinculados a cada partição quando formatado) e IDs personalizados gerados exclusivamente durante o processo de instalação, durante a primeira execução ou de qualquer outra forma, que seja estritamente de natureza software e armazenados no registro ou no disco rígido, por isso é muito fácil confundir dois.

A escolha óbvia para esse tipo de problema seria descobrir os identificadores do BIOS (embora não tenha 100% de certeza se isso é exclusivo através de modelos de placa-mãe idênticos), pois é a única coisa em que posso confiar que não é duplicada, transferida por clonagem , e isso não pode ser alterado (pelo menos não usando algum programa de espaço do usuário).Todo o resto falha por não ser confiável (clonagem de MAC, alguém?) ou por ser muito exigente (em termos de ser muito sensível a alterações de configuração).

A subpergunta que gostaria de fazer é: estou fazendo isso corretamente em termos de arquitetura?Talvez exista uma ferramenta melhor para a tarefa que tenho que realizar...

Outra abordagem que eu tinha em mente é algo semelhante a um mecanismo de handshake, onde um servidor mantém uma tabela de pesquisa interna de IDs de clientes conectados (que podem ser completamente baseados em software e não exclusivos a qualquer momento) e diz ao cliente para crie um ID diferente durante o handshake, se um ID duplicado for fornecido na conexão.Essa abordagem, infelizmente, não atende bem a um dos requisitos de vincular atributos a clientes específicos durante a vida útil.

Foi útil?

Solução

Parece-me que você deve construir o ID exclusivo que corresponda às suas necessidades.Este ID pode ser construído como um cerquilha (como MD5, SHA1 ou SHA512) das informações que são importantes para você (algumas informações sobre componentes de software e hardware).

Você pode tornar sua solução mais segura se assinar esse hash com sua chave privada e seu software verificar, durante o início, se a chave (valor de hash assinado) está assinado (apenas a chave pública deve ser instalada junto com o seu software).Pode-se expandir esse tipo de solução com diferentes serviços online, mas os clientes corporativos podem achar os serviços online não tão agradáveis.

Outras dicas

O que você está procurando é o WMI do Windows.Você pode obter o ID da placa-mãe (que é exclusivo no mesmo tipo de placa-mãe) ou muitos outros tipos de identificadores exclusivos e criar alguma função inteligente para gerar um UHID.Uau, acabei de inventar uma sigla?

E se você deseja obter especificamente o ID da placa-mãe (BIOS):

WMI class: Win32_BIOS
Namespace: \Root\Cimv2

Documentação: http://msdn.microsoft.com/en-us/library/aa394077(VS.85).aspx
Código de amostra: http://msdn.microsoft.com/en-us/library/aa390423%28VS.85%29.aspx

Editar:Você não especificou uma linguagem (e presumi C++), mas isso pode ser feito em Java (com um driver COM) e também em qualquer linguagem .NET.

Muitos programas usam o hostId para construir um código de licença (como aqueles baseados em FlexLM).Dê uma olhada no que o Matlab faz dependendo do sistema operacional:

http://www.mathworks.com/support/solutions/en/data/1-171PI/index.html

Também dê uma olhada nesta pergunta:

Obtendo um ID exclusivo de um sistema semelhante ao Unix

Uma vez também vi alguns programas baseando suas licenças no número de série do disco rígido, e talvez seja menos provável que isso mude.Alguns sugeririam usar o MAC da sua placa Ethernet, mas isso pode ser reprogramado.

MAC
NÃO CONFIE NO MAC!SEMPRE.Não é permanente.O usuário pode alterá-lo facilmente (menos de 30 segundos).

ID do volume
NÃO CONFIE NO ID do volume!SEMPRE.Não é permanente.O usuário pode alterá-lo facilmente.Ele também muda simplesmente formatando a unidade.

WMI
WMI é um serviço.Pode ser facilmente desativado.Na verdade, eu tentei isso e descobri que em muitos computadores está desabilitado ou quebrado (sim, muitas vezes quebrado).

Servidor de licença
A conexão a um servidor de validação também pode causar muitos problemas porque:
* seus clientes podem nem sempre estar conectados à Internet.
* seus clientes podem se conectar com configurações especiais (roteador/NAT/proxy/gateway) que precisam inserir em seu programa para permitir que ele se conecte ao servidor de validação.
* eles podem estar atrás de um firewall que bloqueará todos os programas, exceto alguns (meu caso).Em alguns casos, o firewall pode não estar sob seu controle (válido para a MAIORIA dos usuários corporativos)!
* isso é super fácil para redirecionar seu programa para um servidor web falso local que emula seu servidor de licenciamento.

Dados de hardware
Se você precisar de proteção forte, precisará confiar no hardware.Algo que não pode ser editado pelo usuário.Algo como a instrução de ID da CPU disponível nas CPUs Intel/AMD e o número de série gravado na interface IDE da unidade.
O ID da CPU e o ID do HDD são permanentes.Eles nunca mudarão, nem mesmo depois de formatar o computador e reinstalar o Windows.

É factível.Por exemplo esta biblioteca lê o ID de hardware de um computador.Há uma demonstração compilada e também código-fonte/DLL.Isenção de responsabilidade:o link leva a um produto comercial (19€/sem royalties).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top