diff --git a/.vscode/launch.json b/.vscode/launch.json index f8821671..2ea04a6e 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -11,7 +11,9 @@ "preLaunchTask": "build", // If you have changed target frameworks, make sure to update the program path. "program": "${workspaceFolder}/ProtectionScan/bin/Debug/net9.0/ProtectionScan.dll", - "args": [], + "args": [ + "/home/matt/Downloads/_BADEXE/" + ], "cwd": "${workspaceFolder}/ProtectionScan", // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console "console": "internalConsole", diff --git a/BinaryObjectScanner/FileType/Textfile.cs b/BinaryObjectScanner/FileType/Textfile.cs index acf25391..cfadb5e8 100644 --- a/BinaryObjectScanner/FileType/Textfile.cs +++ b/BinaryObjectScanner/FileType/Textfile.cs @@ -78,6 +78,13 @@ namespace BinaryObjectScanner.FileType else if (fileContent.Contains("FREELOCK")) protections.Add("Freelock"); + // Hudson huPPPX + // Found in setup.inx + if (fileContent.Contains("HVRCD_IS_")) + return "Hudson huPPPX"; + else if (fileContent.Contains("HVCDISSR")) + return "Hudson huPPPX"; + // MediaCloQ if (fileContent.Contains("SunnComm MediaCloQ")) protections.Add("MediaCloQ"); diff --git a/BinaryObjectScanner/Protection/HudsonHuPPPX.cs b/BinaryObjectScanner/Protection/HudsonHuPPPX.cs new file mode 100644 index 00000000..958cca8d --- /dev/null +++ b/BinaryObjectScanner/Protection/HudsonHuPPPX.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using BinaryObjectScanner.Interfaces; +using SabreTools.Matching; +using SabreTools.Matching.Paths; +using SabreTools.Serialization.Wrappers; + +namespace BinaryObjectScanner.Protection +{ + /// + /// Hudson huPPPX device control library + /// + /// + /// Basically unknown copy protection scheme found in Bomberman Vol 2 (Japan). + /// Within the installshield program (setup.inx), there's a call to a disc check (using HVCDISSR.DLL) + /// that fails even for mounted bin/cue with intentional errors. + /// + public class HudsonHuPPPX : IExecutableCheck, IPathCheck + { + /// + public string? CheckExecutable(string file, PortableExecutable exe, bool includeDebug) + { + var exportTable = exe.ExportTable; + if (exportTable != null) + { + // Found in Bomberman Vol 2 (Japan) + if (exportTable.ExportDirectoryTable?.Name == "HVCDISSR.DLL") + return "Hudson huPPPX"; + + // Found in Bomberman Vol 2 (Japan) + if (Array.Exists(exportTable.ExportNameTable?.Strings, s => s.StartsWith("HVRCD_IS_"))) + return "Hudson huPPPX"; + } + + return null; + } + + /// + public List CheckDirectoryPath(string path, List? files) + { + var matchers = new List + { + new(new FilePathMatch("HVCDISSR.DLL"), "Hudson huPPPX"), + }; + + return MatchUtil.GetAllMatches(files, matchers, any: true); + } + + /// + public string? CheckFilePath(string path) + { + var matchers = new List + { + new(new FilePathMatch("HVCDISSR.DLL"), "Hudson huPPPX"), + }; + + return MatchUtil.GetFirstMatch(path, matchers, any: true); + } + } +} diff --git a/README.md b/README.md index 74008a1b..e1cc2634 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,7 @@ Below is a list of protections detected by BinaryObjectScanner. The two columns | Games for Windows - Live | True | True | | | Gefest Protection System | True | False | | | Hexalock AutoLock | True | True | | +| Hudson huPPPX | True | True | Basically unknown protection | | Impulse Reactor / Stardock Product Activation | True | True | | | IndyVCD | False | True | Unconfirmed¹ | | INTENIUM Trial & Buy Protection | True | False | |