summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLyssa2025-04-07 15:19:24 +0000
committerLyssa2025-04-07 15:19:24 +0000
commit0c8b1efaa9005de1d101ebab5e66117edfaec3b2 (patch)
tree3f5fe837f2ec9cbe20238bdf9ced357f3ec1184e
parent3f1c87831802817f0cb3effacde954d3cbadfb6c (diff)
downloadTSforge-0c8b1efaa9005de1d101ebab5e66117edfaec3b2.zip
Minor fixups
-rw-r--r--LibTSforge/Activators/AVMA4K.cs22
-rw-r--r--LibTSforge/Activators/KMS4K.cs12
-rw-r--r--LibTSforge/Activators/ZeroCID.cs13
-rw-r--r--LibTSforge/Crypto/PhysStoreCrypto.cs38
-rw-r--r--LibTSforge/Modifiers/GenPKeyInstall.cs12
-rw-r--r--LibTSforge/Modifiers/GracePeriodReset.cs4
-rw-r--r--LibTSforge/Modifiers/KMSHostCharge.cs12
-rw-r--r--LibTSforge/Modifiers/KeyChangeLockDelete.cs5
-rw-r--r--LibTSforge/Modifiers/RearmReset.cs4
-rw-r--r--LibTSforge/Modifiers/SetIIDParams.cs12
-rw-r--r--LibTSforge/Modifiers/TamperedFlagsDelete.cs6
-rw-r--r--LibTSforge/Modifiers/UniqueIdDelete.cs5
-rw-r--r--LibTSforge/PhysicalStore/Common.cs4
-rw-r--r--LibTSforge/PhysicalStore/PhysicalStoreModern.cs48
-rw-r--r--LibTSforge/PhysicalStore/PhysicalStoreVista.cs4
-rw-r--r--LibTSforge/PhysicalStore/PhysicalStoreWin7.cs4
-rw-r--r--LibTSforge/PhysicalStore/VariableBag.cs3
-rw-r--r--LibTSforge/SPP/PKeyConfig.cs7
-rw-r--r--LibTSforge/SPP/ProductKey.cs26
-rw-r--r--LibTSforge/SPP/SLAPI.cs27
-rw-r--r--LibTSforge/SPP/SPPUtils.cs10
-rw-r--r--LibTSforge/SPP/SPSys.cs2
-rw-r--r--LibTSforge/TokenStore/Common.cs4
-rw-r--r--LibTSforge/TokenStore/TokenStoreModern.cs14
-rw-r--r--TSforgeCLI/Program.cs42
25 files changed, 157 insertions, 183 deletions
diff --git a/LibTSforge/Activators/AVMA4K.cs b/LibTSforge/Activators/AVMA4K.cs
index 2127652..51b546a 100644
--- a/LibTSforge/Activators/AVMA4K.cs
+++ b/LibTSforge/Activators/AVMA4K.cs
@@ -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
{
diff --git a/LibTSforge/Activators/KMS4K.cs b/LibTSforge/Activators/KMS4K.cs
index a68e263..6287c39 100644
--- a/LibTSforge/Activators/KMS4K.cs
+++ b/LibTSforge/Activators/KMS4K.cs
@@ -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
{
diff --git a/LibTSforge/Activators/ZeroCID.cs b/LibTSforge/Activators/ZeroCID.cs
index 1675173..147dceb 100644
--- a/LibTSforge/Activators/ZeroCID.cs
+++ b/LibTSforge/Activators/ZeroCID.cs
@@ -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,
diff --git a/LibTSforge/Crypto/PhysStoreCrypto.cs b/LibTSforge/Crypto/PhysStoreCrypto.cs
index b0acc2e..083841d 100644
--- a/LibTSforge/Crypto/PhysStoreCrypto.cs
+++ b/LibTSforge/Crypto/PhysStoreCrypto.cs
@@ -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();
+ 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 (version != PSVersion.Vista)
+ {
+ if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig))
{
- if (!CryptoUtils.HMACVerify(hmacKey, psData, hmacSig))
- {
- throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt.");
- }
+ throw new InvalidDataException("Failed to verify HMAC. Physical store is corrupt.");
}
- else
+ }
+ else
+ {
+ if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig))
{
- if (!CryptoUtils.SaltSHAVerify(hmacKey, psData, hmacSig))
- {
- throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt.");
- }
+ throw new InvalidDataException("Failed to verify checksum. Physical store is corrupt.");
}
-
- return psData;
}
- throw new Exception("Failed to decrypt physical store.");
+ 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);
diff --git a/LibTSforge/Modifiers/GenPKeyInstall.cs b/LibTSforge/Modifiers/GenPKeyInstall.cs
index 2e4c23d..a747952 100644
--- a/LibTSforge/Modifiers/GenPKeyInstall.cs
+++ b/LibTSforge/Modifiers/GenPKeyInstall.cs
@@ -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)
diff --git a/LibTSforge/Modifiers/GracePeriodReset.cs b/LibTSforge/Modifiers/GracePeriodReset.cs
index 059b1c5..3d0f6a3 100644
--- a/LibTSforge/Modifiers/GracePeriodReset.cs
+++ b/LibTSforge/Modifiers/GracePeriodReset.cs
@@ -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
{
diff --git a/LibTSforge/Modifiers/KMSHostCharge.cs b/LibTSforge/Modifiers/KMSHostCharge.cs
index 94f4dfd..153c700 100644
--- a/LibTSforge/Modifiers/KMSHostCharge.cs
+++ b/LibTSforge/Modifiers/KMSHostCharge.cs
@@ -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
{
diff --git a/LibTSforge/Modifiers/KeyChangeLockDelete.cs b/LibTSforge/Modifiers/KeyChangeLockDelete.cs
index 3883d3c..f6ec3de 100644
--- a/LibTSforge/Modifiers/KeyChangeLockDelete.cs
+++ b/LibTSforge/Modifiers/KeyChangeLockDelete.cs
@@ -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
diff --git a/LibTSforge/Modifiers/RearmReset.cs b/LibTSforge/Modifiers/RearmReset.cs
index 89a12f3..e909316 100644
--- a/LibTSforge/Modifiers/RearmReset.cs
+++ b/LibTSforge/Modifiers/RearmReset.cs
@@ -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
{
diff --git a/LibTSforge/Modifiers/SetIIDParams.cs b/LibTSforge/Modifiers/SetIIDParams.cs
index d7fa2c5..2f34a7d 100644
--- a/LibTSforge/Modifiers/SetIIDParams.cs
+++ b/LibTSforge/Modifiers/SetIIDParams.cs
@@ -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)
diff --git a/LibTSforge/Modifiers/TamperedFlagsDelete.cs b/LibTSforge/Modifiers/TamperedFlagsDelete.cs
index 8369d4e..a9edc55 100644
--- a/LibTSforge/Modifiers/TamperedFlagsDelete.cs
+++ b/LibTSforge/Modifiers/TamperedFlagsDelete.cs
@@ -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");
}
diff --git a/LibTSforge/Modifiers/UniqueIdDelete.cs b/LibTSforge/Modifiers/UniqueIdDelete.cs
index d1851c4..b66954a 100644
--- a/LibTSforge/Modifiers/UniqueIdDelete.cs
+++ b/LibTSforge/Modifiers/UniqueIdDelete.cs
@@ -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);
diff --git a/LibTSforge/PhysicalStore/Common.cs b/LibTSforge/PhysicalStore/Common.cs
index d0ad4fe..aef77f8 100644
--- a/LibTSforge/PhysicalStore/Common.cs
+++ b/LibTSforge/PhysicalStore/Common.cs
@@ -4,9 +4,9 @@ namespace LibTSforge.PhysicalStore
public enum BlockType : uint
{
- NONE,
+ NONE, // unused
NAMED,
- ATTRIBUTE,
+ ATTRIBUTE, //unused
TIMER
}
diff --git a/LibTSforge/PhysicalStore/PhysicalStoreModern.cs b/LibTSforge/PhysicalStore/PhysicalStoreModern.cs
index 9d8bb73..b76852a 100644
--- a/LibTSforge/PhysicalStore/PhysicalStoreModern.cs
+++ b/LibTSforge/PhysicalStore/PhysicalStoreModern.cs
@@ -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];
+ return;
+ }
- foreach (ModernBlock block in blocks)
+ List<ModernBlock> blocks = Data[key];
+
+ foreach (ModernBlock block in blocks)
+ {
+ if (block.ValueAsStr == value)
{
- if (block.ValueAsStr == value)
- {
- blocks.Remove(block);
- break;
- }
+ blocks.Remove(block);
+ break;
}
-
- Data[key] = blocks;
}
+
+ Data[key] = blocks;
}
public void DeleteBlock(string key, uint value)
{
- if (Data.ContainsKey(key))
+ if (!Data.ContainsKey(key))
{
- List<ModernBlock> blocks = Data[key];
+ return;
+ }
- foreach (ModernBlock block in blocks)
+ List<ModernBlock> blocks = Data[key];
+
+ foreach (ModernBlock block in blocks)
+ {
+ if (block.ValueAsInt == value)
{
- if (block.ValueAsInt == value)
- {
- blocks.Remove(block);
- break;
- }
+ blocks.Remove(block);
+ break;
}
-
- Data[key] = blocks;
}
+
+ Data[key] = blocks;
}
public PhysicalStoreModern(string tsPath, bool production, PSVersion version)
diff --git a/LibTSforge/PhysicalStore/PhysicalStoreVista.cs b/LibTSforge/PhysicalStore/PhysicalStoreVista.cs
index 809be77..5251914 100644
--- a/LibTSforge/PhysicalStore/PhysicalStoreVista.cs
+++ b/LibTSforge/PhysicalStore/PhysicalStoreVista.cs
@@ -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;
diff --git a/LibTSforge/PhysicalStore/PhysicalStoreWin7.cs b/LibTSforge/PhysicalStore/PhysicalStoreWin7.cs
index d03bf9a..006c8df 100644
--- a/LibTSforge/PhysicalStore/PhysicalStoreWin7.cs
+++ b/LibTSforge/PhysicalStore/PhysicalStoreWin7.cs
@@ -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;
diff --git a/LibTSforge/PhysicalStore/VariableBag.cs b/LibTSforge/PhysicalStore/VariableBag.cs
index ebe413f..bca0e32 100644
--- a/LibTSforge/PhysicalStore/VariableBag.cs
+++ b/LibTSforge/PhysicalStore/VariableBag.cs
@@ -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;
diff --git a/LibTSforge/SPP/PKeyConfig.cs b/LibTSforge/SPP/PKeyConfig.cs
index 6733940..83fc981 100644
--- a/LibTSforge/SPP/PKeyConfig.cs
+++ b/LibTSforge/SPP/PKeyConfig.cs
@@ -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()
- {
-
- }
}
}
diff --git a/LibTSforge/SPP/ProductKey.cs b/LibTSforge/SPP/ProductKey.cs
index ae48893..f4cf15a 100644
--- a/LibTSforge/SPP/ProductKey.cs
+++ b/LibTSforge/SPP/ProductKey.cs
@@ -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);
}
diff --git a/LibTSforge/SPP/SLAPI.cs b/LibTSforge/SPP/SLAPI.cs
index c25fb03..fc5823b 100644
--- a/LibTSforge/SPP/SLAPI.cs
+++ b/LibTSforge/SPP/SLAPI.cs
@@ -87,9 +87,6 @@ namespace LibTSforge.SPP
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);
[DllImport("slc.dll", CharSet = CharSet.Unicode)]
@@ -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);
}
}
diff --git a/LibTSforge/SPP/SPPUtils.cs b/LibTSforge/SPP/SPPUtils.cs
index a535bc7..062e5ca 100644
--- a/LibTSforge/SPP/SPPUtils.cs
+++ b/LibTSforge/SPP/SPPUtils.cs
@@ -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.");
}
}
}
diff --git a/LibTSforge/SPP/SPSys.cs b/LibTSforge/SPP/SPSys.cs
index 18b3655..ecc331c 100644
--- a/LibTSforge/SPP/SPSys.cs
+++ b/LibTSforge/SPP/SPSys.cs
@@ -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()
{
diff --git a/LibTSforge/TokenStore/Common.cs b/LibTSforge/TokenStore/Common.cs
index 1dda7e7..d7133f2 100644
--- a/LibTSforge/TokenStore/Common.cs
+++ b/LibTSforge/TokenStore/Common.cs
@@ -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();
diff --git a/LibTSforge/TokenStore/TokenStoreModern.cs b/LibTSforge/TokenStore/TokenStoreModern.cs
index ee51e7a..2c39ca8 100644
--- a/LibTSforge/TokenStore/TokenStoreModern.cs
+++ b/LibTSforge/TokenStore/TokenStoreModern.cs
@@ -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();
diff --git a/TSforgeCLI/Program.cs b/TSforgeCLI/Program.cs
index 7c1a50b..d7073fe 100644
--- a/TSforgeCLI/Program.cs
+++ b/TSforgeCLI/Program.cs
@@ -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)