Minor fixups

This commit is contained in:
Lyssa 2025-04-07 19:19:24 +04:00
parent 3f1c878318
commit 0c8b1efaa9
25 changed files with 168 additions and 194 deletions

View File

@ -1,8 +1,8 @@
namespace LibTSforge.Activators
{
using System;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public static class AVMA4k
{
@ -42,24 +42,20 @@ namespace LibTSforge.Activators
{
string key = string.Format("SPPSVC\\{0}\\{1}", appId, actId);
ulong unknown = 0;
ulong time1;
ulong crcBindTime = (ulong)DateTime.UtcNow.ToFileTime();
ulong timerTime;
ulong expiry = Constants.TimerMax;
long creationTime = BitConverter.ToInt64(store.GetBlock("__##USERSEP##\\$$_RESERVED_$$\\NAMESPACE__", "__##USERSEP-RESERVED##__$$GLOBAL-CREATION-TIME$$").Data, 0);
long tickCount = BitConverter.ToInt64(store.GetBlock("__##USERSEP##\\$$_RESERVED_$$\\NAMESPACE__", "__##USERSEP-RESERVED##__$$GLOBAL-TICKCOUNT-UPTIME$$").Data, 0);
long deltaTime = BitConverter.ToInt64(store.GetBlock(key, "__##USERSEP-RESERVED##__$$UP-TIME-DELTA$$").Data, 0);
time1 = (ulong)(creationTime + tickCount + deltaTime);
timerTime = crcBindTime / 10000;
const ulong unknown = 0;
ulong time1 = (ulong)(creationTime + tickCount + deltaTime);
ulong crcBindTime = (ulong)DateTime.UtcNow.ToFileTime();
ulong timerTime = crcBindTime / 10000;
ulong expiry = Constants.TimerMax;
expiry /= 10000;
VariableBag avmaBinding = new VariableBag(version);
avmaBinding.Blocks.AddRange(new CRCBlockModern[]
avmaBinding.Blocks.AddRange(new[]
{
new CRCBlockModern
{
@ -97,7 +93,7 @@ namespace LibTSforge.Activators
store.DeleteBlock(key, storeVal);
store.DeleteBlock(key, timerVal);
store.AddBlocks(new PSBlock[]
store.AddBlocks(new[]
{
new PSBlock
{

View File

@ -2,8 +2,8 @@ namespace LibTSforge.Activators
{
using System;
using System.IO;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public class KMS4k
{
@ -78,7 +78,7 @@ namespace LibTSforge.Activators
writer.Write(Constants.UniversalHWIDBlock);
byte[] kmsData = writer.GetBytes();
store.AddBlocks(new PSBlock[]
store.AddBlocks(new[]
{
new PSBlock
{
@ -121,7 +121,7 @@ namespace LibTSforge.Activators
VariableBag kmsBinding = new VariableBag(version);
kmsBinding.Blocks.AddRange(new CRCBlockModern[]
kmsBinding.Blocks.AddRange(new[]
{
new CRCBlockModern
{
@ -145,7 +145,7 @@ namespace LibTSforge.Activators
if (version == PSVersion.WinModern)
{
kmsBinding.Blocks.AddRange(new CRCBlockModern[]
kmsBinding.Blocks.AddRange(new[]
{
new CRCBlockModern
{
@ -178,7 +178,7 @@ namespace LibTSforge.Activators
store.DeleteBlock(key, storeVal);
store.DeleteBlock(key, timerVal);
store.AddBlocks(new PSBlock[]
store.AddBlocks(new[]
{
new PSBlock
{

View File

@ -3,14 +3,13 @@ namespace LibTSforge.Activators
using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
using LibTSforge.Crypto;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using Crypto;
using PhysicalStore;
using SPP;
public static class ZeroCID
{
public static void Deposit(Guid actId, string instId)
private static void Deposit(Guid actId, string instId)
{
uint status = SLApi.DepositConfirmationID(actId, instId, Constants.ZeroCID);
Logger.WriteLine(string.Format("Depositing fake CID status {0:X}", status));
@ -98,7 +97,7 @@ namespace LibTSforge.Activators
string uniqueId = Utils.DecodeString(pkeyData.Skip(0x120).Take(0x80).ToArray());
string extPid = Utils.DecodeString(pkeyData.Skip(0x1A0).Take(0x80).ToArray());
uint group = 0;
uint group;
uint.TryParse(extPid.Split('-')[1], out group);
if (group == 0)
@ -154,7 +153,7 @@ namespace LibTSforge.Activators
store.DeleteBlock(key, hwidBlockName);
store.DeleteBlock(key, pkeyInfoName);
store.AddBlocks(new PSBlock[] {
store.AddBlocks(new[] {
new PSBlock
{
Type = BlockType.NAMED,

View File

@ -18,31 +18,31 @@ namespace LibTSforge.Crypto
if (CryptoUtils.RSAVerifySignature(rsaKey, encAesKey, aesKeySig))
{
byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey);
byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey);
byte[] hmacKey = decData.Take(0x10).ToArray(); // SHA-1 salt on Vista
byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); // SHA-1 hash on Vista
byte[] psData = decData.Skip(0x28).ToArray();
if (version != PSVersion.Vista)
{
if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig))
{
throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt.");
}
}
else
{
if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig))
{
throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt.");
}
}
return psData;
throw new Exception("Failed to decrypt physical store.");
}
throw new Exception("Failed to decrypt physical store.");
byte[] aesKey = CryptoUtils.RSADecrypt(rsaKey, encAesKey);
byte[] decData = CryptoUtils.AESDecrypt(br.ReadBytes((int)br.BaseStream.Length - 0x110), aesKey);
byte[] hmacKey = decData.Take(0x10).ToArray(); // SHA-1 salt on Vista
byte[] hmacSig = decData.Skip(0x10).Take(0x14).ToArray(); // SHA-1 hash on Vista
byte[] psData = decData.Skip(0x28).ToArray();
if (version != PSVersion.Vista)
{
if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig))
{
throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt.");
}
}
else
{
if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig))
{
throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt.");
}
}
return psData;
}
public static byte[] EncryptPhysicalStore(byte[] data, bool production, PSVersion version)
@ -65,7 +65,7 @@ namespace LibTSforge.Crypto
byte[] aesKeySig = CryptoUtils.RSASign(rsaKey, encAesKey);
byte[] hmacSig = version != PSVersion.Vista ? CryptoUtils.HMACSign(hmacKey, data) : CryptoUtils.SaltSHASum(hmacKey, data);
byte[] decData = new byte[] { };
byte[] decData = { };
decData = decData.Concat(hmacKey).Concat(hmacSig).Concat(BitConverter.GetBytes(0)).Concat(data).ToArray();
byte[] encData = CryptoUtils.AESEncrypt(decData, aesKey);

View File

@ -3,9 +3,9 @@ namespace LibTSforge.Modifiers
using System;
using System.IO;
using Microsoft.Win32;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using LibTSforge.TokenStore;
using PhysicalStore;
using SPP;
using TokenStore;
public static class GenPKeyInstall
{
@ -58,7 +58,7 @@ namespace LibTSforge.Modifiers
if (pkey.Algorithm == PKeyAlgorithm.PKEY2009)
{
uint status = SLApi.InstallProductKey(pkey);
Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey.ToString(), status));
Logger.WriteLine(string.Format("Installing generated product key {0} status {1:X}", pkey, status));
if ((int)status < 0)
{
@ -74,7 +74,7 @@ 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(version);
pkb.Blocks.AddRange(new CRCBlockModern[]
pkb.Blocks.AddRange(new[]
{
new CRCBlockModern
{
@ -169,7 +169,7 @@ namespace LibTSforge.Modifiers
uriMap.Data[pkeyId] = pkey.GetAlgoUri();
tks.SetEntry(uriMapName, "xml", uriMap.Serialize());
string skuMetaName = actId.ToString() + metSuffix;
string skuMetaName = actId + metSuffix;
TokenMeta skuMeta = tks.GetMetaEntry(skuMetaName);
foreach (string k in skuMeta.Data.Keys)

View File

@ -2,8 +2,8 @@ namespace LibTSforge.Modifiers
{
using System.Collections.Generic;
using System.Linq;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public static class GracePeriodReset
{

View File

@ -2,8 +2,8 @@ namespace LibTSforge.Modifiers
{
using System;
using System.IO;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public static class KMSHostCharge
{
@ -31,9 +31,9 @@ namespace LibTSforge.Modifiers
string key = string.Format("SPPSVC\\{0}", appId);
long ldapTimestamp = DateTime.Now.ToFileTime();
byte[] cmidGuids = new byte[] { };
byte[] reqCounts = new byte[] { };
byte[] kmsChargeData = new byte[] { };
byte[] cmidGuids = { };
byte[] reqCounts = { };
byte[] kmsChargeData = { };
BinaryWriter writer = new BinaryWriter(new MemoryStream());
@ -94,7 +94,7 @@ namespace LibTSforge.Modifiers
if (version != PSVersion.Vista)
{
VariableBag kmsCountData = new VariableBag(version);
kmsCountData.Blocks.AddRange(new CRCBlockModern[]
kmsCountData.Blocks.AddRange(new[]
{
new CRCBlockModern
{

View File

@ -2,9 +2,8 @@ namespace LibTSforge.Modifiers
{
using System.Collections.Generic;
using System.Linq;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using LibTSforge;
using PhysicalStore;
using SPP;
using System;
public static class KeyChangeLockDelete

View File

@ -2,8 +2,8 @@ namespace LibTSforge.Modifiers
{
using System.Collections.Generic;
using System.Linq;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public static class RearmReset
{

View File

@ -1,13 +1,9 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
namespace LibTSforge.Modifiers
{
using PhysicalStore;
using SPP;
using System.IO;
using System;
public static class SetIIDParams
{
public static void SetParams(PSVersion version, bool production, Guid actId, PKeyAlgorithm algorithm, int group, int serial, ulong security)

View File

@ -1,8 +1,8 @@
namespace LibTSforge.Modifiers
{
using System.Linq;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public static class TamperedFlagsDelete
{
@ -14,7 +14,7 @@ namespace LibTSforge.Modifiers
using (IPhysicalStore store = SPPUtils.GetStore(version, production))
{
if (version == PSVersion.Vista)
if (version == PSVersion.Vista)
{
DeleteFlag(store, "6BE8425B-E3CF-4e86-A6AF-5863E3DCB606");
}

View File

@ -1,8 +1,8 @@
namespace LibTSforge.Modifiers
{
using System;
using LibTSforge.PhysicalStore;
using LibTSforge.SPP;
using PhysicalStore;
using SPP;
public static class UniqueIdDelete
{
@ -27,7 +27,6 @@ namespace LibTSforge.Modifiers
appId = SLApi.GetAppId(actId);
}
string instId = SLApi.GetInstallationID(actId);
Guid pkeyId = SLApi.GetInstalledPkeyID(actId);
SPPUtils.KillSPP(version);

View File

@ -4,9 +4,9 @@ namespace LibTSforge.PhysicalStore
public enum BlockType : uint
{
NONE,
NONE, // unused
NAMED,
ATTRIBUTE,
ATTRIBUTE, //unused
TIMER
}

View File

@ -3,7 +3,7 @@ namespace LibTSforge.PhysicalStore
using System;
using System.Collections.Generic;
using System.IO;
using LibTSforge.Crypto;
using Crypto;
public class ModernBlock
{
@ -93,7 +93,7 @@ namespace LibTSforge.PhysicalStore
public sealed class PhysicalStoreModern : IPhysicalStore
{
private byte[] PreHeaderBytes = new byte[] { };
private byte[] PreHeaderBytes = { };
private readonly Dictionary<string, List<ModernBlock>> Data = new Dictionary<string, List<ModernBlock>>();
private readonly FileStream TSFile;
private readonly PSVersion Version;
@ -281,40 +281,44 @@ namespace LibTSforge.PhysicalStore
public void DeleteBlock(string key, string value)
{
if (Data.ContainsKey(key))
if (!Data.ContainsKey(key))
{
List<ModernBlock> blocks = Data[key];
foreach (ModernBlock block in blocks)
{
if (block.ValueAsStr == value)
{
blocks.Remove(block);
break;
}
}
Data[key] = blocks;
return;
}
List<ModernBlock> blocks = Data[key];
foreach (ModernBlock block in blocks)
{
if (block.ValueAsStr == value)
{
blocks.Remove(block);
break;
}
}
Data[key] = blocks;
}
public void DeleteBlock(string key, uint value)
{
if (Data.ContainsKey(key))
if (!Data.ContainsKey(key))
{
List<ModernBlock> blocks = Data[key];
foreach (ModernBlock block in blocks)
{
if (block.ValueAsInt == value)
{
blocks.Remove(block);
break;
}
}
Data[key] = blocks;
return;
}
List<ModernBlock> blocks = Data[key];
foreach (ModernBlock block in blocks)
{
if (block.ValueAsInt == value)
{
blocks.Remove(block);
break;
}
}
Data[key] = blocks;
}
public PhysicalStoreModern(string tsPath, bool production, PSVersion version)

View File

@ -3,7 +3,7 @@ namespace LibTSforge.PhysicalStore
using System;
using System.Collections.Generic;
using System.IO;
using LibTSforge.Crypto;
using Crypto;
public class VistaBlock
{
@ -88,7 +88,7 @@ namespace LibTSforge.PhysicalStore
public sealed class PhysicalStoreVista : IPhysicalStore
{
private byte[] PreHeaderBytes = new byte[] { };
private byte[] PreHeaderBytes = { };
private readonly List<VistaBlock> Blocks = new List<VistaBlock>();
private readonly FileStream TSPrimary;
private readonly FileStream TSSecondary;

View File

@ -3,7 +3,7 @@ namespace LibTSforge.PhysicalStore
using System;
using System.Collections.Generic;
using System.IO;
using LibTSforge.Crypto;
using Crypto;
public class Win7Block
{
@ -105,7 +105,7 @@ namespace LibTSforge.PhysicalStore
public sealed class PhysicalStoreWin7 : IPhysicalStore
{
private byte[] PreHeaderBytes = new byte[] { };
private byte[] PreHeaderBytes = { };
private readonly List<Win7Block> Blocks = new List<Win7Block>();
private readonly FileStream TSPrimary;
private readonly FileStream TSSecondary;

View File

@ -74,7 +74,6 @@ namespace LibTSforge.PhysicalStore
public override void Decode(BinaryReader reader)
{
uint type = reader.ReadUInt32();
uint unk_zero = reader.ReadUInt32();
uint lenName = reader.ReadUInt32();
uint lenVal = reader.ReadUInt32();
uint crc = reader.ReadUInt32();
@ -156,7 +155,7 @@ namespace LibTSforge.PhysicalStore
public List<CRCBlock> Blocks = new List<CRCBlock>();
private readonly PSVersion Version;
public void Deserialize(byte[] data)
private void Deserialize(byte[] data)
{
int len = data.Length;

View File

@ -74,7 +74,7 @@ namespace LibTSforge.SPP
public class PKeyConfig
{
public Dictionary<Guid, ProductConfig> Products = new Dictionary<Guid, ProductConfig>();
public readonly Dictionary<Guid, ProductConfig> Products = new Dictionary<Guid, ProductConfig>();
private readonly List<Guid> loadedPkeyConfigs = new List<Guid>();
public void LoadConfig(Guid actId)
@ -210,10 +210,5 @@ namespace LibTSforge.SPP
}
}
}
public PKeyConfig()
{
}
}
}

View File

@ -3,8 +3,8 @@ namespace LibTSforge.SPP
using System;
using System.IO;
using System.Linq;
using LibTSforge.Crypto;
using LibTSforge.PhysicalStore;
using Crypto;
using PhysicalStore;
public class ProductKey
{
@ -18,16 +18,16 @@ namespace LibTSforge.SPP
public ulong Security;
public bool Upgrade;
public PKeyAlgorithm Algorithm;
public string EulaType;
public string PartNumber;
public string Edition;
public string Channel;
public Guid ActivationId;
private readonly string EulaType;
private readonly string PartNumber;
public readonly string Edition;
public readonly string Channel;
private readonly Guid ActivationId;
private string mpc;
private string pid2;
public byte[] KeyBytes
private byte[] KeyBytes
{
get { return BitConverter.GetBytes(klow).Concat(BitConverter.GetBytes(khigh)).ToArray(); }
}
@ -66,7 +66,7 @@ namespace LibTSforge.SPP
public Guid GetPkeyId()
{
VariableBag pkb = new VariableBag(PSVersion.WinModern);
pkb.Blocks.AddRange(new CRCBlockModern[]
pkb.Blocks.AddRange(new[]
{
new CRCBlockModern
{
@ -91,7 +91,7 @@ namespace LibTSforge.SPP
return new Guid(CryptoUtils.SHA256Hash(pkb.Serialize()).Take(16).ToArray());
}
public string GetDefaultMPC()
private string GetDefaultMPC()
{
int build = Environment.OSVersion.Version.Build;
string defaultMPC = build >= 10240 ? "03612" :
@ -111,7 +111,7 @@ namespace LibTSforge.SPP
mpc = GetDefaultMPC();
// setup.cfg doesn't exist in Windows 8+
string setupcfg = string.Format("{0}\\oobe\\{1}", Environment.SystemDirectory, "setup.cfg");
string setupcfg = string.Format(@"{0}\oobe\{1}", Environment.SystemDirectory, "setup.cfg");
if (!File.Exists(setupcfg) || Edition.Contains(";"))
{
@ -205,7 +205,7 @@ namespace LibTSforge.SPP
return writer.GetBytes();
}
public string GetExtendedPid()
private string GetExtendedPid()
{
string mpc = GetMPC();
int serialHigh = Serial / 1000000;
@ -249,7 +249,7 @@ namespace LibTSforge.SPP
{
if (version == PSVersion.Win7)
{
ulong shortauth = ((ulong)Group << 41) | ((ulong)Security << 31) | ((ulong)Serial << 1) | (Upgrade ? (ulong)1 : 0);
ulong shortauth = ((ulong)Group << 41) | (Security << 31) | ((ulong)Serial << 1) | (Upgrade ? (ulong)1 : 0);
return BitConverter.GetBytes(shortauth);
}

View File

@ -86,9 +86,6 @@ namespace LibTSforge.SPP
[DllImport("slc.dll", CharSet = CharSet.Unicode)]
private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, out SLDATATYPE peDataType, out uint pcbValue, out IntPtr ppbValue);
[DllImport("slc.dll", CharSet = CharSet.Unicode)]
private static extern uint SLGetProductSkuInformation(IntPtr hSLC, ref Guid pProductSkuId, string pwszValueName, IntPtr peDataType, out uint pcbValue, out IntPtr ppbValue);
[DllImport("slc.dll", CharSet = CharSet.Unicode)]
private static extern uint SLGetLicense(IntPtr hSLC, ref Guid pLicenseFileId, out uint pcbLicenseFile, out IntPtr ppbLicenseFile);
@ -98,7 +95,7 @@ namespace LibTSforge.SPP
[DllImport("slc.dll", CharSet = CharSet.Unicode)]
private static extern uint SLFireEvent(IntPtr hSLC, string pwszEventId, ref Guid pApplicationId);
public class SLContext : IDisposable
private class SLContext : IDisposable
{
public readonly IntPtr Handle;
@ -161,11 +158,10 @@ namespace LibTSforge.SPP
{
using (SLContext sl = new SLContext())
{
uint status;
uint count;
IntPtr pProductKeyIds;
status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_PKEY, out count, out pProductKeyIds);
uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_PKEY, out count, out pProductKeyIds);
if (status != 0 || count == 0)
{
@ -189,7 +185,7 @@ namespace LibTSforge.SPP
SLConsumeWindowsRight(0);
}
public static bool RefreshTrustedTime(Guid actId)
public static void RefreshTrustedTime(Guid actId)
{
using (SLContext sl = new SLContext())
{
@ -197,8 +193,7 @@ namespace LibTSforge.SPP
uint count;
IntPtr ppbValue;
uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue);
return (int)status >= 0 && status != 0xC004F012;
SLGetProductSkuInformation(sl.Handle, ref actId, "TrustedTime", out type, out count, out ppbValue);
}
}
@ -214,11 +209,10 @@ namespace LibTSforge.SPP
{
using (SLContext sl = new SLContext())
{
uint status;
uint count;
IntPtr pAppIds;
status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds);
uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_PRODUCT_SKU, ref actId, SLIDTYPE.SL_ID_APPLICATION, out count, out pAppIds);
if (status != 0 || count == 0)
{
@ -242,15 +236,14 @@ namespace LibTSforge.SPP
}
}
public static Guid GetLicenseFileId(Guid licId)
private static Guid GetLicenseFileId(Guid licId)
{
using (SLContext sl = new SLContext())
{
uint status;
uint count;
IntPtr ppReturnLics;
status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics);
uint status = SLGetSLIDList(sl.Handle, SLIDTYPE.SL_ID_LICENSE, ref licId, SLIDTYPE.SL_ID_LICENSE_FILE, out count, out ppReturnLics);
if (status != 0 || count == 0)
{
@ -312,7 +305,7 @@ namespace LibTSforge.SPP
IntPtr ppbValue;
uint status = SLGetProductSkuInformation(sl.Handle, ref actId, "msft:sl/EUL/PHONE/PUBLIC", out type, out count, out ppbValue);
return status >= 0 && status != 0xC004F012;
return status != 0xC004F012;
}
}
@ -395,11 +388,11 @@ namespace LibTSforge.SPP
}
}
public static uint UninstallProductKey(Guid pkeyId)
public static void UninstallProductKey(Guid pkeyId)
{
using (SLContext sl = new SLContext())
{
return SLUninstallProofOfPurchase(sl.Handle, ref pkeyId);
SLUninstallProofOfPurchase(sl.Handle, ref pkeyId);
}
}

View File

@ -1,13 +1,13 @@
namespace LibTSforge.SPP
{
using LibTSforge.Crypto;
using LibTSforge.PhysicalStore;
using LibTSforge.TokenStore;
using Microsoft.Win32;
using System;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using Crypto;
using PhysicalStore;
using TokenStore;
public static class SPPUtils
{
@ -148,7 +148,7 @@ namespace LibTSforge.SPP
throw new FileNotFoundException("Failed to autodetect key type, specify physical store key with /prod or /test arguments.");
}
public static string GetPSPath(PSVersion version)
private static string GetPSPath(PSVersion version)
{
switch (version)
{
@ -328,7 +328,7 @@ namespace LibTSforge.SPP
RestartSPP(version);
Logger.WriteLine("Loaded store file succesfully.");
Logger.WriteLine("Loaded store file successfully.");
}
}
}

View File

@ -15,7 +15,7 @@ namespace LibTSforge.SPP
[return: MarshalAs(UnmanagedType.Bool)]
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern bool DeviceIoControl([In] SafeFileHandle hDevice, [In] uint dwIoControlCode, [In] IntPtr lpInBuffer, [In] int nInBufferSize, [Out] IntPtr lpOutBuffer, [In] int nOutBufferSize, out int lpBytesReturned, [In] IntPtr lpOverlapped);
private static extern bool DeviceIoControl([In] SafeFileHandle hDevice, [In] uint dwIoControlCode, [In] IntPtr lpInBuffer, [In] int nInBufferSize, [Out] IntPtr lpOutBuffer, [In] int nOutBufferSize, out int lpBytesReturned, [In] IntPtr lpOverlapped);
public static bool IsSpSysRunning()
{

View File

@ -14,7 +14,7 @@ namespace LibTSforge.TokenStore
public class TokenMeta
{
public string Name;
public Dictionary<string, string> Data = new Dictionary<string, string>();
public readonly Dictionary<string, string> Data = new Dictionary<string, string>();
public byte[] Serialize()
{
@ -37,7 +37,7 @@ namespace LibTSforge.TokenStore
return writer.GetBytes();
}
public void Deserialize(byte[] data)
private void Deserialize(byte[] data)
{
BinaryReader reader = new BinaryReader(new MemoryStream(data));
reader.ReadInt32();

View File

@ -4,7 +4,7 @@ namespace LibTSforge.TokenStore
using System.Collections.Generic;
using System.IO;
using System.Linq;
using LibTSforge.Crypto;
using Crypto;
public class TokenStoreModern : ITokenStore
{
@ -18,7 +18,7 @@ namespace LibTSforge.TokenStore
private static readonly byte[] CONTS_FOOTER = Enumerable.Repeat((byte)0xAA, 0x20).ToArray();
private List<TokenEntry> Entries = new List<TokenEntry>();
public FileStream TokensFile;
private readonly FileStream TokensFile;
public void Deserialize()
{
@ -40,7 +40,7 @@ namespace LibTSforge.TokenStore
uint contentOffset = reader.ReadUInt32();
uint contentLength = reader.ReadUInt32();
uint allocLength = reader.ReadUInt32();
byte[] contentData = new byte[] { };
byte[] contentData = { };
if (populated)
{
@ -140,11 +140,10 @@ namespace LibTSforge.TokenStore
writer.WritePadding(BLOCK_PAD_SIZE);
writer.BaseStream.Seek(curBlockOffset, SeekOrigin.Begin);
byte[] blockHash;
byte[] blockData = new byte[BLOCK_SIZE - 0x20];
byte[] blockHash = CryptoUtils.SHA256Hash(blockData);
tokens.Read(blockData, 0, BLOCK_SIZE - 0x20);
blockHash = CryptoUtils.SHA256Hash(blockData);
writer.BaseStream.Seek(curBlockOffset + BLOCK_SIZE - 0x20, SeekOrigin.Begin);
writer.Write(blockHash);
@ -275,11 +274,6 @@ namespace LibTSforge.TokenStore
Deserialize();
}
public TokenStoreModern()
{
}
public void Dispose()
{
Serialize();

View File

@ -10,30 +10,30 @@ namespace TSforgeCLI
{
private class Options
{
public bool Dump = false;
public bool Dump;
public string DumpFilePath = "dump.dat";
public string EncrFilePath = null;
public bool Load = false;
public string EncrFilePath;
public bool Load;
public string LoadFilePath = "load.dat";
public bool KMS4k = false;
public bool AVMA4k = false;
public bool ZCID = false;
public bool TimerReset = false;
public bool RearmReset = false;
public bool DeleteUniqueId = false;
public bool InstallGenPKey = false;
public bool KMSHostCharge = false;
public bool TamperedFlagsDelete = false;
public bool KeyChangeLockDelete = false;
public bool SetIIDParams = false;
public bool? Production = null;
public PSVersion? Version = null;
public bool KMS4k;
public bool AVMA4k;
public bool ZCID;
public bool TimerReset;
public bool RearmReset;
public bool DeleteUniqueId;
public bool InstallGenPKey;
public bool KMSHostCharge;
public bool TamperedFlagsDelete;
public bool KeyChangeLockDelete;
public bool SetIIDParams;
public bool? Production;
public PSVersion? Version;
public Guid ActivationId = Guid.Empty;
public bool ShowHelp = false;
public PKeyAlgorithm? Algorithm = null;
public int Group = 0;
public int Serial = 0;
public ulong Security = 0;
public bool ShowHelp;
public PKeyAlgorithm? Algorithm;
public int Group;
public int Serial;
public ulong Security;
}
public static void Main(string[] args)