2011-04-14 2 views
7

이 스레드는 괜찮습니다. How to get Processor and Motherboard Id?C++ get 프로세서 ID

WMI 또는 제 3 자 lib를 사용하지 않는 C++ 코드를 사용하여 프로세서 ID를 얻고 싶습니다.

또는 유일무이 한 것으로 판명 된 컴퓨터의 모든 것. 한 가지는 이더넷 ID이지만 일부 컴퓨터에서는 다시 제거 할 수 있습니다. 이것은 주로 라이센스 목적으로 사용하고 싶습니다.

모든 주요 프로세서에서 고유 한 프로세서 ID를 사용할 수 있습니까?

+1

읽어야하는 항목 : http://stackoverflow.com/questions/5488249/how-do-i-enforce-an-expiration-date-for-a-trial-install-of-my-software/5488752#5488752 (특히 마지막 두 단락). – Damon

답변

15

나는 최근에 비슷한 문제가 있었고 다음과 같이했습니다. 우선은 몇 가지 독특한 시스템 식별 값을 얻었다 : HDD 일련 번호

  • GetVolumeInformation

  • GetComputerName (이것은 물론 고유의 것이 아니라 우리의 시스템 클라이언트를 식별하기 위해 컴퓨터 이름을 사용했다 LAN에있어 나에게 좋았어)

  • __cpuid (특히 PS N - 프로세서 일련 번호 필드) MAC 용

  • GetAdaptersInfo

가 I이 값을 가져다 (아래 업데이트를 판독 임의이지만 결정적 방식으로 결합 된 주소) (추가! , xoring, 나누기 및 나머지 유지 등). 값이 문자열 인 것처럼 반복하고 창의적으로 작업하십시오. 결국 문자와 숫자의 ASCII 범위로 변환 할 수있는 바이트 리터럴을 얻게되어 노이즈처럼 보이지 않는 독창적 인 "읽을 수있는"코드를 얻게됩니다.

또 다른 접근법은 단순히이 값들을 연결 한 다음 그 위에 무언가를 xoring하여 (그리고 아마도 문자로 다시 변환하여) "덮어 버리는 것"이 ​​될 수 있습니다.

적어도 하나의 입력이 고유해야합니다 (MAC 주소). 고유하다는 말입니다. 물론이 고유성을 날려 버리지 않으려면 숫자 이론에 대한 이해가 필요하지만 어쨌든 충분해야합니다.

중요 업데이트 :이 게시물을 통해 나는 암호에 관한 몇 가지 사실을 알게되었고, 임의 조합 (본질적으로 자신의 해시)을 구성하는 것이 거의 잘못된 생각이라고 생각합니다. 실제로 사용되는 해쉬 함수는 (충돌 확률이 낮은 것처럼) 잘 동작하고 중단하기가 어렵도록 구성됩니다 (다른 해시 값과 동일한 해시 값을 갖는 값을 생성하는 능력). 그러한 기능을 구축하는 것은 매우 어려운 컴퓨터 과학 문제이며 자격을 갖추지 않으면 시도하면 안됩니다. 이에 대한 올바른 접근법은 하드웨어 (즉, 게시물에 나열된 정보)에 대해 수집 할 수있는 정보를 연결하고 검증 가능한 안전한 출력을 얻기 위해 암호화 해시 또는 디지털 서명을 사용하는 것입니다. 암호화 알고리즘을 직접 구현하지 마십시오. 피하기 위해 많은 지식을 필요로하는 많은 취약점 함정이 있습니다. 알고리즘 구현에는 잘 알려지고 신뢰할 수있는 라이브러리를 사용하십시오.

+0

Good @ Tamás 그러나 VolumeInformation은 신뢰할 수 없습니다. 하드 디스크를 포맷하면 변경되고 이전에 생성 된 라이센스가 작동하지 않습니다. 또 다른 방법으로는 원하는대로 volumeID를 변경할 수있는 도구가 많이 있습니다. 컴퓨터 이름도 구성 가능하며 MAC 주소를 에뮬레이트/덮어 쓸 수있는 도구가 있습니다.이 경우 고객은 라이센스를 쉽게 끊을 수 있습니다 – RoboAlex

+0

probubly 해시를 저장하고 해시를 저장하고 비교하여 MAC 주소를 잃어 버리십시오. –

4

Visual Studio를 사용하는 경우 <intrin.h> 헤더에 __cpuid 인트 린셜이 제공됩니다. 연결된 msdn 사이트의 예.

+0

감사합니다. 정말 독특한가요? – Vijay

+0

내가 모르는 일이야, 미안. : | – Xeo

+2

이것은 CPU _ 유형 _입니다. 거의 유일한; 수십억 개의 중복이있을 수 있습니다. 예 : 링크 된 페이지에서 "정품 Intel (R) CPU 2.80GHz"및 일부 비트 플래그를 얻을 수 있습니다. – MSalters

3

흠 ...

가 설치되어있는 하드웨어 (그래서 지정된 컴퓨터에 대해이 ID는 항상 동일)를 기반으로 고유 ID를 생성하는 특별한 도서관이 있습니다. 그들 대부분은 마더 보드 ID + HDD ID + CPU ID를 취해이 값들을 혼합합니다.

바퀴가 바퀴를 재발 명 했습니까? 이러한 라이브러리를 사용하지 않는 이유는 무엇입니까? 어떤 심각한 이유?

+0

C++에서 작동해야합니다. 무료 여야합니다 : ( – Vijay

+0

은 libs이고, 이름은 – Vijay

+1

입니다. [DLL + sources] (http://www.soft.tahionic.com/download-hdd_id/hardware%20ID%20programmer%27s%20DLL. html) 2. [sources + article] (http://www.codeproject.com/KB/system/computerinfo.aspx) – maverik