using System.Runtime.InteropServices; namespace SabreTools.Models.PortableExecutable { /// /// Overlay data associated with SecuROM executables /// /// /// All information in this file has been researched in a clean room /// environment by using sample from legally obtained software that /// is protected by SecuROM. /// [StructLayout(LayoutKind.Sequential)] public sealed class SecuROMAddD { /// /// "AddD", Identifier? /// public uint Signature; /// /// Unknown (Entry count?) /// /// /// 3 in EXPUNGED, 3.17.00.0017, 3.17.00.0019 /// 3 in 4.47.00.0039, 4.84.00.0054, 4.84.69.0037, 4.84.76.7966, 4.84.76.7968, 4.85.07.0009 /// public uint EntryCount; /// /// Version, always 8 bytes? /// #if NET48 public string Version; #else public string? Version; #endif /// /// Unknown (Build? Formatted as a string) /// #if NET48 public char[] Build; #else public char[]? Build; #endif /// /// Unknown (0x14h), Variable number of bytes before entry table /// /// /// 44 bytes in EXPUNGED, 3.17.00.0017, 3.17.00.0019, 4.47.00.0039 /// 112 bytes in 4.84.00.0054, 4.84.69.0037, 4.84.76.7966, 4.84.76.7968, 4.85.07.0009 /// 112 byte range contains a fixed-length string at 0x2C, possibly a product ID? /// "801400-001" in 4.84.00.0054 /// "594130-001" in 4.84.69.0037 /// "554900-001" in 4.84.76.7966 /// "554900-001" in 4.84.76.7968 /// "548520-001" in 4.85.07.0009 /// #if NET48 public byte[] Unknown14h; #else public byte[]? Unknown14h; #endif /// /// Entry table /// #if NET48 public SecuROMAddDEntry[] Entries; #else public SecuROMAddDEntry[]? Entries; #endif } }