diff --git a/CHANGELIST.md b/CHANGELIST.md
index 319ed3d2..3579d7dd 100644
--- a/CHANGELIST.md
+++ b/CHANGELIST.md
@@ -65,6 +65,7 @@
- Add safety check around empty config files
- Add launch config for CLI
- Remove unnecessary re-splitting of path
+- Always filter out game engines and packers
### 3.2.4 (2024-11-24)
diff --git a/MPF.Frontend/Tools/ProtectionTool.cs b/MPF.Frontend/Tools/ProtectionTool.cs
index 852d8d82..54179ee5 100644
--- a/MPF.Frontend/Tools/ProtectionTool.cs
+++ b/MPF.Frontend/Tools/ProtectionTool.cs
@@ -33,8 +33,8 @@ namespace MPF.Frontend.Tools
var scanner = new Scanner(
options.ScanArchivesForProtection,
scanContents: true, // Hardcoded value to avoid issues
- scanGameEngines: false, // Hardcoded value to avoid issues
- options.ScanPackersForProtection,
+ scanGameEngines: true, // TODO: Remove when BOS updates
+ scanPackers: true, // TODO: Remove when BOS updates
scanPaths: true, // Hardcoded value to avoid issues
options.IncludeDebugProtectionInformation,
progress);
@@ -137,6 +137,13 @@ namespace MPF.Frontend.Tools
/// Sanitize unnecessary protection duplication from output
///
/// Enumerable of found protections
+ ///
+ /// This filtering only impacts the information that goes into the single-line
+ /// protection field in the output submission info. The filtering performed by
+ /// this method applies to the needs of Redump and not necessarily any other
+ /// application. The full protection list should be used as a reference in all
+ /// other cases.
+ ///
public static string SanitizeFoundProtections(List foundProtections)
{
// EXCEPTIONS
@@ -146,6 +153,100 @@ namespace MPF.Frontend.Tools
foundProtections.Add("Exception occurred while scanning [RESCAN NEEDED]");
}
+ #region Game Engine
+
+ // RenderWare
+ foundProtections = foundProtections.FindAll(p => p != "RenderWare");
+
+ #endregion
+
+ #region Packers
+
+ // .NET Reactor
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith(".NET Reactor"));
+
+ // 7-Zip SFX
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("7-Zip SFX"));
+
+ // ASPack
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("ASPack"));
+
+ // AutoPlay Media Studio
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("AutoPlay Media Studio"));
+
+ // Caphyon Advanced Installer
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Caphyon Advanced Installer"));
+
+ // CExe
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("CExe"));
+
+ // dotFuscator
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("dotFuscator"));
+
+ // Embedded Archive / Executable
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Embedded"));
+
+ // EXE Stealth
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("EXE Stealth"));
+
+ // Gentee Installer
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Gentee Installer"));
+
+ // HyperTech CrackProof
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("HyperTech CrackProof"));
+
+ // Inno Setup
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Inno Setup"));
+
+ // InstallAnywhere
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("InstallAnywhere"));
+
+ // Installer VISE
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Installer VISE"));
+
+ // Intel Installation Framework
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Intel Installation Framework"));
+
+ // Microsoft CAB SFX
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Microsoft CAB SFX"));
+
+ // NeoLite
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("NeoLite"));
+
+ // NSIS
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("NSIS"));
+
+ // PE Compact
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("PE Compact"));
+
+ // PEtite
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("PEtite"));
+
+ // Setup Factory
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Setup Factory"));
+
+ // Shrinker
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Shrinker"));
+
+ // UPX
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("UPX"));
+
+ // WinRAR SFX
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("WinRAR SFX"));
+
+ // WinZip SFX
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("WinZip SFX"));
+
+ // WinZip SFX
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("WinZip SFX"));
+
+ // Wise Installer
+ foundProtections = foundProtections.FindAll(p => !p.StartsWith("Wise Installation"));
+
+ #endregion
+
+ #region Protections
+
// ActiveMARK
if (foundProtections.Exists(p => p == "ActiveMARK 5")
&& foundProtections.Exists(p => p == "ActiveMARK"))
@@ -429,6 +530,8 @@ namespace MPF.Frontend.Tools
foundProtections = foundProtections.FindAll(p => p != "XCP");
}
+ #endregion
+
// Sort and return the protections
foundProtections.Sort();
return string.Join(", ", [.. foundProtections]);