লিনাক্স থেকে উইন্ডোজ 7 পণ্য কী পুনরুদ্ধার / ডিক্রিপ্ট করুন


19

আমার হার্ড ড্রাইভটি চলমান অবস্থায় আমি ঘটনাক্রমে সংযোগ বিচ্ছিন্ন করে দিয়েছিলাম এবং এটি আমার উইন্ডোজ 7 ইনস্টলেশনটি ক্ষতিগ্রস্থ করেছে; আমি এখন উইন্ডোজ বুট করতে সম্পূর্ণ অক্ষম। আমি ইনস্টলেশনটি মেরামত করার জন্য এবং মেরামত করার জন্য সমস্ত কিছু চেষ্টা করেছি: উইন্ডোজ স্টার্টআপ মেরামত, chkdsk / r, এসএফসি / স্ক্যানউ, বুট্রিক / পুনর্নির্মাণ বিসিডি ইত্যাদি এবং কোনও ভাগ্য নেই। আমি কেবল একটি নতুন ইনস্টল করতে চাই, তবে আমার সমস্যাটি হ'ল আমার উইন্ডোজ পণ্য কীটি কোথাও লিখিত নেই এবং আমি রেজিস্ট্রি থেকে এটি পুনরুদ্ধার করতে কোনও স্ক্রিপ্ট বা ইউটিলিটি ব্যবহার করতে অক্ষম কারণ আমি উইন্ডোজটিতে বুট করতে পারি না।

উইন্ডোজ 7 পণ্য কীগুলি রেজিস্ট্রি কী এর "ডিজিটালপ্রডাক্ট আইডি" মানটিতে সংরক্ষণ করা, এনক্রিপ্ট করা হয়, মাইক্রোসফ্ট \ উইন্ডোজ এনটি \ কারেন্ট ভার্সন। আমি কোনও উবুন্টু লাইভ সিডি থেকে কেবলমাত্র দূষিত উইন্ডোজ পার্টিশনটি মাউন্ট করতে সক্ষম হয়েছি এবং উইন্ডোজ \ System32 \ কনফিগারেশন OF সফ্টওয়্যার রেজিস্ট্রি হাইভের অনুলিপি করতে পারি, যার মধ্যে কী এবং মান সম্পর্কিত প্রশ্ন রয়েছে, এটি একটি ফ্ল্যাশ ড্রাইভে অনুলিপি করতে সক্ষম হয়েছিল, তবে এই পোঁতাটিকে রিজেডিতে লোড করা হয়েছে একটি কর্মক্ষম উইন্ডোজ ইনস্টলেশন এবং তারপরে স্ক্রিপ্টগুলি বা ইউটিলিটিগুলি বোঝা "ডিজিটালপ্রডাক্ট আইডি" মানটি ডিক্রিপ্ট করার জন্য কেবল হোস্ট উইন্ডোজ ইনস্টলেশনটির পণ্য কীটি ফিরিয়ে দেয়, যতই চেষ্টা করুক না কেন। আমি মাইক্রোসফ্ট সহায়তার সাথে যোগাযোগ করার চেষ্টা করেছি এবং তারা বরং সহায়তা ছাড়াই হয়েছে। কেউ কি আমাকে আরও গাইড করতে সক্ষম হবেন? সম্ভবত যদি লিনাক্স থেকে পণ্য কী পুনরুদ্ধার করার অন্য কোনও উপায় থাকে?

যদি স্ক্রিপ্টিং / ক্রিপ্টোগ্রাফির সাথে আরও পরিচিত কেউ হাত থেকে পণ্য কী ডিক্রিপ্ট করার জন্য ডিক্রিপশন স্ক্রিপ্টটি চেষ্টা করতে এবং অনুসরণ করতে ইচ্ছুক হন তবে আমি আপনাকে রফতানি "ডিজিটালপ্রডাক্ট আইডি" মান, সফটওয়্যার রেজিস্ট্রি হাইভ এবং ডিক্রিপশন স্ক্রিপ্টটি ইমেল করতে পারি।


এটি ঠিক শোনাচ্ছে না। আপনি যদি লাইসেন্স কিনে থাকেন তবে আপনার চাবিটি থাকা উচিত। এখন, অন্যদিকে, আপনি যদি কারও হাতের এলিজ উইন্ডোজ ইমেজের হাত পেতে চান এবং এর কীটি বের করতে চান তবে এটি এই সাইটের মূল বিষয় নয়।
জেসনএক্সএ

আমি লাইসেন্স কিনেছিলাম। আমার কাছে ইনস্টলেশন ডিভিডি আছে তবে এটির সাথে আসা পণ্য কীটি খুঁজে পাচ্ছি না। তবে আমি মনে করি যে আমি এখানে একটি সমাধান খুঁজে পেয়েছি: dagondesign.com/articles/windows-xp-product-key-recovery/…
সূর্যিয়াত

হ্যাঁ, এটি কাজ করে বলে মনে হচ্ছে না। আমার কীটি পুনরুত্পাদন করতে আমি যে পদ্ধতিটি পরিচালনা করেছি তা ব্যবহার করে।
জেসনএক্সএ

যদি আপনার ফার্মওয়্যারটি ইউইএফআই-ভিত্তিক হয় তবে লাইসেন্স কীটি আসলে এসিপিআই এমএসডিএম টেবিলে সঞ্চিত থাকে তাই এটি পুনরায় চালু করতে পারে। যদি তা হয়, কিভাবে এটি পুনরুদ্ধার করবেন তার বিশদ জানতে ব্লগ.এফএমপুরফি.কম দেখুন।
fpmurphy

উত্তর:


31

বলা হয় লিনাক্সের জন্য একটি দুর্দান্ত সরঞ্জাম উপলব্ধ chntpw। আপনি এটি মাধ্যমে ডেবিয়ান / উবুন্টুতে সহজেই পেতে পারেন:

sudo apt install chntpw

সম্পর্কিত রেজিস্ট্রি ফাইলটি সন্ধান করতে উইন্ডোজ ডিস্কটি মাউন্ট করুন এবং এটিকে এভাবে খুলুন:

chntpw -e /path/to/windisk/Windows/System32/config/software

এখন ডিকোডডটি DigitalProductIdএই আদেশটি প্রবেশ করানোর জন্য:

dpi \Microsoft\Windows NT\CurrentVersion\DigitalProductId

5
সম্পর্কিত রেজিস্ট্রি ফাইলের পথটি / পাথ / টু / উইন্ডিস্ক / উইন্ডোজ / সিস্টেম 32 / কনফিগার / রেগব্যাক / সফটওয়্যার
মোহাম্মদ ই এল

2
এটি দুর্দান্ত উত্তর, জিজ্ঞাসা করুন উবুন্টু Askubuntu.com/a/953130/75060
মার্ক কি

এই জন্য আপনাকে ধন্যবাদ. ফোল্ডার এবং ফাইলের নামগুলি পরীক্ষা করার জন্য দয়া করে একটি নোট তৈরি করুন make আমার ক্ষেত্রে, SOFTWAREফাইলের নামের জন্য আমাকে বড় হাতের অক্ষর ব্যবহার করতে হয়েছিল।
ধানের ল্যান্ডাউ

আপনার যদি সিস্টেম 32 ফোল্ডারটি পড়তে সমস্যা হয় তবে একটি অনুলিপি তৈরি করার চেষ্টা করুন এবং chntpw এ অনুলিপিটির পথ সরবরাহ করার চেষ্টা করুন।
মার্কাস ভন ব্রডি

2

যারা কোডিং করতে একটু লজ্জা পান না তাদের জন্য।

আমি প্রায় 10 বছর আগে একটি অ্যালগরিদম পেয়েছি এবং এটি সি # তে প্রয়োগ করেছি (নীচে দেখুন)


আপনি যদি এটি উইন্ডোতে চালাতে চান

এটিকে পাওয়ারশেল স্ক্রিপ্টে রূপান্তর করতে আমি স্বাধীনতা নিয়েছি:

$dpid = Get-ItemProperty -Path "Registry::HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name "DigitalProductId"

# Get the range we are interested in
$id = $dpid.DigitalProductId[52..(52+14)]

# Character table
$chars = "BCDFGHJKMPQRTVWXY2346789"

# Variable for the final product key
$pkey = ""

# Calculate the product key
for ($i=0; $i -le 24; $i++) {
    $c = 0

    for($j=14; $j -ge 0; $j--) {
        $c = ($c -shl 8) -bxor $id[$j]

        $id[$j] = [Math]::Floor($c / 24) -band 255

        $c = $c % 24
    }
    $pkey = $chars[$c] + $pkey
}
# Insert some dashes
for($i = 4; $i -gt 0; $i--) {
    $pkey = $pkey.Insert($i * 5, "-")
}
$pkey

এটি চালান এবং আপনি আপনার পণ্য কী পান। (সুতরাং আপনার জন্য কোনও কোডিং নেই)


আসল পোস্ট

সুতরাং এটি হ'ল আসল সি # কোডটি আমি খনন করেছিলাম এবং মন্তব্য করেছি।

public static string ConvertDigitalProductID(string regPath, string searchKey = "DigitalProductID") {
    // Open the sub key i.E.: "Software\Microsoft\Windows NT\CurrentVersion"
    var regkey = Registry.LocalMachine.OpenSubKey(regPath, false);
    // Retreive the value of "DigitalProductId"
    var dpid = (byte[])regkey.GetValue(searchKey);
    // Prepare an array for the relevant parts
    var idpart = new byte[15];

    // Copy the relevant parts of the array
    Array.Copy(dpid, 52, idpart, 0, 15);

    // Prepare the chars that will make up the key
    var charStore = "BCDFGHJKMPQRTVWXY2346789";

    // Prepare a string for the result
    string productkey = "";

    // We need 24 iterations (one for each character)
    for(int i = 0; i < 25; i++) {

        int c = 0;
        // Go through each of the 15 bytes of our dpid
        for(int j = 14; j >= 0; j--) {
            // Shift the current byte to the left and xor in the next byte
            c = (c << 8) ^ idpart[j];

            // Leave the result of the division in the current position
            idpart[j] = (byte)(c / 24);

            // Take the rest of the division forward to the next round
            c %= 24;
        }
        // After each round, add a character from the charStore to our key
        productkey = charStore[c] + productkey;
    }

    // Insert the dashes
    for(int i = 4; i > 0; i--) {
        productkey = productkey.Insert(i * 5, "-");
    }

    return productkey;
}

আপনাকে এটি Software\Microsoft\Windows NT\CurrentVersionএকটি কী হিসাবে পাস করতে হবে, এটি এটি খুঁজে পাবেDigitalProductId

সেই সময় এমএস অফিস পণ্যগুলি একই অ্যালগরিদম ব্যবহার করেছিল, সুতরাং সম্পর্কিত রেজিস্ট্রি কী সহ ফাংশন সরবরাহ করে এটি সেই পণ্য কীগুলিও গণনা করতে পারে।

আপনি অবশ্যই ফাংশনটি রিফ্যাক্টর করতে পারেন যাতে এটি একটি বাইট অ্যারে ইনপুট হিসাবে নেয়।

আজকের হিসাবে। আমি এটি কেবল আমার উইন্ডোজ 10 মেশিনে পরীক্ষা করেছি এবং এটি এখনও কার্যকর।


এটি একটি ভাল উত্তর তবে প্রশ্নটি খুব পুরানো এবং অনেকগুলি মতামত গ্রহণ করতে পারে না। আপনি সদস্য হিসাবে, দয়া করে আমাদের বর্তমান জিজ্ঞাসা উবুন্টু পোস্ট জিজ্ঞাসাবাদ প্রশ্নে
মার্ক কি

ধন্যবাদ. তবে আমি বিশ্বাস করি এটি সেখানে বিষয়বস্তু থেকে দূরে থাকবে। আমি একটি সিডো কোড বাস্তবায়ন একসাথে চড় মারতে পারি। এবং এই পোস্টটিকে প্রকৃত বাস্তবায়ন হিসাবে উল্লেখ করুন।
মিঃপলচ

কোনও সমস্যা নেই, আপনি যা ভাল মনে করেন তা করুন
মার্ক কির্বি

2

এখানে অন্য উত্তরের পাইথন বন্দরটি দেওয়া হয়েছে (উইন্ডোজ ৮.১ এর জন্য অভিযোজিত)। এই ওভারের সুবিধাটি chntpwহ'ল এটি কেবল পঠনযোগ্য অবস্থায় চালিত ড্রাইভের সাথেও কাজ করবে।

প্রয়োজনীয়তা:

pip install python-registry

কোড:

#!/usr/bin/env python
import sys
from Registry import Registry
reg = Registry.Registry("/path/to/drive/Windows/System32/config/RegBack/SOFTWARE")
# Uncomment for registry location for Windows 7 and below:
#reg = Registry.Registry("/path/to/drive/Windows/system32/config/software")
key = reg.open("Microsoft\Windows NT\CurrentVersion")
did = bytearray([v.value() for v in key.values() if v.name() == "DigitalProductId"][0])
idpart = did[52:52+15]
charStore = "BCDFGHJKMPQRTVWXY2346789";
productkey = "";
for i in range(25):
  c = 0
  for j in range(14, -1, -1):
    c = (c << 8) ^ idpart[j]
    idpart[j] = c // 24
    c %= 24
  productkey = charStore[c] + productkey
print('-'.join([productkey[i * 5:i * 5 + 5] for i in range(5)]))

অভ্যন্তরীণ লুপটি একটি পুনরাবৃত্তি খুব সংক্ষিপ্ত ছিল। এটি এখন কাজ করা উচিত।
লেনার হোয়েট

0

এখানে আমার বাশ বাস্তবায়ন। আমি এটিকে get_windows_key.sh বলি ক্লোনজিলা থেকে ভাল কাজ করে। আমি এখানে এটি প্রথমে পোস্ট করেছি https://sourceforge.net/p/clonezilla/discussion/Open_discussion/thread/979f335385/

#!/bin/bash
# written by Jeff Sadowski
# credit
###################################################
# Pavel Hruška, Scott Skahht, and Philip M for writting
# https://github.com/mrpeardotnet/WinProdKeyFinder/blob/master/WinProdKeyFind/KeyDecoder.cs
# that I got my conversion code from
#
# I used the comments on the sudo code from
# /ubuntu/953126/can-i-recover-my-windows-product-key- from-ubuntu
# by MrPaulch
#
# and the creator of chntpw
#
# Petter Nordahl-Hagen
# without which I would not be able to get the key in linux
#
# also the creators of ntfs-3g, linux and bash

parted -l 2>/dev/null |grep -e ntfs -e fat -e Disk|grep -v Flags
#get the first mac address that isn't a loopback address
# loopback will have all zeros
MAC=$(cat /sys/class/net/*/address|grep -v 00:00:00:00:00:00|head -n 1|sed "s/:/-/g")
if [ "$1" = "" ];then
 echo "mount the Windows share then give this script the path where you mounted it"
 exit
fi
cd $1
#
# This way will work no matter what the capitalization is
next=$(find ./ -maxdepth 1 -iname windows);cd ${next}
next=$(find ./ -maxdepth 1 -iname system32);cd ${next}
next=$(find ./ -maxdepth 1 -iname config);cd ${next}
file=$(find ./ -maxdepth 1 -iname software)
#echo $(pwd)${file:1}
#Get the necissary keys
#get the version key
VERSION=$((16#$(echo -e "cat \\Microsoft\\Windows NT\\CurrentVersion\\CurrentMajorVersionNumber\nq\n" | chntpw -e ${file}|grep "^0x"|cut -dx -f2)))
hexPid_csv_full=$(echo $(echo -e "hex \\Microsoft\\Windows NT\\CurrentVersion\\DigitalProductId\nq\n" | chntpw -e ${file}|grep "^:"|cut -b 9-55)|sed 's/ /,/g' | tr '[:u>
# get the subset 53 to 68 of the registry entry
hexPid_csv=$(echo $(echo -e "hex \\Microsoft\\Windows NT\\CurrentVersion\\DigitalProductId\nq\n" | chntpw -e ${file}|grep "^:"|cut -b 9-55)|sed 's/ /,/g' | tr '[:upper:>
echo "${hexPid_csv_full}" > /custom/DigitalProductId_${MAC}.txt
#formatted output
spread()
{
 key=$1
 echo ${key:0:5}-${key:5:5}-${key:10:5}-${key:15:5}-${key:20:5}
}
# almost a direct conversion of c# code from
# https://github.com/mrpeardotnet/WinProdKeyFinder/blob/master/WinProdKeyFind/KeyDecoder.cs
# however most of this looks similar to sudo code I found
# /ubuntu/953126/can-i-recover-my-windows-product-key-from-ubuntu
DecodeProductKey()
{
digits=(B C D F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9)
for j in {0..15};do
#Populate the Pid array from the values found in the registry
 Pid[$j]=$((16#$(echo ${hexPid_csv}|cut -d, -f $(($j+1)))))
done
if [ "$1" = "8+" ];then
# modifications needed for getting the windows 8+ key
 isWin8=$(($((${Pid[14]}/6))&1))
 Pid[14]=$(( $(( ${Pid[14]}&247 )) | $(( $(( ${isWin8} & 2 )) * 4 )) ))
fi
key=""
last=0
for i in {24..0};do
 current=0
 for j in {14..0};do
  # Shift the current contents of c to the left by 1 byte 
  # and add it with the next byte of our id
  current=$((${current}*256))
  current=$((${Pid[$j]} + current))
  # Put the result of the divison back into the array
  Pid[$j]=$((${current}/24))
  # Calculate remainder of c
  current=$((${current}%24))
  last=${current}
 done
 # Take character at position c and prepend it to the ProductKey
 key="${digits[${current}]}${key}"
done
if [ "$1" = "8+" ];then
# another modification needed for a windows 8+ key
 key="${key:1:${last}}N${key:$((${last}+1)):24}"
 echo -n "Windows 8+ key: "
else
 echo -n "Windows 7- key: "
fi
spread "${key}"
}
if [ "$VERSION" -gt "7" ];then
 DecodeProductKey 8+
else
 DecodeProductKey
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.