Files
BinaryObjectScanner/BinaryObjectScanner.Protection/CrypKey.cs

52 lines
1.9 KiB
C#
Raw Normal View History

using BinaryObjectScanner.Interfaces;
2023-09-16 02:04:47 -04:00
using SabreTools.Serialization.Wrappers;
2022-12-28 23:28:38 -08:00
namespace BinaryObjectScanner.Protection
{
2022-12-28 23:28:38 -08:00
// http://www.crypkey.com/products/cdlock/cdmain.html
// https://github.com/horsicq/Detect-It-Easy/blob/master/db/PE/CrypKey%20Installer.1.sg
// https://github.com/horsicq/Detect-It-Easy/blob/master/db/PE/CrypKey.2.sg
// https://github.com/wolfram77web/app-peid/blob/master/userdb.txt
public class CrypKey : IPortableExecutableCheck
{
2022-12-28 23:28:38 -08:00
/// <inheritdoc/>
2023-09-17 22:37:01 -04:00
#if NET48
2022-12-28 23:28:38 -08:00
public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug)
2023-09-17 22:37:01 -04:00
#else
public string? CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug)
#endif
2022-12-28 23:28:38 -08:00
{
// Get the sections from the executable, if possible
2023-09-17 22:37:01 -04:00
var sections = pex.Model.SectionTable;
2022-12-28 23:28:38 -08:00
if (sections == null)
return null;
// Get the CrypKey version from the VersionInfo, if it exists
string version = pex.GetVersionInfoString("CrypKey Version") ?? string.Empty;
// Found in 'cki32k.dll'
2023-09-17 22:37:01 -04:00
var name = pex.CompanyName;
2022-12-28 23:28:38 -08:00
if (name?.StartsWith("CrypKey") == true)
return $"CrypKey {version}".TrimEnd();
// Found in 'cki32k.dll'
name = pex.FileDescription;
if (name?.StartsWith("CrypKey") == true)
return $"CrypKey {version}".TrimEnd();
// Found in 'cki32k.dll'
name = pex.LegalCopyright;
if (name?.Contains("CrypKey") == true)
return $"CrypKey {version}".TrimEnd();
// Found in 'cki32k.dll'
if (!string.IsNullOrEmpty(version))
return $"CrypKey {version}".TrimEnd();
// TODO: Look into the `.loader`,`.wreloc`, `.widata`, and `.hooks` sections
2022-06-22 09:50:16 -07:00
2022-12-28 23:28:38 -08:00
return null;
}
}
}