PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [VB.NET] Windows Key auslesen 64Bit Problem



hackerking
05.08.2009, 13:48
Jo Hey Leute...
Hab ein kleines Problem mit dem Windows Key.
Also ich lese ihn so aus:


Public Function WindowsProductKey() As String
Dim RegKey As RegistryKey = _
Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion", False)
Dim bytDPID() As Byte = RegKey.GetValue("DigitalProductID")
Dim bytKey(14) As Byte
Array.Copy(bytDPID, 52, bytKey, 0, 15)
Dim strChar As String = "BCDFGHJKMPQRTVWXY2346789"
Dim strKey As String = ""
For j As Integer = 0 To 24
Dim nCur As Short = 0
For i As Integer = 14 To 0 Step -1
nCur = CShort(nCur * 256 Xor bytKey(i))
bytKey(i) = CByte(Int(nCur / 24))
nCur = CShort(nCur Mod 24)
Next
strKey = strChar.Substring(nCur, 1) & strKey
Next
For i As Integer = 4 To 1 Step -1
strKey = strKey.Insert(i * 5, "-")
Next
RegKey.Close()
Return strKey
End Function

Das klappt auch perfekt, jedoch nur wenn die erstellte Anwendung in 64Bit läuft. Also nicht im Virtelluellen 32 Bit Mode...
Wenn ich die Exe als 32 Bit erstelle klappt auch alles, nur liefert die Variable bytDPID() Nothing zurück. Aber als 64Bit anwendung funktioniert es perfket.

Was ist da der unterschied?

Variable X
05.08.2009, 13:51
Das problem hatte ich auch mal mit Delphi

Das liegt daran, das Registry daten in 64bit teilweise wo anderst gespeichert werden als bei 32bit systemen

Du musst quasi schauen wo er in einem 32 bit system gespeichert wird.

Und dann würd ich einfach beide auslesen lassen und schauen welcher ein ergebnis beinhaltet und den dann nehmen ^^

Aber wo das was du auslesen willst in nem 32 bit system ist musst du selebr rausfinden google hilft aber ebstimmt da öfters solche sachen auftreten ;)


Edit:\ Ich guck grad selber mal ob das stimmt was ich heir grad gesagt habe xD ^^


Edit2:\ Hab jetzt nichts gefunden scheint anscheinend hier nicht ganz zu stimmen :/

sunny-boy3
05.08.2009, 14:21
Mach doch einfach eine catsh o as exeption variable wen der eine ein error gibt dan wird der andere ausgelesen

das sieht an so aus :

'deine 64 bit variable:

Public Function WindowsProductKey64bit() As String
Try
Dim RegKey As RegistryKey = _
Registry.LocalMachine.OpenSubKey("Software\Microsoft\Windows NT\CurrentVersion", False)
Dim bytDPID() As Byte = RegKey.GetValue("DigitalProductID")
Dim bytKey(14) As Byte
Array.Copy(bytDPID, 52, bytKey, 0, 15)
Dim strChar As String = "BCDFGHJKMPQRTVWXY2346789"
Dim strKey As String = ""
For j As Integer = 0 To 24
Dim nCur As Short = 0
For i As Integer = 14 To 0 Step -1
nCur = CShort(nCur * 256 Xor bytKey(i))
bytKey(i) = CByte(Int(nCur / 24))
nCur = CShort(nCur Mod 24)
Next
strKey = strChar.Substring(nCur, 1) & strKey
Next
For i As Integer = 4 To 1 Step -1
strKey = strKey.Insert(i * 5, "-")
Next
RegKey.Close()
Return strKey
End Function
catsh oAs exeption
'deine32bit variable
call 32bit

Private Sub 32bit
blablabla
End Sub

hackerking
05.08.2009, 14:27
Ja ok aber wo liegt denn der andere Key oO?

sunny-boy3
05.08.2009, 14:32
Ja ok aber wo liegt denn der andere Key oO?

Den 64 bit haste doch oder nicht ????

Den 32 bit schlüßel auszulesen ist doch nicht das problem das bekommste auf jeder source seite spitz


Hier ein link für den 32 bit schlüßel
http://www.visual-basic5.de/vbclassic/dotnet/windowsxpproductkey.htm

die source funktioniert wunderbar um den key bei der 32 bit version auszulesen deine variable klappt für die 64 also alles palettie änder das was du nicht brauchst und setz es dan in der private sub 32bit

hackerking
05.08.2009, 16:11
Das ist genau der gleiche Path -.-
"Software\Microsoft\Windows NT\CurrentVersion"

Puiscel
12.08.2009, 13:12
es ist der gleiche Pfad? geht es denn den 32bit auszulesen mit der source?

hackerking
12.08.2009, 13:49
mein problem lag an falschen CPU-Build Einstellugnen bei Visual Studio...