PDA

View Full Version : در رابطه با registry .....



saeedIRHA
جمعه 22 مهر 1384, 16:11 عصر
سلام دوستان !
من می خواستم یک برنامه بنویسم که بتونم باهاش CD -KEY windows رو از Registry بخو انم
و code که براتون اینجا میزارم رو پیدا کردم !
توضیحات کد:
1.میاد Registry->HKEY_LOCAL_MACHINE\Software\microfost\windows nt\DegitalProductID میخونه!
2.DigitalProductID از 164 بایت تشکیل شده Encrypt هم هستش !
3.میاد از بین بایت 52-66 رو بد از یک عملیات Decode میکنه !!!
که در این قسمت به مشکل بر خوردم!!
چون به جای اینکه به من Char مختلف cd-key رو بده فقط BBBB-BBBB-BBBB-BBBB رو بر میگردنه!
من هرچی فک کاردم و گشتم که رهه هلی پیدا کنم نتونستم!
کد برنامه رو اینجا میزرم ببینین شما چیزی به ذهنتون میاد !

************************************************** *******************
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Integer) As Integer
Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Integer, ByVal lpSubKey As String, ByRef phkResult As Integer) As Integer

Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Integer, ByVal lpValueName As String, ByVal lpReserved As Integer, ByRef lpType As Integer, ByVal lpData As String, ByRef lpcbData As Integer) As Integer ' Note that If you declare the lpData parameter as String, you must pass it By Value.
Private Const REG_BINARY As Short = 3
Private Const HKEY_LOCAL_MACHINE As Integer = &H80000002
Private Const ERROR_SUCCESS As Short = 0




Public Function sGetXPCDKey() As String
'Read the value of:
'HKLM\SOFTWARE\MICROSOFT\Windows NT\Curr
' entVersion\DigitalProductId

Dim bDigitalProductID() As Byte
Dim bProductKey() As Byte
Dim ilByte As Integer
Dim lDataLen As Integer
Dim hKey As Integer
'Open the registry key: HKLM\SOFTWARE\MI
' CROSOFT\Windows NT\CurrentVersion


If RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", hKey) = ERROR_SUCCESS Then
lDataLen = 164
ReDim Preserve bDigitalProductID(lDataLen)
'Read the value of DigitalProductID


If RegQueryValueEx(hKey, "DigitalProductId", 0, REG_BINARY, bDigitalProductID(0), lDataLen) = ERROR_SUCCESS Then
'Get the Product Key, 15 bytes long, off
' set by 52 bytes
ReDim Preserve bProductKey(14)


For ilByte = 52 To 66
bProductKey(ilByte - 52) = bDigitalProductID(ilByte)
Next ilByte
Else
'ERROR: Could not read "DigitalProductID
' "
sGetXPCDKey = ""
Exit Function
End If
Else
'ERROR: Could not open "HKLM\SOFTWARE\MI
' CROSOFT\Windows NT\CurrentVersion"
sGetXPCDKey = ""
Exit Function
End If
'Now we are going to 'base24' decode the
' Product Key
Dim bKeyChars(24) As Byte
'Possible characters in the CD Key:
bKeyChars(0) = Asc("B")
bKeyChars(1) = Asc("C")
bKeyChars(2) = Asc("D")
bKeyChars(3) = Asc("F")
bKeyChars(4) = Asc("G")
bKeyChars(5) = Asc("H")
bKeyChars(6) = Asc("J")
bKeyChars(7) = Asc("K")
bKeyChars(8) = Asc("M")
bKeyChars(9) = Asc("P")
bKeyChars(10) = Asc("Q")
bKeyChars(11) = Asc("R")
bKeyChars(12) = Asc("T")
bKeyChars(13) = Asc("V")
bKeyChars(14) = Asc("W")
bKeyChars(15) = Asc("X")
bKeyChars(16) = Asc("Y")
bKeyChars(17) = Asc("2")
bKeyChars(18) = Asc("3")
bKeyChars(19) = Asc("4")
bKeyChars(20) = Asc("6")
bKeyChars(21) = Asc("7")
bKeyChars(22) = Asc("8")
bKeyChars(23) = Asc("9")
Dim nCur As Short
Dim sCDKey As String
Dim ilKeyByte As Integer
Dim ilBit As Integer


For ilByte = 24 To 0 Step -1
'Step through each character in the CD k
' ey
nCur = 0


For ilKeyByte = 14 To 0 Step -1

'Step through each byte in the Product Key

nCur = nCur * 256 Xor bProductKey(ilKeyByte)
bProductKey(ilKeyByte) = Int(nCur / 24)
nCur = nCur Mod 24
Next ilKeyByte
sCDKey = Chr(bKeyChars(nCur)) & sCDKey
If ilByte Mod 5 = 0 And ilByte <> 0 Then sCDKey = "-" & sCDKey
Next ilByte
sGetXPCDKey = sCDKey

End Function

************************************************** ******************
با تشکر سعید