Seite 1 von 1

(Win32) Windows XP CD Key anzeigen

Verfasst: 07.12.2004 16:44
von nco2k
ich bin im englischen forum, auf folgenden code gestossen, welcher es ermöglicht die seriennummer von windows xp anzeigen zu lassen.

ist bestimmt für einige von uns hier interessant. :wink:

Code: Alles auswählen

;**************************************
; Name: View Windows XP CD Key
; Description:Function: sGetXPCDKey() wi
;     ll Return the CD Key For Windows XP in t
;     he format XXXXX-XXXXX-XXXXX-XXXXX-XXXXX.
;
; By: Snytax
;
; Inputs:Nothing.
;
; Returns:Your Windows XP CD Key.
;
;This code is copyrighted And has' limited warranties.Please see http://w
;     ww.Planet-Source-Code.com/vb/scripts/Sho
;     wCode.asp?txtCodeId=57164&lngWId=1'For details.'**************************************
;
;sGetXPCDKey() -
;Returns the Windows XP CD Key If succes
;     sful.
;Returns nothing upon failure.

Procedure.s sGetXPCDKey()

  ;Read the value of:
  ;HKLM\SOFTWARE\MICROSOFT\Windows NT\Curr
  ;     entVersion\DigitalProductId
  *bDigitalProductID = AllocateMemory(164)
  *bProductKey.b = AllocateMemory(15)
  ilByte.l
  lDataLen.l
  hKey.l
  ;Open the registry key: HKLM\SOFTWARE\MI
  ;     CROSOFT\Windows NT\CurrentVersion
  If RegOpenKey_(#HKEY_LOCAL_MACHINE, "SOFTWARE\MICROSOFT\Windows NT\CurrentVersion", @hKey) = #ERROR_SUCCESS
    lDataLen = 164
    ;ReDim Preserve bDigitalProductID(lDataLen)
    ;Read the value of DigitalProductID

    If RegQueryValueEx_(hKey, "DigitalProductId", 0, "REG_BINARY", *bDigitalProductID, @lDataLen) = #ERROR_SUCCESS
      ;Get the Product Key, 15 bytes long, off
      ;     set by 52 bytes

      For ilByte = 52 To 66
        Byte.l = PeekB(*bDigitalProductID + ilByte) & 255
        PokeB(*bProductKey + ilByte - 52, Byte)
      Next ilByte
      RegCloseKey_(hKey)
    Else
      ;ERROR: Could not Read "DigitalProductID
      RegCloseKey_(hKey)
      ProcedureReturn ""
    EndIf
  Else
    ;ERROR: Could not open "HKLM\SOFTWARE\MI
    ;     CROSOFT\Windows NT\CurrentVersion"
    ProcedureReturn ""
  EndIf
  ;Now we are going To 'base24' decode the
  ;     Product Key
  Dim bKeyChars.l(23)
  ;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")
  nCur.l
  sCDKey.s
  ilKeyByte.l
  ilByte.l
  Byte.l
  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 K
      ;     ey
      Byte = PeekB(*bProductKey + ilKeyByte) & 255
      nCur = ((nCur & 255) * 256) ! Byte
      PokeB(*bProductKey + ilKeyByte, (Int(nCur / 24)))
      nCur = nCur % 24
    Next ilKeyByte
    sCDKey = Chr(bKeyChars(nCur)) + sCDKey
    If ilByte % 5 = 0 And ilByte <> 0
      sCDKey = "-" + sCDKey
    EndIf
  Next ilByte
  ProcedureReturn sCDKey

EndProcedure


Debug sGetXPCDKey()
End
der ursprüngliche VB code stammt von Snytax und wurde von HeX0R für PB übersetzt.

c ya,
nco2k