From 8f7cf8d07503c7db6f6f92a55b29280bc0e9849c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:06:03 +0200 Subject: [PATCH 1/3] new EA system --- src/GameFinder.StoreHandlers.EADesktop/Crypto/Decryption.cs | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/GameFinder.StoreHandlers.EADesktop/Crypto/Decryption.cs b/src/GameFinder.StoreHandlers.EADesktop/Crypto/Decryption.cs index 9a05191c..90ec729b 100644 --- a/src/GameFinder.StoreHandlers.EADesktop/Crypto/Decryption.cs +++ b/src/GameFinder.StoreHandlers.EADesktop/Crypto/Decryption.cs @@ -9,6 +9,7 @@ public static class Decryption { private const string AllUsersGenericId = "allUsersGenericId"; private const string IS = "IS"; + private const string Salt = "l)%ge7fomILhfj*Qfi+,"; private static readonly byte[] preComputedIV = { @@ -18,10 +19,7 @@ public static class Decryption public static byte[] CreateDecryptionKey(IHardwareInfoProvider hardwareInfoProvider) { - var hardwareString = HardwareInformation.GenerateHardwareString(hardwareInfoProvider); - - var hardwareHash = Hashing.CalculateSHA1Hash(hardwareString); - var hashInput = AllUsersGenericId + IS + hardwareHash; + var hashInput = AllUsersGenericId + IS + Salt; var key = Hashing.CalculateSHA3_256Hash(hashInput); return key; From f09ce4cafb92967d48088ab78321c898dafcd339 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:44:20 +0200 Subject: [PATCH 2/3] Update supported schema version to 24 --- src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs b/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs index af8f89b1..5ac11891 100644 --- a/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs +++ b/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs @@ -41,7 +41,7 @@ public class EADesktopHandler : AHandler /// The supported schema version of this handler. You can change the schema policy with /// . /// - public const int SupportedSchemaVersion = 21; + public const int SupportedSchemaVersion = 24; /// /// Policy to use when the schema version does not match . From 2e751a7a29cc211b3786fd75bde5cebaf9c1ec00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Isma=C3=ABl=20Moret?= <30985701+BellezaEmporium@users.noreply.github.com> Date: Tue, 28 Apr 2026 10:56:37 +0200 Subject: [PATCH 3/3] Add safeguards for non-rooted installChecks Updated contentIds initialization and added checks for baseInstallPath in multiple conditions. --- .../EADesktopHandler.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs b/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs index 5ac11891..317b32be 100644 --- a/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs +++ b/src/GameFinder.StoreHandlers.EADesktop/EADesktopHandler.cs @@ -249,7 +249,11 @@ internal static (string? message, bool isError) CreateSchemaVersionMessage( internal static string ParseInstallerDataFile(IFileSystem fileSystem, string baseInstallPath, out IList contentIds) { var title = ""; - contentIds = new List(); + contentIds = []; + + // Skip processing if baseInstallPath is not rooted + if (string.IsNullOrEmpty(baseInstallPath) || !Path.IsPathRooted(baseInstallPath)) + return title; var dataFile = fileSystem.FromUnsanitizedFullPath(Path.Combine(baseInstallPath, "__Installer", "installerdata.xml")); if (dataFile.FileExists) @@ -363,7 +367,7 @@ internal static OneOf InstallInfoToGame(IRegistry r else if (Path.IsPathRooted(baseInstallPath)) isInstalled = true; - if (installCheck.StartsWith('[')) + if (installCheck.StartsWith('[') && Path.IsPathRooted(baseInstallPath)) { var j = installCheck.IndexOf(']', StringComparison.Ordinal); if (j > 1) @@ -393,7 +397,7 @@ internal static OneOf InstallInfoToGame(IRegistry r if (!executable.FileExists) isInstalled = false; } - else if (!string.IsNullOrEmpty(executableCheck) && executableCheck.StartsWith('[')) + else if (!string.IsNullOrEmpty(executableCheck) && executableCheck.StartsWith('[') && Path.IsPathRooted(baseInstallPath)) { var j = executableCheck.IndexOf(']', StringComparison.Ordinal);