Add partial support (zcid, rtmr, non-functional kms4k) for vista
Co-authored-by: InvoxiPlayGames <22731889+InvoxiPlayGames@users.noreply.github.com>
This commit is contained in:
@ -31,6 +31,7 @@ namespace LibTSforge.Modifiers
|
||||
|
||||
public static void InstallGenPKey(PSVersion version, bool production, Guid actId)
|
||||
{
|
||||
if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008.");
|
||||
if (actId == Guid.Empty) throw new ArgumentException("Activation ID must be specified for generated product key install.");
|
||||
|
||||
PKeyConfig pkc = new PKeyConfig();
|
||||
@ -72,57 +73,57 @@ namespace LibTSforge.Modifiers
|
||||
|
||||
if (pkey.Channel == "Volume:GVLK" && version == PSVersion.Win7) throw new NotSupportedException("Fake GVLK generation is not supported on Windows 7.");
|
||||
|
||||
VariableBag pkb = new VariableBag();
|
||||
pkb.Blocks.AddRange(new CRCBlock[]
|
||||
VariableBag pkb = new VariableBag(version);
|
||||
pkb.Blocks.AddRange(new CRCBlockModern[]
|
||||
{
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.STRING,
|
||||
KeyAsStr = "SppPkeyBindingProductKey",
|
||||
ValueAsStr = pkey.ToString()
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.STRING,
|
||||
KeyAsStr = "SppPkeyBindingMPC",
|
||||
ValueAsStr = pkey.GetMPC()
|
||||
},
|
||||
new CRCBlock {
|
||||
new CRCBlockModern {
|
||||
DataType = CRCBlockType.BINARY,
|
||||
KeyAsStr = "SppPkeyBindingPid2",
|
||||
ValueAsStr = pkey.GetPid2()
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
KeyAsStr = "SppPkeyBindingPid3",
|
||||
Value = pkey.GetPid3()
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
KeyAsStr = "SppPkeyBindingPid4",
|
||||
Value = pkey.GetPid4()
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.STRING,
|
||||
KeyAsStr = "SppPkeyChannelId",
|
||||
ValueAsStr = pkey.Channel
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.STRING,
|
||||
KeyAsStr = "SppPkeyBindingEditionId",
|
||||
ValueAsStr = pkey.Edition
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
KeyAsStr = (version == PSVersion.Win7) ? "SppPkeyShortAuthenticator" : "SppPkeyPhoneActivationData",
|
||||
Value = pkey.GetPhoneData(version)
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
KeyAsStr = "SppPkeyBindingMiscData",
|
||||
@ -140,11 +141,11 @@ namespace LibTSforge.Modifiers
|
||||
SLApi.UninstallAllProductKeys(appId);
|
||||
}
|
||||
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
|
||||
using (IPhysicalStore ps = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore ps = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
using (ITokenStore tks = Utils.GetTokenStore(version))
|
||||
using (ITokenStore tks = SPPUtils.GetTokenStore(version))
|
||||
{
|
||||
Logger.WriteLine("Writing to physical store and token store...");
|
||||
|
||||
@ -195,7 +196,7 @@ namespace LibTSforge.Modifiers
|
||||
Data = pkb.Serialize()
|
||||
});
|
||||
|
||||
string cachePath = Utils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat");
|
||||
string cachePath = SPPUtils.GetTokensPath(version).Replace("tokens.dat", @"cache\cache.dat");
|
||||
if (File.Exists(cachePath)) File.Delete(cachePath);
|
||||
}
|
||||
}
|
||||
|
@ -4,15 +4,16 @@ namespace LibTSforge.Modifiers
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using LibTSforge.PhysicalStore;
|
||||
using LibTSforge.SPP;
|
||||
|
||||
public static class GracePeriodReset
|
||||
{
|
||||
public static void Reset(PSVersion version, bool production)
|
||||
{
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
|
||||
using (IPhysicalStore store = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
string value = "msft:sl/timer";
|
||||
List<PSBlock> blocks = store.FindBlocks(value).ToList();
|
||||
@ -23,6 +24,7 @@ namespace LibTSforge.Modifiers
|
||||
}
|
||||
}
|
||||
|
||||
SPPUtils.RestartSPP(version);
|
||||
Logger.WriteLine("Successfully reset all grace and evaluation period timers.");
|
||||
}
|
||||
}
|
||||
|
@ -7,7 +7,7 @@ namespace LibTSforge.Modifiers
|
||||
|
||||
public static class KMSHostCharge
|
||||
{
|
||||
public static void Charge(PSVersion version, Guid actId, bool production)
|
||||
public static void Charge(PSVersion version, bool production, Guid actId)
|
||||
{
|
||||
if (actId == Guid.Empty)
|
||||
{
|
||||
@ -52,46 +52,46 @@ namespace LibTSforge.Modifiers
|
||||
writer.Write((byte)currClients);
|
||||
byte[] reqCounts = writer.GetBytes();
|
||||
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
|
||||
using (IPhysicalStore store = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
VariableBag kmsCountData = new VariableBag();
|
||||
kmsCountData.Blocks.AddRange(new CRCBlock[]
|
||||
VariableBag kmsCountData = new VariableBag(version);
|
||||
kmsCountData.Blocks.AddRange(new CRCBlockModern[]
|
||||
{
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
KeyAsStr = "SppBindingLicenseData",
|
||||
Value = hwidBlock
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.UINT,
|
||||
Key = new byte[] { },
|
||||
ValueAsInt = (uint)totalClients
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.UINT,
|
||||
Key = new byte[] { },
|
||||
ValueAsInt = 1051200000
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.UINT,
|
||||
Key = new byte[] { },
|
||||
ValueAsInt = (uint)currClients
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
Key = new byte[] { },
|
||||
Value = cmidGuids
|
||||
},
|
||||
new CRCBlock
|
||||
new CRCBlockModern
|
||||
{
|
||||
DataType = CRCBlockType.BINARY,
|
||||
Key = new byte[] { },
|
||||
|
@ -3,14 +3,16 @@ namespace LibTSforge.Modifiers
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using LibTSforge.PhysicalStore;
|
||||
using LibTSforge.SPP;
|
||||
using LibTSforge;
|
||||
|
||||
public static class KeyChangeLockDelete
|
||||
{
|
||||
public static void Delete(PSVersion version, bool production)
|
||||
{
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
using (IPhysicalStore store = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
List<string> values = new List<string>
|
||||
{
|
||||
|
@ -4,16 +4,17 @@ namespace LibTSforge.Modifiers
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using LibTSforge.PhysicalStore;
|
||||
using LibTSforge.SPP;
|
||||
|
||||
public static class RearmReset
|
||||
{
|
||||
public static void Reset(PSVersion version, bool production)
|
||||
{
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
|
||||
using (IPhysicalStore store = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
List<PSBlock> blocks;
|
||||
|
||||
|
@ -3,16 +3,17 @@ namespace LibTSforge.Modifiers
|
||||
using System;
|
||||
using System.Linq;
|
||||
using LibTSforge.PhysicalStore;
|
||||
using LibTSforge.SPP;
|
||||
|
||||
public static class TamperedFlagsDelete
|
||||
{
|
||||
public static void DeleteTamperFlags(PSVersion version, bool production)
|
||||
{
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
|
||||
using (IPhysicalStore store = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
if (version != PSVersion.Win7)
|
||||
{
|
||||
|
@ -8,6 +8,8 @@ namespace LibTSforge.Modifiers
|
||||
{
|
||||
public static void DeleteUniqueId(PSVersion version, bool production, Guid actId)
|
||||
{
|
||||
if (version == PSVersion.Vista) throw new NotSupportedException("This feature is not supported on Windows Vista/Server 2008.");
|
||||
|
||||
Guid appId;
|
||||
|
||||
if (actId == Guid.Empty)
|
||||
@ -28,11 +30,11 @@ namespace LibTSforge.Modifiers
|
||||
string instId = SLApi.GetInstallationID(actId);
|
||||
Guid pkeyId = SLApi.GetInstalledPkeyID(actId);
|
||||
|
||||
Utils.KillSPP();
|
||||
SPPUtils.KillSPP(version);
|
||||
|
||||
Logger.WriteLine("Writing TrustedStore data...");
|
||||
|
||||
using (IPhysicalStore store = Utils.GetStore(version, production))
|
||||
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
|
||||
{
|
||||
string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId);
|
||||
PSBlock keyBlock = store.GetBlock(key, pkeyId.ToString());
|
||||
@ -42,7 +44,7 @@ namespace LibTSforge.Modifiers
|
||||
throw new Exception("No product key found.");
|
||||
}
|
||||
|
||||
VariableBag pkb = new VariableBag(keyBlock.Data);
|
||||
VariableBag pkb = new VariableBag(keyBlock.Data, version);
|
||||
|
||||
pkb.DeleteBlock("SppPkeyUniqueIdToken");
|
||||
|
||||
|
Reference in New Issue
Block a user