GNU/Linux Mint x64 OS İçinden Windows Lisans Anahtarını Okuyan Betik

Programlama ve Script dilleri konusunda bilgi paylaşım alanıdır.
Cevapla
Kullanıcı avatarı
TRWE_2012
Zettabyte1
Zettabyte1
Mesajlar: 15597
Kayıt: 25 Eyl 2013, 13:38
cinsiyet: Erkek
Teşekkür etti: 2708 kez
Teşekkür edildi: 5621 kez

GNU/Linux Mint x64 OS İçinden Windows Lisans Anahtarını Okuyan Betik

Mesaj gönderen TRWE_2012 »

Merhabalar

Söz konusu web sitesinden konularımı tek tek geri çekerken (orjinallerinin birer kopyasını alma olayı) şuna denk geldim.


Buradaki

Kod: Tümünü seç

Public Function sGetWinProductKey()
    Dim objShell, bDigitalProductID, bProductKey()
    Dim bKeyChars(24)
    Dim ilByte, nCur, sCDKey, ilKeyByte

    ReDim Preserve bProductKey(24)

    Set objShell = CreateObject("WScript.Shell")

    ' Windows 10 ve 11 için kayıt defteri yolu
    bDigitalProductID = objShell.RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\DigitalProductId")

    Set objShell = Nothing

    ' Ürün anahtarını çıkarmak için gerekli baytları al
    For ilByte = 52 To 66
        bProductKey(ilByte - 52) = bDigitalProductID(ilByte)
    Next

    ' Anahtar karakterleri
    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")

    ' Anahtar oluşturma
    For ilByte = 24 To 0 Step -1
        nCur = 0
        For ilKeyByte = 14 To 0 Step -1
            nCur = nCur * 256 Xor bProductKey(ilKeyByte)
            bProductKey(ilKeyByte) = Int(nCur / 24)
            nCur = nCur Mod 24
        Next
        sCDKey = Chr(bKeyChars(nCur)) & sCDKey
        If ilByte Mod 5 = 0 And ilByte <> 0 Then sCDKey = "-" & sCDKey
    Next

    sGetWinProductKey = sCDKey
End Function

Public Function Question()
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Dim Ans
    Dim desktopPath

    ' Kullanıcının masaüstü yolunu al
    desktopPath = CreateObject("WScript.Shell").SpecialFolders("Desktop")

    Ans = MsgBox("Yes = Write Windows Product Key to the Desktop and No = Prompt with Product Key", 4)

    If Ans = vbYes Then
        Set oOutFile = objFSO.CreateTextFile(desktopPath & "\Windows_Product_Key.txt")
        oOutFile.WriteLine sGetWinProductKey
        oOutFile.Close
    Else
        WScript.Echo sGetWinProductKey
    End If
End Function

Call Question
Betiğinin GNU/Linux OS versiyonunu oluşturdum.

GNU/Linux Notu – Windows Lisans Anahtarı (UEFI / MSDM)

Modern UEFI tabanlı bilgisayarlarda Windows lisans anahtarı BIOS/UEFI içinde saklanır. Linux’ta bunu görmek için root yetkisi ile /sys/firmware/acpi/tables/MSDM dosyasını okuyabiliriz.

Basit kullanım:

Kod: Tümünü seç

sudo strings /sys/firmware/acpi/tables/MSDM
Eğer key varsa, 5x5 blok formatında (XXXXX-XXXXX-XXXXX-XXXXX-XXXXX) ekranda görünür.
Legacy BIOS sistemlerde veya MSDM tablosu yoksa boş döner.


Daha kullanışlı bir yöntem için küçük bir bash betiği ile:

Lisans anahtarı okunur.
Zenity ile kullanıcıya seçenek sunulur: Ekranda göster veya Masaüstüne kaydet.
Masaüstü yolu Linux Mint’te hem Türkçe hem İngilizce sistemlerde çalışacak şekilde dinamik belirlenir.

Kısaca, Linux üzerinden OEM Windows lisans anahtarını almak için MSDM tablosu → strings → GUI / dosya kaydetme mantığı kullanılır.


KOD İÇERİK ( GetWinProductKey.sh )

Kod: Tümünü seç

#!/bin/bash

# Root kontrolü
if [ "$EUID" -ne 0 ]; then
    zenity --error --text="Bu betik root yetkisi gerektirir.\nLütfen sudo ile çalıştırın."
    exit 1
fi

msdmFile="/sys/firmware/acpi/tables/MSDM"

if [ ! -f "$msdmFile" ]; then
    zenity --error --text="MSDM tablosu bulunamadı."
    exit 1
fi

# Doğru regex (5x5 blok formatı)
productKey=$(strings "$msdmFile" | grep -E "^[A-Z0-9]{5}(-[A-Z0-9]{5}){4}$")

if [ -z "$productKey" ]; then
    zenity --error --text="Windows lisans anahtarı bulunamadı."
    exit 1
fi

# Masaüstü dizini (dinamik)
if [ -d "$HOME/Desktop" ]; then
    desktopPath="$HOME/Desktop"
elif [ -d "$HOME/Masaüstü" ]; then
    desktopPath="$HOME/Masaüstü"
else
    desktopPath="$HOME"
fi

zenity --question \
--title="Windows Lisans Anahtarı" \
--text="Yes = Masaüstüne Kaydet\nNo = Ekranda Göster" \
--ok-label="Yes" --cancel-label="No"

if [ $? -eq 0 ]; then
    outputFile="$desktopPath/Windows_Product_Key.txt"
    echo "$productKey" > "$outputFile"
    zenity --info --text="Lisans anahtarı kaydedildi:\n$outputFile"
else
    zenity --info --text="Windows Lisans Anahtarı:\n$productKey"
fi
Ekran Görüntüleri : (Sistem : GNU/Linux Mint 22.2 LXDE v13.0)
Resim
Resim
Birgün sizlere lazım olabilir...GNU/Linux OS sistem kurtarmada birebirdir.
Kullanıcı avatarı
burak35
Zettabyte4
Zettabyte4
Mesajlar: 18103
Kayıt: 07 Eki 2016, 13:06
cinsiyet: Erkek
Teşekkür etti: 10513 kez
Teşekkür edildi: 12293 kez

Re: GNU/Linux Mint x64 OS İçinden Windows Lisans Anahtarını Okuyan Betik

Mesaj gönderen burak35 »

Vay linuxcu anarşikler vayyy. :)
Cevapla

“Programlama ve Script dilleri” sayfasına dön