[windows] 고유 한 컴퓨터 ID 생성

Windows OS를 실행하는 특정 컴퓨터에 고유 한 ID를 생성하는 함수를 작성해야합니다.

현재 저는 WMI를 사용하여 다양한 하드웨어 매개 변수를 쿼리하고 함께 연결하고 해시하여 고유 ID를 파생합니다. 내 질문은 내가 사용해야하는 제안 된 매개 변수는 무엇입니까? 현재 고유 ID를 생성하기 위해 bios \ cpu \ disk 데이터 조합을 사용하고 있습니다. 각 메트릭에 대해 여러 결과가있는 경우 첫 번째 결과를 사용하고 있습니다.

그러나 두 개의 다른 Windows OS로 이중 부팅하는 컴퓨터가 각 OS에서 다른 사이트 코드를 생성하는 문제가 발생했습니다.

참고로 다음은 내가 현재 사용중인 측정 항목입니다.

Win32_Processor:UniqueID,ProcessorID,Name,Manufacturer,MaxClockSpeed
Win32_BIOS:Manufacturer
Win32_BIOS:SMBIOSBIOSVersion,IdentificationCode,SerialNumber,ReleaseDate,Version
Win32_DiskDrive:Model, Manufacturer, Signature, TotalHeads
Win32_BaseBoard:Model, Manufacturer, Name, SerialNumber
Win32_VideoController:DriverVersion, Name



답변

SMBIOS를 직접 구문 분석하고 임의의 길이로 해시하십시오. 사용 가능한 모든 SMBIOS 구조에 대해서는 PDF 사양 을 참조하십시오 .

Windows에서 SMBIOS 정보를 쿼리하려면 EnumSystemFirmwareEntries, EnumSystemFirmwareTablesGetSystemFirmwareTable.

IIRC, CPUID 명령의 “고유 ID”는 P3 이상에서 더 이상 사용되지 않습니다.


답변

나는 똑같은 문제가 있었고 약간의 조사 끝에 @Agnus가 제안한 것처럼 MachineGuid레지스트리 키 를 읽는 것이 가장 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography좋습니다. OS 설치 중에 생성되며 다른 OS를 새로 설치하지 않는 한 변경되지 않습니다. OS 버전에 따라 포함 된 네트워크 어댑터 MAC 주소 (임의를 포함한 다른 숫자 포함) 또는 의사 난수 번호, 최신 OS 버전의 경우 이후 (XP SP2 이후, 확신하지만 확실하지 않음)가 포함될 수 있습니다. 이론적으로 의사 난수 인 경우 위조 될 수 있습니다. 두 시스템이 실시간 시계를 포함하여 동일한 초기 상태를 갖는 경우입니다. 실제로 이것은 드물지만 하드 코어 해커의 공격을받을 수있는 보안 기반이 될 것으로 예상되는 경우주의해야합니다.

물론 레지스트리 항목은 누구나 쉽게 변경할 수있어 컴퓨터 GUID를 위조 할 수 있지만 이로 인해 많은 Windows 구성 요소의 정상적인 작동이 중단되어 대부분의 경우 일반 사용자가 수행하지 않을 것입니다. 하드 코어 해커 용).


답변

우리와 함께 라이선스 도구 우리는 다음과 같은 구성 요소를 고려

  • MAC 주소
  • CPU (일련 번호가 아니라 스테핑 및 모델과 같은 실제 CPU 프로필)
  • 시스템 드라이브 일련 번호 (볼륨 레이블 아님)
  • 기억
  • CD-ROM 모델 및 공급 업체
  • 비디오 카드 모델 및 공급 업체
  • IDE 컨트롤러
  • SCSI 컨트롤러

그러나 구성 요소를 해싱하고 합격 / 불합격 시스템을 만드는 것보다 두 개의 컴퓨터 프로필이 얼마나 다른지 확인하는 데 사용할 수 있는 유사한 지문 을 만듭니다 . 차이 등급이 지정된 허용 오차를 초과하면 사용자에게 다시 활성화하도록 요청하십시오.

지난 8 년 동안 수십만 건의 최종 사용자 설치와 함께 사용되어이 조합이 안정적으로 고유 한 컴퓨터 ID를 제공하는 데 효과적이라는 사실을 확인했습니다. 심지어 가상 컴퓨터와 복제 된 OS 설치에서도 마찬가지입니다.


답변

프로세서의 UniqueID를 사용하는 것은 어떻습니까?


답변

나는 “당신은 단지 잘못하고있다”고 말하는 사람이 되기는 싫다 (나는 항상 그 사람을 싫어한다;) 그러나 …

고유 한 기계에 대해 반복적으로 생성되어야합니까? 식별자를 할당하거나 공개 / 개인 키를 수행 할 수 있습니까? 값을 생성하고 저장할 수 있다면 동일한 디스크에 설치된 두 OS에서 액세스 할 수 있습니까?

아마도 이러한 옵션을 살펴 보았고 작동하지 않을 수도 있지만 그렇지 않은 경우 고려해야 할 사항입니다.

사용자 신뢰의 문제가 아니라면 MAC 주소 만 사용할 수 있습니다.


답변

네트워크 카드 (존재하는 경우)의 MAC 주소를 사용하는 방법을 살펴 봐야합니다. 이들은 일반적으로 고유하지만 조작 할 수 있습니다. 네트워크 어댑터 MAC 주소를 기반으로 라이선스 파일을 생성하는 소프트웨어를 사용 했으므로 컴퓨터를 구분하는 데 상당히 안정적인 방법으로 간주됩니다.


답변

내 응용 프로그램 중 하나의 경우 도메인 컴퓨터가 아닌 경우 컴퓨터 이름을 사용하고 도메인 컴퓨터의 경우 도메인 컴퓨터 계정 SID를 사용합니다. Mark Russinovich는이 블로그 게시물 인 Machine SID 에서 이에 대해 설명합니다 .

SID 복제가 문제가되는 마지막 경우는 분산 응용 프로그램이 컴퓨터 SID를 사용하여 컴퓨터를 고유하게 식별하는 경우입니다. Microsoft 소프트웨어는 그렇게하지 않으며 이러한 방식으로 시스템 SID를 사용하는 것은 모든 DC가 동일한 시스템 SID를 가지고 있다는 사실에만 작동하지 않습니다. 고유 한 컴퓨터 ID에 의존하는 소프트웨어는 컴퓨터 이름 또는 컴퓨터 도메인 SID (도메인에있는 컴퓨터 계정의 SID)를 사용합니다.

LDAP 또는를 통해 도메인 컴퓨터 계정 SID에 액세스 할 수 있습니다 System.DirectoryServices.