Generowanie unikalnego identyfikatora maszyny

Muszę napisać funkcję, która generuje identyfikator, który jest unikalny dla danego komputera z systemem operacyjnym Windows.

Obecnie używam WMI do odpytywania różnych parametrów sprzętowych i łączenia ich razem i mieszania ich w celu uzyskania unikalnego identyfikatora. Moje pytanie brzmi, Jakie są sugerowane parametry, których powinienem użyć? Obecnie używam kombinacji danych bios\cpu\dysku, aby wygenerować unikalny identyfikator. I używam pierwszego wyniku, jeśli dla każdego jest wiele wyników metric.

Napotkałem jednak problem, w którym maszyna, która dwukrotnie uruchamia się w 2 różnych systemach operacyjnych Windows, generuje różne kody stron na każdym systemie operacyjnym, co idealnie nie powinno się zdarzyć.

Dla odniesienia, są to metryki, których obecnie używam:

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
Author: bluish, 2008-09-19

15 answers

Przetworzyć SMBIOS siebie i hash go do dowolnej długości. Zobacz specyfikację pdf dla wszystkich dostępnych struktur SMBIOS.

Do zapytania informacji SMBIOS z systemu Windows można użyć EnumSystemFirmwareEntries, EnumSystemFirmwareTables oraz GetSystemFirmwareTable.

IIRC," unique id " z instrukcji CPUID jest przestarzały z P3 i nowszych.

 21
Author: Jonas Gulle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-05 11:53:17

Miałem ten sam problem i po odrobinie badań zdecydowałem, że najlepiej będzie przeczytać {[0] } w kluczu rejestru HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography, Jak zasugerował @Agnus. Jest on generowany podczas instalacji systemu operacyjnego i nie ulegnie zmianie, chyba że wykonasz inną świeżą instalację systemu operacyjnego. W zależności od wersji systemu operacyjnego może zawierać adres MAC adaptera sieciowego osadzony (plus kilka innych numerów, w tym losowych) lub numer pseudorandomowy, tym później dla nowszych wersji systemu operacyjnego (po XP SP2, jak sądzę, ale nie jestem pewien). Jeśli to pseudorandom teoretycznie można go sfałszować-Jeśli dwie maszyny mają ten sam stan początkowy, w tym zegar czasu rzeczywistego. W praktyce będzie to rzadkie, ale pamiętaj, jeśli spodziewasz się, że będzie to baza bezpieczeństwa, która może zostać zaatakowana przez hardkorowych hakerów.

Oczywiście wpis rejestru może być łatwo zmieniony przez każdego, aby sfałszować GUID maszyny, ale odkryłem, że zakłóciłoby to normalne działanie tak wielu komponentów systemu Windows, że w większości przypadków żaden zwykły użytkownik nie zrobiłby tego (ponownie, uważaj na hardkorowych hakerów).

 70
Author: Fabio Ceconello,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-01 13:09:28

Za pomocą naszego narzędzia licencjonowania rozważamy następujące komponenty

  • adres MAC
  • Procesor (nie numer seryjny, ale rzeczywisty profil procesora, taki jak stepping i model)
  • Numer Seryjny Dysku Systemowego (Nie Etykieta Woluminu)
  • Pamięć
  • model i sprzedawca CD-ROM
  • Model I sprzedawca karty graficznej
  • kontroler IDE
  • Kontroler SCSI

Jednak zamiast tylko hashować komponenty i tworzyć system pass/fail, tworzymy porównywalny odcisk palca , który może być użyty do określenia, jak różne są dwa profile maszyn. Jeśli różnica jest powyżej określonej tolerancji, Poproś użytkownika o ponowne aktywowanie.

W ciągu ostatnich 8 lat w użyciu setki tysięcy instalacji użytkowników końcowych okazało się, że ta kombinacja działa dobrze, aby zapewnić niezawodny unikalny identyfikator maszyny - nawet dla maszyn wirtualnych i sklonowanych instalacji systemu operacyjnego.

 28
Author: Paul Alexander,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-05 15:23:14

Nienawidzę być facetem, który mówi: "po prostu robisz to źle "(zawsze nienawidzę tego faceta ;) ale...

Czy musi być powtarzalnie generowany dla unikalnej maszyny? Czy możesz po prostu przypisać identyfikator lub zrobić klucz publiczny / prywatny? Może gdybyś mógł wygenerować i zapisać wartość, mógłbyś uzyskać do niej dostęp z obu systemów operacyjnych zainstalowanych na tym samym dysku?

Prawdopodobnie zbadałeś te opcje i nie działają dla ciebie, ale jeśli nie, to jest coś do rozważenia.

If it ' s not a kwestia zaufania użytkowników, możesz po prostu użyć adresów MAC.

 2
Author: Sam Hoice,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:36:45

A co z używaniem UniqueID procesora?

 2
Author: gizmo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-01 13:01:51

Należy przyjrzeć się używaniu adresu MAC na karcie sieciowej (jeśli istnieje). Są one zazwyczaj unikalne, ale mogą być wykonane. Użyłem oprogramowania, które generuje plik licencyjny na podstawie adresu MAC karty sieciowej, więc jest to dość niezawodny sposób rozróżniania komputerów.

 1
Author: Kyle Cronin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:45:38

Dla jednej z moich aplikacji używam nazwy komputera, jeśli nie jest to komputer domenowy, lub konta maszyny domenowej SID dla komputerów domenowych. Mark Russinovich mówi o tym w tym wpisie na blogu, Machine SID :

Ostatnim przypadkiem, w którym duplikacja SID byłaby problemem, jest sytuacja, gdy rozproszona aplikacja używała Sid Maszyny do jednoznacznej identyfikacji komputerów. Żadne oprogramowanie Microsoftu tak nie robi i korzystanie z sid 'a w ten sposób nie działa tylko na fakt, że wszystkie DC' s masz tę samą maszynę, SID. Oprogramowanie, które opiera się na unikalnych tożsamości komputera albo używa nazw komputerów lub SID domeny komputera (SID kont komputerów w domenie).

Możesz uzyskać dostęp do konta maszyny domeny Sid poprzez LDAP lub System.DirectoryServices.

 1
Author: cmcginty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-01 13:04:26

W moim programie najpierw sprawdzam Serwer terminala i używam WTSClientHardwareId. W przeciwnym razie adres MAC lokalnego komputera powinien być odpowiedni.

Jeśli naprawdę chcesz skorzystać z listy właściwości, które podałeś pomiń rzeczy takie jak Name i DriverVersion, Clockspeed, itd. ponieważ prawdopodobnie jest zależny od systemu operacyjnego. Spróbuj wypisać te same informacje na obu systemach operacyjnych i pominąć te, które różnią się między sobą.

 1
Author: AngelBlaZe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-01 13:05:52

Dlaczego nie użyć adresu MAC karty sieciowej?

 0
Author: Brian Matthews,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:35:37

Może trochę oszukuje, ale Adres MAC adaptera Ethernet Machines rzadko się zmienia bez zmiany płyty głównej w dzisiejszych czasach.

 0
Author: bfabry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:36:16

Możesz wyciągnąć jakiś numer seryjny producenta lub znacznik serwisowy?

Nasz sklep jest sklepem firmy Dell, więc używamy znacznika usługi, który jest unikalny dla każdej maszyny, aby je zidentyfikować. Wiem, że można to odpytywać z BIOSu, przynajmniej w Linuksie, ale nie wiem jak to zrobić w Windowsie.

 0
Author: Christopher Cashell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-19 05:36:54

Dostępna jest biblioteka do pobierania informacji o sprzęcie: Hardware serial number extractor (CPU, RAM, HDD, BIOS)

 0
Author: ariwez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-30 09:03:45

Miałem dodatkowe ograniczenie, używałem. Net express, więc nie mogłem użyć standardowego mechanizmu zapytań sprzętowych. Więc zdecydowałem się użyć power shell do wykonania zapytania. Pełny kod wygląda tak:

Private Function GetUUID() As String
    Dim GetDiskUUID As String = "get-wmiobject Win32_ComputerSystemProduct  | Select-Object -ExpandProperty UUID"
    Dim X As String = ""
    Dim oProcess As New Process()
    Dim oStartInfo As New ProcessStartInfo("powershell.exe", GetDiskUUID)
    oStartInfo.UseShellExecute = False
    oStartInfo.RedirectStandardInput = True
    oStartInfo.RedirectStandardOutput = True
    oStartInfo.CreateNoWindow = True
    oProcess.StartInfo = oStartInfo
    oProcess.Start()
    oProcess.WaitForExit()
    X = oProcess.StandardOutput.ReadToEnd
    Return X.Trim()
End Function
 0
Author: user2515235,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-03 19:50:25

Wyszukaj CPUID dla jednej opcji. Mogą wystąpić pewne problemy z systemami wielordzeniowymi.

 -1
Author: BCS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-01 13:00:53

Spróbuj tego, daje unikalny identyfikator dysku twardego: Port DiskId32 dla Delphi 7-2010 .

 -1
Author: wahm sarab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-09 07:16:20