Pergunta

O que é a melhor maneira de gerar um ID de hardware exclusivo no Microsoft Windows com C ++ que não é facilmente spoofable (com, por exemplo, alterar o endereço MAC)?

Foi útil?

Solução

Windows armazena um Guid exclusivo por máquina no registro em:

HKEY_LOCAL_MACHINE\Software\Microsoft\Cryptography\MachineGuid

Outras dicas

Isto costumava ser o número de série da CPU, mas hoje existem muitos tipos de placas-mãe e este fator não é preciso. endereço MAC pode ser facilmente forjado. Isso deixa-nos com o número de série do disco rígido interno. Veja também: http: //www.codeproject. com / artigos / 319181 / Haephrati-Searching-para-a-confiável-Hardware-ID

Há uma variedade de "truques", mas a única real "resposta física" é "não, não há solução".

A "máquina" é nada mais do que um ônibus passiva com algum hardware ao redor. Embora cada pedaço de ferro pode fornecer um identificador de alguma forma utilizável, cada pedaço de ferro pode ser substituído por um usuário por qualquer mau ou bom motivo você nunca pode estar plenamente consciente do (por isso, se você basear sua funcionalidade sobre isso, você cria problemas ao seu usuário, e, portanto -como consequence- a si mesmo cada vez que um hardware têm de ser substituídos / reinicializado / reconfigurado etc etc.).

Agora, se o seu problema é identificar uma máquina em um contexto onde muitas máquinas têm de inter-operar em conjunto, este é um papel bem desempenhado por MAC ou endereços IP ou nomes de host. Mas esteja preparado para a ideia de que eles não são necessariamente constante no longo período de tempo (de modo a evitar a codificar-los - em vez "descobrir, em seguida," sobre qualquer uma das suas start-up)

Se o seu problema é -instead- identificar uma instância de software ou uma licença, você tem provavelmente melhor para se concentrar em um outro tipo de solução: você vende licenças para "usuários" (que é o usuário que tem o dinheiro, não o seu computador !), não às suas "máquinas" (que os usuários devem ser livres para mudar sempre que eles precisam / como sem a sua permissão, desde que você di não licenciar o hardware ou o sistema operacional ...), portanto, o problema não é identificar um máquina, mas um usuário (considerar que a mesma máquina pode ser um hospedeiro para muitos usuários e que um mesmo usuário pode trabalhar em uma variedade de máquinas ..., você não pode assumir / impõem uma relação 1: 1, sem correr em algum tipo de problemas mais cedo ou mais tarde, quando esta expressão IFS encontrada para não mais fit).

A idéia deve ser para registrar os usuários em um local pouco acessível, dar-lhes as chaves que você gerar, e verificar se um mesmo usuário pair / chave não é con-temporariamente usado mais de um número acordado de tempos sob um determinado período de tempo . Quando violações exceder, ou chaves torna-se velho, apenas bloquear e esperar para o usuário para renovar.

Como você pode ver, a resposta depende em grande parte a razão por trás sua pergunta, mais do que da própria questão.

Existem várias IDs atribuídos a hardware que podem ser lidos e combinados para formar uma chave de máquina. Por exemplo, você poderia obter o ID do disco rígido onde o software é armazenado, o ID proc, etc. Algumas delas podem ser definidos mais facilmente do que outros, mas parte da força está em combinar várias peças que não são necessariamente forte o suficiente por si só.

Aqui está um programa (também disponível como DLL ) que pode ler e mostrar o seu computador / hardware ID: http: //www.soft.tahionic.com/download-hdd_id/index.html

Use Win32 sistema APIs HDS. Não ler o registro, não tem sentido.

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