it-swarm-tr.com

Benzersiz bir makine kimliği oluşturma

Windows işletim sistemi çalıştıran belirli bir makine için benzersiz bir kimlik üreten bir işlev yazmam gerekiyor.

Şu anda, çeşitli donanım parametrelerini sorgulamak ve bunları bir araya getirmek ve benzersiz kimliği türetmek için karma elde etmek için WMI kullanıyorum. Sorum şu, kullanmam gereken önerilen parametreler nelerdir? Şu anda, benzersiz bir kimlik oluşturmak için bios\cpu\disk verilerinin bir kombinasyonunu kullanıyorum. Her metrik için birden fazla sonuç varsa ve ilk sonucu kullanıyorum.

Ancak, iki farklı Windows işletim sistemine çift önyükleme yapan bir makinenin her işletim sistemi için farklı site kodları oluşturduğu ve bunun da ideal olmaması gereken bir sorunla karşılaştım.

Başvuru için, bunlar şu anda kullandığım metrikler:

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
97
HS.

SMBIOS kendinizi ayrıştırın ve istediğiniz uzunluğa getirin. Mevcut tüm SMBIOS yapıları için PDF spesifikasyonuna bakın.

SMBIOS bilgilerini Windows'tan sorgulamak için EnumSystemFirmwareEntries , EnumSystemFirmwareTables ve GetSystemFirmwareTable kullanabilirsiniz.

IIRC, CPUID komutundan "benzersiz bir kimlik" olan P3 ve daha yeni sürümlerden kaldırılmıştır.

22
Jonas Gulle

Aynı problemi yaşadım ve küçük bir araştırmadan sonra en iyisinin @Agnus'un önerdiği gibi HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography kayıt defteri anahtarındaki MachineGuid dosyasını okumak olduğuna karar verdim. İşletim sistemi yüklemesi sırasında oluşturulur ve başka bir yeni işletim sistemi yüklemesi yapmazsanız değişmez. İşletim sistemi sürümüne bağlı olarak, daha sonradan yeni işletim sistemi sürümleri için (XP SP2’den sonra, inanıyorum ama emin değilim) gömülü ağ bağdaştırıcısı MAC adresini (artı rasgele dahil bazı diğer numaraları da) veya bir sahte numarayı içerebilir. ). Teorik olarak sahte ya da teorik olarak sahte olabilir - eğer iki makine gerçek zaman saati dahil olmak üzere aynı başlangıç ​​durumuna sahipse. Uygulamada, bu nadir olacaktır, ancak sert bilgisayar korsanları tarafından saldırıya uğrayabilecek güvenlik için bir üs olmasını beklediğinizden haberdar olun.

Tabii ki bir kayıt defteri girişi, bir makine GUID'i oluşturmak için herkes tarafından kolayca değiştirilebilir, fakat bulduğum şey, bunun çoğu durumda normal bir kullanıcının yapamayacağı birçok Windows bileşeninin normal çalışmasını engelleyeceğidir (yine de dikkat et hardcore korsanları için).

71
Fabio Ceconello

Lisans aracımız ile aşağıdaki bileşenleri göz önünde bulunduruyoruz

  • Mac adresi
  • CPU (Seri numarası değil, adımlama ve model gibi gerçek CPU profili)
  • Sistem Sürücüsü Seri Numarası (Birim Etiketi Değil)
  • Bellek
  • CD-ROM modeli ve satıcı
  • Ekran kartı modeli ve satıcı
  • IDE Kontrolörü
  • SCSI denetleyicisi

Ancak, sadece bileşenleri birleştirmek ve bir başarılı/başarısız sistemi oluşturmak yerine, iki makine profilinin ne kadar farklı olduğunu belirlemek için kullanılabilecek bir karşılaştırılabilir parmak izi oluşturuyoruz. Fark derecesi belirtilen toleransın üstünde ise, kullanıcıdan tekrar aktif olmasını isteyin. 

Geçtiğimiz 8 yıl boyunca yüz binlerce son kullanıcı yüklemesiyle kullanıldığını belirledik, bu kombinasyonun sanal makineler ve klonlanmış işletim sistemi kurulumları için bile güvenilir bir benzersiz makine kimliği sağlamak için iyi çalıştığını gördük.

30
Paul Alexander

Sadece işlemcinin UniqueID'sini kullanmaya ne dersiniz?

2
gizmo

"Sadece yanlış yapıyorsun" diyen adam olmaktan nefret ediyorum (her zaman o adamdan nefret ederim;) ama ...

Benzersiz makine için tekrarlanabilir şekilde üretilmesi gerekiyor mu? Sadece tanımlayıcıyı atayabilir misin veya ortak/özel bir anahtar yapabilir misin? Belki değeri oluşturup saklayabilseydiniz, aynı diskteki iki işletim sistemi kurulumundan da buna erişebiliyordunuz?

Muhtemelen bu seçenekleri araştırdınız ve onlar sizin için çalışmıyor, ama değilse, dikkate alınması gereken bir şey.

Bu kullanıcı güven meselesi değilse, sadece MAC adreslerini kullanabilirsiniz.

2
Sam Hoice

Programımda ilk önce Terminal Server'ı kontrol ediyorum ve WTSClientHardwareId'yi kullanıyorum. Aksi takdirde yerel bilgisayarın MAC adresi yeterli olmalıdır.

Sağladığınız özelliklerin listesini gerçekten kullanmak istiyorsanız, muhtemelen işletim sistemine bağlı olduğundan Name ve DriverVersion, Clockspeed vs. Her iki işletim sisteminde de aynı bilgiyi vermeyi deneyin ve hangisi arasında farklılık olduğunu bırakın.

1
AngelBlaZe

Ağ kartındaki MAC adresini kullanmaya dikkat etmelisiniz (varsa). Bunlar genellikle benzersizdir ancak üretilebilirler. Ağ bağdaştırıcısı MAC adresinize dayalı olarak lisans dosyasını oluşturan yazılımı kullandım, bu nedenle bilgisayarlar arasında ayrım yapmanın oldukça güvenilir bir yol olduğu düşünülüyor.

1
Kyle Cronin

Donanıma özel bilgi almak için bir kütüphane mevcuttur: Donanım seri numarası çıkarıcı (CPU, RAM, HDD, BIOS)

1
ariwez

Uygulamalarımdan birinde, etki alanı olmayan bilgisayarsa bilgisayar adını veya etki alanı bilgisayarları için etki alanı makine hesabı SID'sini kullanırım. Mark Russinovich bu blog yazısında bundan bahsediyor, Machine SID :

SID çoğaltmanın bir sorun olacağı son durum, dağıtılmış bir uygulamanın bilgisayarları benzersiz şekilde tanımlamak için makine SID'leri kullanmasıdır. Hiçbir Microsoft yazılımı bunu yapmaz ve makine SID'sini bu şekilde kullanmak, tüm DC'lerin aynı makine SID'sine sahip olması nedeniyle çalışmaz. Benzersiz bilgisayar kimliklerini kullanan yazılım, bilgisayar adlarını veya bilgisayar Etki Alanı SID'lerini (Etki Alanındaki bilgisayar hesaplarının SID'i) kullanır. 

Etki alanı makine hesabı SID’ine LDAP veya System.DirectoryServices yoluyla erişebilirsiniz.

1
cmcginty

Neden ağ kartınızın MAC adresini kullanmıyorsunuz?

0
Brian Matthews

Belki biraz hile yapmak, ancak bir makine Ethernet adaptörünün MAC Adresi, anakart bugünlerde değişmeden nadiren değişiyor.

0
bfabry

Bir çeşit üretici seri numarası veya servis etiketi çekebilir misiniz?

Mağazamız bir Dell mağazası olduğundan, tanımlamak için her makineye özgü servis etiketini kullanıyoruz. BIOS'tan en azından Linux'ta sorgulanabileceğini biliyorum ama Windows'ta nasıl yapıldığını bilmiyorum.

0

Ek bir kısıtlama vardı, .net express kullanıyordum, bu yüzden standart donanım sorgu mekanizmasını kullanamadım. Bu yüzden sorguyu yapmak için güç Shell kullanmaya karar verdim. Kodun tamamı şöyle görünüyor:

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
user2515235