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 | |