From c7261c342a9a65710f77bb205e1bee0ae2703541 Mon Sep 17 00:00:00 2001 From: SilasLaspada Date: Wed, 27 Jul 2022 14:06:52 -0600 Subject: [PATCH] Vastly improve MediaCloQ checks (#138) * Vastly improve MediaCloQ checks Vastly improve MediaCloQ checks, including adding content and text file checks. Also, add notes relating to it in comments. * Add comment to MediaCloQ Add mention of "sunncomm.ico" being used as a previous check. --- BurnOutSharp/FileType/Textfile.cs | 8 ++++ BurnOutSharp/ProtectionType/MediaCloQ.cs | 50 ++++++++++++++++++++++-- README.md | 2 +- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/BurnOutSharp/FileType/Textfile.cs b/BurnOutSharp/FileType/Textfile.cs index 21b315bd..7a6c9e3c 100644 --- a/BurnOutSharp/FileType/Textfile.cs +++ b/BurnOutSharp/FileType/Textfile.cs @@ -87,6 +87,14 @@ namespace BurnOutSharp.FileType else if (fileContent.Contains("serial number is located")) Utilities.AppendToDictionary(protections, file, "CD-Key / Serial"); + // MediaCloQ + if (fileContent.Contains("SunnComm MediaCloQ")) + Utilities.AppendToDictionary(protections, file, "MediaCloQ"); + else if (fileContent.Contains("http://download.mediacloq.com/")) + Utilities.AppendToDictionary(protections, file, "MediaCloQ"); + else if (fileContent.Contains("http://www.sunncomm.com/mediacloq/")) + Utilities.AppendToDictionary(protections, file, "MediaCloQ"); + // MediaMax if (fileContent.Contains("MediaMax technology")) Utilities.AppendToDictionary(protections, file, "MediaMax CD-3"); diff --git a/BurnOutSharp/ProtectionType/MediaCloQ.cs b/BurnOutSharp/ProtectionType/MediaCloQ.cs index 458cdf88..1bfbbd3d 100644 --- a/BurnOutSharp/ProtectionType/MediaCloQ.cs +++ b/BurnOutSharp/ProtectionType/MediaCloQ.cs @@ -1,18 +1,57 @@ -using System.Collections.Concurrent; +using System; +using System.Collections.Concurrent; using System.Collections.Generic; +using BurnOutSharp.ExecutableType.Microsoft.PE; using BurnOutSharp.Interfaces; using BurnOutSharp.Matching; namespace BurnOutSharp.ProtectionType { - public class MediaCloQ : IPathCheck + /// + /// MediaCloQ was a copy protection created by SunnComm to protect music CDs. It's a multisession CD, and all the audio tracks are erroneously marked as data tracks. + /// Unlike other audio CD protections, this one doesn't give you an option to listen to the music off of PC or make "legitimate" copies. + /// It does, however, have a data track containing a message that the CD is protected with MediaCloQ, and directs you to their website to purchase digital copies of the tracks. + /// It appears that a version 2.0 was planned, and maybe even released, but so far no discs with MediaCloQ 2.0 are known (https://www.cdmediaworld.com/hardware/cdrom/cd_protections_mediacloq_v20.shtml, https://www.cdmediaworld.com/hardware/cdrom/news/0108/mediacloq_20.shtml). + /// The only known album to contain MediaCloQ is "Charley Pride - A Tribute to Jim Reeves", with the release that has the barcode "7 816190222-2 4" being confirmed to have it. + /// References and further information: + /// https://www.cdmediaworld.com/hardware/cdrom/cd_protections_mediacloq_v10.shtml + /// https://web.archive.org/web/20190513192224/https://club.myce.com/t/just-some-mediacloq-info/29773 + /// https://myce.wiki/news/MediaCloQ-CD-protection-bypassed-2397/ + /// https://www.cdrfaq.org/faq02.html#S2-4-4 + /// https://www.cnet.com/tech/services-and-software/bmg-tests-unrippable-cds/ + /// + public class MediaCloQ : IPathCheck, IPortableExecutableCheck { + /// + public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) + { + // Get the sections from the executable, if possible + var sections = pex?.SectionTable; + if (sections == null) + return null; + + // Found in scvfy.exe on "Charley Pride - A Tribute to Jim Reeves" (barcode "7 816190222-2 4"). + string name = pex.FileDescription; + if (!string.IsNullOrWhiteSpace(name) && name.StartsWith("scvfy MFC Application", StringComparison.OrdinalIgnoreCase)) + return $"MediaCloQ"; + + // Found in scvfy.exe on "Charley Pride - A Tribute to Jim Reeves" (barcode "7 816190222-2 4"). + name = pex.ProductName; + if (!string.IsNullOrWhiteSpace(name) && name.StartsWith("scvfy Application", StringComparison.OrdinalIgnoreCase)) + return $"MediaCloQ"; + + return null; + } + /// public ConcurrentQueue CheckDirectoryPath(string path, IEnumerable files) { var matchers = new List { - new PathMatchSet(new PathMatch("sunncomm.ico", useEndsWith: true), "MediaCloQ"), + // The file "sunncomm.ico" was previously used a file check, but since it's just an icon of the SunnComm logo, it seems too likely to result in false positives. + + // Found on "Charley Pride - A Tribute to Jim Reeves" (barcode "7 816190222-2 4"). + new PathMatchSet(new PathMatch("scvfy.exe", useEndsWith: true), "MediaCloQ"), }; return MatchUtil.GetAllMatches(files, matchers, any: true); @@ -23,7 +62,10 @@ namespace BurnOutSharp.ProtectionType { var matchers = new List { - new PathMatchSet(new PathMatch("sunncomm.ico", useEndsWith: true), "MediaCloQ"), + // The file "sunncomm.ico" was previously used a file check, but since it's just an icon of the SunnComm logo, it seems too likely to result in false positives. + + // Found on "Charley Pride - A Tribute to Jim Reeves" (barcode "7 816190222-2 4"). + new PathMatchSet(new PathMatch("scvfy.exe", useEndsWith: true), "MediaCloQ"), }; return MatchUtil.GetFirstMatch(path, matchers, any: true); diff --git a/README.md b/README.md index a4b1400c..fa346443 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,7 @@ Below is a list of protections detected by BurnOutSharp. The two columns explain | LabelGate CD | True | True | Currently only LabelGate CD2 is detected. | | LibCrypt | True | False | Separate subfile scan only | | LaserLok | True | True | | -| MediaCloQ | False | True | Unconfirmed¹ | +| MediaCloQ | True | True | | | MediaMax CD3 | True | True | | | OpenMG | True | True | | | Origin | True | True | |