วันพุธที่ 22 กรกฎาคม พ.ศ. 2558

การดู Windows Product Key ในเครื่องตัวเอง โดยใช้ VBscript

อย่างแรก ตรวจสอบด้วย Script
slmgr.vbs /dli
หรือ
slmgr.vbs /dlv

เพื่อเช็ครหัส 4 ตัวท้ายของคุณเป็นรหัสอะไร ตรงหัวข้อ Partial Product Key

แต่ทั้งนี้ คำสั่งนี้ เราจะไม่ได้ รหัสทั้งหมด
เราต้องสร้าง VBscript ขึ้นมาเอง ซึ่งจากที่ค้นพบ และเทสกับ Windows 7 และ 8.1 จะมีอยู่สอบแบบ ซึ่งอาจจะต้องลองว่าแบบไหน รหัส 4 ตัวท้าย ตรงกับที่เราเช็คกับ slmgr ครับ

วิธีการคือ Copy code ไปใส่ใน Text file แล้ว save as เป็นนามสกุล .vbs ก็สามารถดับเบิลคลิกเพื่อดูได้เลยครับ

อันแรก อันนี้ ผมเทสกับ Windows 8.1 Retail ตรงคับ แต่กับ Windows 7 ไม่ตรง
   
Option Explicit



Dim objshell,path,DigitalID, Result

Set objshell = CreateObject("WScript.Shell")

'Set registry key path

Path = "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\"

'Registry key value

DigitalID = objshell.RegRead(Path & "DigitalProductId")

Dim ProductName,ProductID,ProductKey,ProductData

'Get ProductName, ProductID, ProductKey

ProductName = "Product Name: " & objshell.RegRead(Path & "ProductName")

ProductID = "Product ID: " & objshell.RegRead(Path & "ProductID")

ProductKey = "Installed Key: " & ConvertToKey(DigitalID)

ProductData = ProductName  & vbNewLine & ProductID  & vbNewLine & ProductKey

'Show messbox if save to a file

If vbYes = MsgBox(ProductData  & vblf & vblf & "Save to a file?", vbYesNo + vbQuestion, "BackUp Windows Key Information") then

   Save ProductData

End If







'Convert binary to chars

Function ConvertToKey(Key)

    Const KeyOffset = 52

    Dim isWin8, Maps, i, j, Current, KeyOutput, Last, keypart1, insert

    'Check if OS is Windows 8

    isWin8 = (Key(66) \ 6) And 1

    Key(66) = (Key(66) And &HF7) Or ((isWin8 And 2) * 4)

    i = 24

    Maps = "BCDFGHJKMPQRTVWXY2346789"

    Do

        Current= 0

        j = 14

        Do

           Current = Current* 256

           Current = Key(j + KeyOffset) + Current

           Key(j + KeyOffset) = (Current \ 24)

           Current=Current Mod 24

            j = j -1

        Loop While j >= 0

        i = i -1

        KeyOutput = Mid(Maps,Current+ 1, 1) & KeyOutput

        Last = Current

    Loop While i >= 0

    keypart1 = Mid(KeyOutput, 2, Last)

    insert = "N"

    KeyOutput = Replace(KeyOutput, keypart1, keypart1 & insert, 2, 1, 0)

    If Last = 0 Then KeyOutput = insert & KeyOutput

    ConvertToKey = Mid(KeyOutput, 1, 5) & "-" & Mid(KeyOutput, 6, 5) & "-" & Mid(KeyOutput, 11, 5) & "-" & Mid(KeyOutput, 16, 5) & "-" & Mid(KeyOutput, 21, 5)

  

  

End Function

'Save data to a file

Function Save(Data)

    Dim fso, fName, txt,objshell,UserName

    Set objshell = CreateObject("wscript.shell")

    'Get current user name

    UserName = objshell.ExpandEnvironmentStrings("%UserName%")

    'Create a text file on desktop

    fName = "C:\Users\" & UserName & "\Desktop\WindowsKeyInfo.txt"

    Set fso = CreateObject("Scripting.FileSystemObject")

    Set txt = fso.CreateTextFile(fName)

    txt.Writeline Data

    txt.Close

End Function


ของ Windows 7 ผมใช้อันนี้ ตรงคับ แต่จะใช้กับ Windows 8.1 ไม่ตรง
Set WshShell = CreateObject("WScript.Shell")
MsgBox ConvertToKey(WshShell.RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId"))
Function ConvertToKey(Key)
Const KeyOffset = 52
i = 28
Chars = "BCDFGHJKMPQRTVWXY2346789"
Do
Cur = 0
x = 14
Do
Cur = Cur * 256
Cur = Key(x + KeyOffset) + Cur
Key(x + KeyOffset) = (Cur \ 24) And 255
Cur = Cur Mod 24
x = x -1
Loop While x >= 0
i = i -1
KeyOutput = Mid(Chars, Cur + 1, 1) & KeyOutput
If (((29 - i) Mod 6) = 0) And (i <> -1) Then
i = i -1
KeyOutput = "-" & KeyOutput
End If
Loop While i >= 0
ConvertToKey = KeyOutput
End Function

ลองดูครับ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น