Verify SecuROM sector count (#784)

* Verify securom sector count

* Make securom enum internal

* Fix bugs

* Don't set explicit var in test

* Deal with review

* Fix mistake

* Oops

* Proper DIC securom sector count

* fix names
This commit is contained in:
Deterous
2024-12-18 23:37:00 +09:00
committed by GitHub
parent 2b4fa33e81
commit 7c41fe0933
5 changed files with 121 additions and 70 deletions

View File

@@ -78,6 +78,7 @@
- Update BOS to 3.3.2
- Enable handling non-SS Xbox discs
- Use proper base path for redumper output check
- Verify securom sector count
### 3.2.4 (2024-11-24)
@@ -274,7 +275,7 @@
- Add include artifacts flag for check, sanitize options
- Remove old --protect-file mentions (JohnVeness)
- Update RedumpLib to 1.4.1
- Enable loading seed JSON (Deterous)
- Enable loading seed JSON
### 3.2.0 (2024-06-20)
@@ -350,7 +351,7 @@
- Clean up usings
- Remove automatic eject and reset options
- Remove options from UI
- Remove firmware output for Redumper (Deterous)
- Remove firmware output for Redumper
- Merge EnumConverter and EnumExtensions
- Move event args to root of Core
- Move processing queue to root of Core
@@ -390,7 +391,7 @@
- Rename main application to MPF.UI
- Fix build scripts
- Make protection file output required
- Standardize PS1-5 outputs and parsing (Deterous)
- Standardize PS1-5 outputs and parsing
- Update Redumper to build 371
- Tools always run in separate window
- Move ConsoleLogger to Check CLI
@@ -466,22 +467,22 @@
### 3.1.9 (2024-05-19)
- Update Redumper to build 325
- Fix CleanRip not pulling info (Deterous)
- Fix XboxOne/XboxSX Filename bug (Deterous)
- Trim PIC for XboxOne/XboxSX (Deterous)
- Fix CleanRip not pulling info
- Fix XboxOne/XboxSX Filename bug
- Trim PIC for XboxOne/XboxSX
- Get volume label from UIC outputs
- Add site code listing to Check
- Update RedumpLib and related
- Update BinaryObjectScanner to 3.1.11
- Remove now-unused Hash enum
- Use IO implementation of IniFile
- Add Xbox Backup Creator support to MPF.Check (Deterous)
- Add Xbox Backup Creator support to MPF.Check
- Update BinaryObjectScanner to 3.1.12
- Prefer PlayStation info from Redumper logs (Deterous)
- Prefer PlayStation info from Redumper logs
### 3.1.8 (2024-05-09)
- Option for default Redumper leadin retries (Deterous)
- Option for default Redumper leadin retries
- Omit false positives on formatting protections
- Critical update to BinaryObjectScanner 3.1.10
- Add _PFI.bin support for UIC
@@ -492,9 +493,9 @@
### 3.1.6 (2024-04-27)
- Fix parameter parsing for `=` symbol (Deterous)
- Define better default categories (Deterous)
- Custom non-redump Redumper options (Deterous)
- Fix parameter parsing for `=` symbol
- Define better default categories
- Custom non-redump Redumper options
- Update packages
- Update packages
@@ -511,10 +512,10 @@
- Fix information pulling for redumper (fuzz6001)
- Update packages
- Update BinaryObjectScanner to 3.1.4
- Detect Xbox Series X discs (Deterous)
- Detect Xbox Series X discs
- Enable Windows targeting for test project
- Fix test project project includes
- Fix CleanRip hash output for Check (Deterous)
- Fix CleanRip hash output for Check
- Enable label-side mastering SID and toolstamp
- Enable remaining fields for label-side information
- Update BinaryObjectScanner to 3.1.5
@@ -531,38 +532,38 @@
- Remove GHA pull request builds
- Add PR check workflow
- Don't link to AppVeyor artifacts page anymore
- Add PS3 CFW support to MPF.Check (Deterous)
- Hide size if value is 0 (Deterous)
- Fix title normalization (Deterous)
- Add PS3 CFW support to MPF.Check
- Hide size if value is 0
- Fix title normalization
- Ensure no labels are empty
- Use SabreTools.Hashing
- Update to SabreTools.RedumpLib 1.3.5
- Update packages to latest
- Enable LibIRD for all .NET frameworks (Deterous)
- Enable LibIRD for all .NET frameworks
- Try updating PR check action
- Fix config access persmission (Deterous)
- Fix Check UI deadlock (Deterous)
- Fix config access persmission
- Fix Check UI deadlock
- Fix formatting output formatting
- Update LibIRD to 0.9.0 (Deterous)
- Update LibIRD to 0.9.0
- Update packages
- Fix Redumper generic drive type (Deterous)
- Add MPF version to Submission info (Deterous)
- Fix Redumper generic drive type
- Add MPF version to Submission info
- Update to RedumpLib 1.3.6
### 3.1.2 (2024-02-27)
- Remove debugging lines from build script
- Port build script fixes from BOS
- Fix double git hash version (feat. Deterous)
- Fix double git hash version
- Readd x86 builds by default
- Hide unavailable dumping programs (Deterous)
- Hide unavailable dumping programs
- Remove DIC and Aaru bundles from CI
- Add x86 builds to AppVeyor
- Make AppVeyor builds framework-dependent
- Fix misattributed artifact
- Update README with current build instructions
- Opt-in automatic IRD creation after PS3 dump (Deterous)
- Add CI via Github Workflows (Deterous)
- Opt-in automatic IRD creation after PS3 dump
- Add CI via Github Workflows
- Reorganize solution items
- Split CI workflow files
- Add GHA CI status badges
@@ -592,19 +593,19 @@
- Show hashes in readonly data
- Update to BinaryObjectScanner 3.1.0
- Add Mattel HyperScan detection
- Pull PS3 Disc Key from redump (Deterous)
- Pull PS3 Disc Key from redump
### 3.1.1 (2024-02-20)
- Remove .NET 6 from auto-builds
- Make Redumper the default for new users
- Fix DIC log parsing for SS version (Deterous)
- Fix DIC log parsing for SS version
- Write outputs with UTF-8
- Add funworld Photo Play detection
- Fix Aaru drive parameter generation
- Limit DVD protection outputs
- Add a GUI for PS3 IRD Creation (Deterous)
- Update LibIRD, disable UI elements when creating IRD (Deterous)
- Add a GUI for PS3 IRD Creation
- Update LibIRD, disable UI elements when creating IRD
### 3.1.0 (2024-02-06)
@@ -612,33 +613,33 @@
- Update Redumper to build 294
- Fix commented out code
- Make missing hash data clearer
- Get BD PIC Identifier for redumper (Deterous)
- Support redumper skeleton and hash files (Deterous)
- Get BD PIC Identifier for redumper
- Support redumper skeleton and hash files
- Support ringcode and PIC for triple/quad-layer (fuzz6001)
- Cleanup !protectionInfo.txt (Deterous)
- Update Redumper to build 311 (Deterous)
- Use PSX/PS2 serial as filename when Volume Label not present (Deterous)
- Allow variables in output path (Deterous)
- Check for presence of complete dump from other programs (Deterous)
- Retrieve volume label from logs (Deterous)
- Cleanup !protectionInfo.txt
- Update Redumper to build 311
- Use PSX/PS2 serial as filename when Volume Label not present
- Allow variables in output path
- Check for presence of complete dump from other programs
- Retrieve volume label from logs
- Correct missing space in PVD (fuzz6001)
- Prevent crashing on invalid parameters (Deterous)
- Detect CDTV discs (Deterous)
- Differentiate CD32 from CDTV (Deterous)
- Normalise Disc Titles in Submission Info (Deterous)
- Prevent crashing on invalid parameters
- Detect CDTV discs
- Differentiate CD32 from CDTV
- Normalise Disc Titles in Submission Info
- Skip warning line in Redumper log
- Add a GUI for MPF.Check (Deterous)
- Add a GUI for MPF.Check
- Fix information pulling for CleanRip and UIC
- Add UMD handling for the disc info window
- Detect Photo CD
- Parse PSX/PS2/KP2 exe date from logs (Deterous)
- Exclude extra tracks when finding disc matches (Deterous)
- Verbose Redumper log by default (Deterous)
- Parse PSX/PS2/KP2 exe date from logs
- Exclude extra tracks when finding disc matches
- Verbose Redumper log by default
- Retrieve serial from Cleanrip
- Fix build from rushed code
- Remove `-disc2` from Cleanrip serial
- Enable Windows builds on Linux and Mac
- Fix compiler warning (Deterous)
- Fix compiler warning
### 3.0.3 (2023-12-04)
@@ -726,15 +727,15 @@
### 2.7.5 (2023-11-06)
- Remove psxt001z Pkg Ref in MPF.Test (Deterous)
- Remove psxt001z Pkg Ref in MPF.Test
- Update Redumper to build 247
- Focus main window after child window closes (Deterous)
- Focus main window after child window closes
- Try to get PS3 data from SFB
- Fix PS3 version finding
- Pull PS3 Firmware Version (Deterous)
- Pull PS3 Firmware Version
- Fix default layerbreak output
- Enable browsing for Redumper path (Deterous)
- Update to MMI 3.0.0 (Deterous)
- Enable browsing for Redumper path
- Update to MMI 3.0.0
### 2.7.4 (2023-10-31)
@@ -755,7 +756,7 @@
- Compile most regex statements
- Handle a couple of messages
- Remove .manufacturer for Bluray
- Fix typo that disables DIC during media check (Deterous)
- Fix typo that disables DIC during media check
- Fix build
- Remove duplicate check
- Add PIC output for Redumper
@@ -784,7 +785,7 @@
- Add filename suffix setting (nw)
- Wire through filename suffix
- Expose suffix setting
- Set UDF CD threshold at 800MB (Deterous)
- Set UDF CD threshold at 800MB
- Update package versions
- Attempt to parse out PS5 params.json
- Fix CRC32 hashing
@@ -793,7 +794,7 @@
- Update to MMI 3.0.0-preview.4
- Fix two small nullability issues
- Use Array.Empty in hasher
- Always use relative path internally (Deterous)
- Always use relative path internally
### 2.7.2 (2023-10-17)
@@ -801,9 +802,9 @@
- Cleanup and gated code
- Gate some switch expressions
- Suppress some unnecessary messages
- Disable dumping button when Redumper selected with unsupported media type (Deterous)
- Improve check for which program supports which media (Deterous)
- Remove code for getting Universal Hash from DIC logs (Deterous)
- Disable dumping button when Redumper selected with unsupported media type
- Improve check for which program supports which media
- Remove code for getting Universal Hash from DIC logs
- Fix Redumper retry count not showing
- Enable parameters checkbox by default
- Update Redumper to build 230
@@ -823,7 +824,7 @@
- Unify handling of enable/disable events
- Enable nullability in Check
- Remove all but .NET 6 for AppVeyor packaging
- Place message boxes at center of main window (Deterous)
- Place message boxes at center of main window
- Enable nullability in MPF
- Enable nullability in MPF.UI.Core
- Enable nullability in MPF.Test
@@ -859,7 +860,7 @@
- Be smarter about media type based on system
- Consolidate into MPF.Core
- Fix failing tests
- Remove debug symbols in release builds (Deterous)
- Remove debug symbols in release builds
- Allow nullability for modern .NET
- Fix failing tests
- Remove unnecessary include
@@ -867,7 +868,7 @@
- Move LogLevel enumeration
- Split logging code a bit more
- Split info window code a bit more
- Clarify build instructions in README (Deterous)
- Clarify build instructions in README
- Split options window code a bit more
- Use binding for more disc info textboxes
- Handle Redump password changing better
@@ -893,7 +894,7 @@
- Fix media type ordering
- Fix dumping button not enabling
- Recentralize some Check functionality
- Fix media combobox not updating (Deterous)
- Fix media combobox not updating
### 2.6.6 (2023-10-04)
@@ -942,7 +943,7 @@
- Handle extension changing only
- Swap order of operations for changing program
- Fix dumping path in DD
- Fix PlayStation serial code region parsing (Deterous)
- Fix PlayStation serial code region parsing
- Retrofit README
- Migrate to Nuget package for Redump
- Remove dd for Windows

View File

@@ -892,7 +892,7 @@ namespace MPF.Processors.Test
public void GetSecuROMData_Empty_Null()
{
string log = string.Empty;
string? actual = Redumper.GetSecuROMData(log);
string? actual = Redumper.GetSecuROMData(log, out var securomScheme);
Assert.Null(actual);
}
@@ -900,7 +900,7 @@ namespace MPF.Processors.Test
public void GetSecuROMData_Invalid_Null()
{
string log = "INVALID";
string? actual = Redumper.GetSecuROMData(log);
string? actual = Redumper.GetSecuROMData(log, out var securomScheme);
Assert.Null(actual);
}
@@ -909,7 +909,7 @@ namespace MPF.Processors.Test
{
string? expected = "MSF: 00\nMSF: 01\nMSF: 02";
string log = Path.Combine(Environment.CurrentDirectory, "TestData", "Redumper", "CDROM", "test.log");
string? actual = Redumper.GetSecuROMData(log);
string? actual = Redumper.GetSecuROMData(log, out var securomScheme);
Assert.Equal(expected, actual);
}

View File

@@ -221,7 +221,28 @@ namespace MPF.Processors
{
var fi = new FileInfo($"{basePath}_subIntention.txt");
if (fi.Length > 0)
{
info.CopyProtection!.SecuROMData = ProcessingTool.GetFullFile($"{basePath}_subIntention.txt") ?? string.Empty;
// Count the number of sectors
int sectorCount = 0;
for (int index = 0; (index = info.CopyProtection!.SecuROMData.IndexOf("MSF:", index, StringComparison.Ordinal)) != -1; index += "MSF:".Length)
sectorCount++;
// Determine SecuROM schema, warn if unusual type
SecuROMScheme secuROMScheme = SecuROMScheme.Unknown;
if (sectorCount == 216)
secuROMScheme = SecuROMScheme.PreV3;
else if (sectorCount == 90)
secuROMScheme = SecuROMScheme.V3;
else if (sectorCount == 99)
secuROMScheme = SecuROMScheme.V4;
else if (sectorCount == 11)
secuROMScheme = SecuROMScheme.V4Plus;
if (secuROMScheme == SecuROMScheme.Unknown)
info.CommonDiscInfo!.Comments = "Warning: Incorrect SecuROM sector count" + Environment.NewLine;
}
}
// Needed for some odd copy protections

View File

@@ -0,0 +1,14 @@
namespace MPF.Processors
{
/// <summary>
/// Enum for SecuROM scheme type
/// </summary>
internal enum SecuROMScheme
{
Unknown,
PreV3, // 216 Sectors
V3, // 90 Sectors
V4, // 99 Sectors
V4Plus, // 11 Sectors
}
}

View File

@@ -151,10 +151,12 @@ namespace MPF.Processors
case RedumpSystem.IBMPCcompatible:
case RedumpSystem.RainbowDisc:
case RedumpSystem.SonyElectronicBook:
info.CopyProtection!.SecuROMData = GetSecuROMData($"{basePath}.log") ?? string.Empty;
info.CopyProtection!.SecuROMData = GetSecuROMData($"{basePath}.log", out SecuROMScheme secuROMScheme) ?? string.Empty;
if (secuROMScheme == SecuROMScheme.Unknown)
info.CommonDiscInfo!.Comments = "Warning: Incorrect SecuROM sector count" + Environment.NewLine;
// Needed for some odd copy protections
info.CopyProtection!.Protection = GetDVDProtection($"{basePath}.log", false) ?? string.Empty;
info.CopyProtection!.Protection += GetDVDProtection($"{basePath}.log", false) ?? string.Empty;
break;
case RedumpSystem.DVDAudio:
@@ -1664,9 +1666,12 @@ namespace MPF.Processors
/// Get the SecuROM data from the input file, if possible
/// </summary>
/// <param name="log">Log file location</param>
/// <param name="secuROMScheme">SecuROM scheme found</param>
/// <returns>SecuROM data, if possible</returns>
internal static string? GetSecuROMData(string log)
internal static string? GetSecuROMData(string log, out SecuROMScheme secuROMScheme)
{
secuROMScheme = SecuROMScheme.Unknown;
// If the file doesn't exist, we can't get info from it
if (string.IsNullOrEmpty(log))
return null;
@@ -1697,6 +1702,16 @@ namespace MPF.Processors
lines.Add(line);
}
// Return the securom scheme if correct sector count
if (lines.Count == 216)
secuROMScheme = SecuROMScheme.PreV3;
else if (lines.Count == 90)
secuROMScheme = SecuROMScheme.V3;
else if (lines.Count == 99)
secuROMScheme = SecuROMScheme.V4;
else if (lines.Count == 11)
secuROMScheme = SecuROMScheme.V4Plus;
return string.Join("\n", [.. lines]).TrimEnd('\n');
}
catch