From c4f8fa4b0d22435fcc6a0a87f7224e24f5084453 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 10 Sep 2020 21:10:32 -0700 Subject: [PATCH] Location, Location, Location (#11) * Add index to all content checks * Get mostly onto byte arrays * Migrate as much as possible to byte array * Minor cleanup * Cleanup comments, fix search * Safer CABs and auto-log on test * Comments and better SecuROM * Cleanup, Wise Detection, archives * Minor fixes * Add externals, cleanup README * Add WiseUnpacker * Add Wise extraction * Better separation of special file format handling * Consistent licencing * Add to README * Fix StartsWith * Fix Valve scanning * Fix build * Remove old TODO * Fix BFPK extraction * More free decompression formats * Fix EVORE * Fix LibCrypt detection * Fix EVORE deletion --- BurnOutSharp.sln | 3 +- BurnOutSharp/BurnOutSharp.csproj | 39 +- BurnOutSharp/BurnOutSharp.nuspec | 3 +- BurnOutSharp/EVORE.cs | 150 +- .../External/HLLib/HLExtract.Net/HLLib.cs | 1663 +++++++++++++++++ .../External/HLLib/HLExtract.Net/Program.cs | 1158 ++++++++++++ .../External/StormLibSharp/MpqArchive.cs | 414 ++++ .../MpqArchiveCompactingEventArgs.cs | 49 + .../External/StormLibSharp/MpqFileStream.cs | 185 ++ .../StormLibSharp/Native/Callbacks.cs | 17 + .../Native/MpqArchiveSafeHandle.cs | 26 + .../StormLibSharp/Native/MpqFileSafeHandle.cs | 27 + .../StormLibSharp/Native/NativeMethods.cs | 497 +++++ .../StormLibSharp/Native/SFileInfoClass.cs | 70 + .../Native/SFileOpenArchiveFlags.cs | 26 + .../StormLibSharp/Native/Win32Methods.cs | 60 + BurnOutSharp/External/psxt001z/LibCrypt.cs | 4 +- BurnOutSharp/FileType/BFPK.cs | 122 ++ BurnOutSharp/FileType/BZip2.cs | 67 + BurnOutSharp/FileType/Executable.cs | 254 +++ BurnOutSharp/FileType/GZIP.cs | 70 + BurnOutSharp/FileType/InstallShieldCAB.cs | 82 + BurnOutSharp/FileType/MPQ.cs | 78 + BurnOutSharp/FileType/MicrosoftCAB.cs | 66 + BurnOutSharp/FileType/PKZIP.cs | 79 + BurnOutSharp/FileType/RAR.cs | 75 + BurnOutSharp/FileType/SevenZip.cs | 70 + BurnOutSharp/FileType/TapeArchive.cs | 73 + BurnOutSharp/FileType/Textfile.cs | 63 + BurnOutSharp/FileType/Valve.cs | 82 + BurnOutSharp/FileType/XZ.cs | 66 + BurnOutSharp/HLLib.x64.dll | Bin 0 -> 224256 bytes BurnOutSharp/HLLib.x86.dll | Bin 0 -> 187392 bytes BurnOutSharp/ProtectionFind.cs | 524 +----- BurnOutSharp/ProtectionType/ActiveMARK.cs | 18 +- BurnOutSharp/ProtectionType/AlphaROM.cs | 8 +- BurnOutSharp/ProtectionType/Armadillo.cs | 14 +- BurnOutSharp/ProtectionType/CDCheck.cs | 14 +- BurnOutSharp/ProtectionType/CDCops.cs | 33 +- BurnOutSharp/ProtectionType/CDLock.cs | 12 +- BurnOutSharp/ProtectionType/CDSHiELDSE.cs | 8 +- .../ProtectionType/CengaProtectDVD.cs | 8 +- BurnOutSharp/ProtectionType/CodeLock.cs | 24 +- BurnOutSharp/ProtectionType/CopyKiller.cs | 8 +- BurnOutSharp/ProtectionType/Cucko.cs | 10 +- BurnOutSharp/ProtectionType/DVDCops.cs | 30 +- BurnOutSharp/ProtectionType/EACdKey.cs | 8 +- BurnOutSharp/ProtectionType/EXEStealth.cs | 12 +- BurnOutSharp/ProtectionType/GFWL.cs | 8 +- BurnOutSharp/ProtectionType/ImpulseReactor.cs | 22 +- BurnOutSharp/ProtectionType/InnoSetup.cs | 69 +- BurnOutSharp/ProtectionType/JoWooDXProt.cs | 51 +- BurnOutSharp/ProtectionType/KeyLock.cs | 8 +- BurnOutSharp/ProtectionType/LaserLock.cs | 104 +- BurnOutSharp/ProtectionType/PECompact.cs | 8 +- BurnOutSharp/ProtectionType/PSXAntiModchip.cs | 16 +- BurnOutSharp/ProtectionType/ProtectDisc.cs | 228 +-- BurnOutSharp/ProtectionType/RingPROTECH.cs | 8 +- BurnOutSharp/ProtectionType/SVKProtector.cs | 8 +- BurnOutSharp/ProtectionType/SafeDisc.cs | 88 +- BurnOutSharp/ProtectionType/SafeLock.cs | 8 +- BurnOutSharp/ProtectionType/SecuROM.cs | 172 +- BurnOutSharp/ProtectionType/SmartE.cs | 8 +- BurnOutSharp/ProtectionType/SolidShield.cs | 154 +- BurnOutSharp/ProtectionType/StarForce.cs | 67 +- BurnOutSharp/ProtectionType/Sysiphus.cs | 45 +- BurnOutSharp/ProtectionType/Tages.cs | 54 +- BurnOutSharp/ProtectionType/ThreePLock.cs | 22 +- .../ProtectionType/VOBProtectCDDVD.cs | 106 +- BurnOutSharp/ProtectionType/WTMCDProtect.cs | 8 +- BurnOutSharp/ProtectionType/WiseInstaller.cs | 63 + .../ProtectionType/XtremeProtector.cs | 8 +- BurnOutSharp/ProtectionType/dotFuscator.cs | 8 +- BurnOutSharp/StormLib.dll | Bin 0 -> 1630720 bytes BurnOutSharp/Utilities.cs | 60 + LICENSE | 149 +- README.md | 13 +- Test/Program.cs | 9 +- 78 files changed, 6598 insertions(+), 1343 deletions(-) create mode 100644 BurnOutSharp/External/HLLib/HLExtract.Net/HLLib.cs create mode 100644 BurnOutSharp/External/HLLib/HLExtract.Net/Program.cs create mode 100644 BurnOutSharp/External/StormLibSharp/MpqArchive.cs create mode 100644 BurnOutSharp/External/StormLibSharp/MpqArchiveCompactingEventArgs.cs create mode 100644 BurnOutSharp/External/StormLibSharp/MpqFileStream.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/Callbacks.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/MpqArchiveSafeHandle.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/MpqFileSafeHandle.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/NativeMethods.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/SFileInfoClass.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/SFileOpenArchiveFlags.cs create mode 100644 BurnOutSharp/External/StormLibSharp/Native/Win32Methods.cs create mode 100644 BurnOutSharp/FileType/BFPK.cs create mode 100644 BurnOutSharp/FileType/BZip2.cs create mode 100644 BurnOutSharp/FileType/Executable.cs create mode 100644 BurnOutSharp/FileType/GZIP.cs create mode 100644 BurnOutSharp/FileType/InstallShieldCAB.cs create mode 100644 BurnOutSharp/FileType/MPQ.cs create mode 100644 BurnOutSharp/FileType/MicrosoftCAB.cs create mode 100644 BurnOutSharp/FileType/PKZIP.cs create mode 100644 BurnOutSharp/FileType/RAR.cs create mode 100644 BurnOutSharp/FileType/SevenZip.cs create mode 100644 BurnOutSharp/FileType/TapeArchive.cs create mode 100644 BurnOutSharp/FileType/Textfile.cs create mode 100644 BurnOutSharp/FileType/Valve.cs create mode 100644 BurnOutSharp/FileType/XZ.cs create mode 100644 BurnOutSharp/HLLib.x64.dll create mode 100644 BurnOutSharp/HLLib.x86.dll create mode 100644 BurnOutSharp/ProtectionType/WiseInstaller.cs create mode 100644 BurnOutSharp/StormLib.dll diff --git a/BurnOutSharp.sln b/BurnOutSharp.sln index c82b3e74..a746e821 100644 --- a/BurnOutSharp.sln +++ b/BurnOutSharp.sln @@ -3,12 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 16 VisualStudioVersion = 16.0.29306.81 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BurnOutSharp", "BurnOutSharp\BurnOutSharp.csproj", "{1DA4212E-6071-4951-B45D-BB74A7838246}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BurnOutSharp", "BurnOutSharp\BurnOutSharp.csproj", "{1DA4212E-6071-4951-B45D-BB74A7838246}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Test", "Test\Test.csproj", "{88735BA2-778D-4192-8EB2-FFF6843719E2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{68D10531-99CB-40B1-8912-73FA286C9433}" ProjectSection(SolutionItems) = preProject + LICENSE = LICENSE README.md = README.md EndProjectSection EndProject diff --git a/BurnOutSharp/BurnOutSharp.csproj b/BurnOutSharp/BurnOutSharp.csproj index ebcbb478..afd1cb05 100644 --- a/BurnOutSharp/BurnOutSharp.csproj +++ b/BurnOutSharp/BurnOutSharp.csproj @@ -1,27 +1,40 @@  - net462;net472;netcoreapp3.0 + net462;net472;net48;netcoreapp3.0 false + + true + + - - 0.6.16 - - - 0.9.10 - - - 1.4.2.3 - - - 1.0.4 - + + + + + + + + + + + Always + + + Always + + + Always + + + Always + diff --git a/BurnOutSharp/BurnOutSharp.nuspec b/BurnOutSharp/BurnOutSharp.nuspec index 4c01cc2f..db2fc01d 100644 --- a/BurnOutSharp/BurnOutSharp.nuspec +++ b/BurnOutSharp/BurnOutSharp.nuspec @@ -1,5 +1,5 @@ - + BurnOutSharp 1.03.9.1 @@ -16,6 +16,7 @@ + diff --git a/BurnOutSharp/EVORE.cs b/BurnOutSharp/EVORE.cs index 48e63462..601e493d 100644 --- a/BurnOutSharp/EVORE.cs +++ b/BurnOutSharp/EVORE.cs @@ -57,120 +57,115 @@ namespace BurnOutSharp return startingprocess; } - private static string MakeTempFile(string file, string sExtension = ".exe") + private static string MakeTempFile(byte[] fileContent, string sExtension = ".exe") { - if (file == null || !File.Exists(file)) - return string.Empty; - - FileInfo filei = new FileInfo(file); + string filei = Guid.NewGuid().ToString(); + string tempPath = Path.Combine(Path.GetTempPath(), "tmp", $"{filei}{sExtension}"); try { - File.Delete(Path.Combine(Path.GetTempPath(), "tmp", filei.Name + "*" + sExtension)); + File.Delete(tempPath); } catch { } - filei = filei.CopyTo(Path.GetTempPath() + "tmp" + filei.Name + Directory.GetFiles(Path.GetTempPath(), "tmp" + filei.Name + "*" + sExtension).Length + sExtension, true); - filei.Attributes = FileAttributes.Temporary | FileAttributes.NotContentIndexed; - return filei.FullName; + + Directory.CreateDirectory(Path.GetDirectoryName(tempPath)); + using (BinaryWriter bw = new BinaryWriter(File.OpenWrite(tempPath))) + { + bw.Write(fileContent); + } + + return Path.GetFullPath(tempPath); } - private static bool IsEXE(string file) + private static bool IsEXE(byte[] fileContent) { - if (file == null || !File.Exists(file)) - return false; + int PEHeaderOffset = BitConverter.ToInt32(fileContent, 60); + short Characteristics = BitConverter.ToInt16(fileContent, PEHeaderOffset + 22); - BinaryReader breader = new BinaryReader(File.OpenRead(file)); - breader.ReadBytes(60); - int PEHeaderOffset = breader.ReadInt32(); - breader.BaseStream.Seek(PEHeaderOffset, SeekOrigin.Begin); - breader.ReadBytes(22); - short Characteristics = breader.ReadInt16(); - breader.Close(); - //check if file is dll + // Check if file is dll if ((Characteristics & 0x2000) == 0x2000) return false; else return true; } - private static string[] CopyDependentDlls(string exefile) + private static string[] CopyDependentDlls(string file, byte[] fileContent) { - if (exefile == null) - return null; + Section[] sections = ReadSections(fileContent); - FileInfo fiExe = new FileInfo(exefile); - Section[] sections = ReadSections(exefile); - BinaryReader breader = new BinaryReader(File.OpenRead(exefile), Encoding.Default); long lastPosition; string[] saDependentDLLs = null; - breader.ReadBytes(60); - int PEHeaderOffset = breader.ReadInt32(); - breader.BaseStream.Seek(PEHeaderOffset + 120 + 8, SeekOrigin.Begin); //120 Bytes till IMAGE_DATA_DIRECTORY array,8 Bytes=size of IMAGE_DATA_DIRECTORY - uint ImportTableRVA = breader.ReadUInt32(); - uint ImportTableSize = breader.ReadUInt32(); - breader.BaseStream.Seek(RVA2Offset(ImportTableRVA, sections), SeekOrigin.Begin); - breader.BaseStream.Seek(12, SeekOrigin.Current); - uint DllNameRVA = breader.ReadUInt32(); + int index = 60; + int PEHeaderOffset = BitConverter.ToInt32(fileContent, index); + index = PEHeaderOffset + 120 + 8; //120 Bytes till IMAGE_DATA_DIRECTORY array,8 Bytes=size of IMAGE_DATA_DIRECTORY + uint ImportTableRVA = BitConverter.ToUInt32(fileContent, index); + index += 4; + uint ImportTableSize = BitConverter.ToUInt32(fileContent, index); + index = (int)RVA2Offset(ImportTableRVA, sections); + index += 12; + uint DllNameRVA = BitConverter.ToUInt32(fileContent, index); + index += 4; while (DllNameRVA != 0) { string sDllName = ""; byte bChar; - lastPosition = breader.BaseStream.Position; + lastPosition = index; uint DLLNameOffset = RVA2Offset(DllNameRVA, sections); if (DLLNameOffset > 0) { - breader.BaseStream.Seek(DLLNameOffset, SeekOrigin.Begin); - if (breader.PeekChar() > -1) + index = (int)DLLNameOffset; + if ((char)fileContent[index] > -1) { do { - bChar = breader.ReadByte(); + bChar = fileContent[index]; + index++; sDllName += (char)bChar; - } while (bChar != 0 && breader.PeekChar() > -1); + } while (bChar != 0 && (char)fileContent[index] > -1); sDllName = sDllName.Remove(sDllName.Length - 1, 1); - if (File.Exists(Path.Combine(fiExe.DirectoryName, sDllName))) + if (File.Exists(Path.Combine(Path.GetDirectoryName(file), sDllName))) { if (saDependentDLLs == null) saDependentDLLs = new string[0]; else saDependentDLLs = new string[saDependentDLLs.Length]; - FileInfo fiDLL = new FileInfo(Path.Combine(fiExe.DirectoryName, sDllName)); + FileInfo fiDLL = new FileInfo(Path.Combine(Path.GetDirectoryName(file), sDllName)); saDependentDLLs[saDependentDLLs.Length - 1] = fiDLL.CopyTo(Path.GetTempPath() + sDllName, true).FullName; } } - breader.BaseStream.Seek(lastPosition, SeekOrigin.Begin); + index = (int)lastPosition; } - breader.BaseStream.Seek(4 + 12, SeekOrigin.Current); - DllNameRVA = breader.ReadUInt32(); + index += 4 + 12; + DllNameRVA = BitConverter.ToUInt32(fileContent, index); + index += 4; } - breader.Close(); return saDependentDLLs; } - private static Section[] ReadSections(string exefile) + private static Section[] ReadSections(byte[] fileContent) { - if (exefile == null) + if (fileContent == null) return null; - BinaryReader breader = new BinaryReader(File.OpenRead(exefile)); - breader.ReadBytes(60); - uint PEHeaderOffset = breader.ReadUInt32(); - breader.BaseStream.Seek(PEHeaderOffset + 6, SeekOrigin.Begin); - ushort NumberOfSections = breader.ReadUInt16(); - breader.BaseStream.Seek(PEHeaderOffset + 120 + 16 * 8, SeekOrigin.Begin); + uint PEHeaderOffset = BitConverter.ToUInt32(fileContent, 60); + ushort NumberOfSections = BitConverter.ToUInt16(fileContent, (int)PEHeaderOffset + 6); Section[] sections = new Section[NumberOfSections]; + int index = (int)PEHeaderOffset + 120 + 16 * 8; for (int i = 0; i < NumberOfSections; i++) { - breader.BaseStream.Seek(8, SeekOrigin.Current); - uint ivs = breader.ReadUInt32(); - uint ivo = breader.ReadUInt32(); - breader.BaseStream.Seek(4, SeekOrigin.Current); - uint iro = breader.ReadUInt32(); - breader.BaseStream.Seek(16, SeekOrigin.Current); + index += 8; + uint ivs = BitConverter.ToUInt32(fileContent, index); + index += 4; + uint ivo = BitConverter.ToUInt32(fileContent, index); + index += 4; + index += 4; + uint iro = BitConverter.ToUInt32(fileContent, index); + index += 4; + index += 16; sections[i] = new Section() { @@ -179,7 +174,7 @@ namespace BurnOutSharp iRawOffset = iro, }; } - breader.Close(); + return sections; } @@ -197,19 +192,15 @@ namespace BurnOutSharp #region "EVORE version-search-functions" - public static string SearchProtectDiscVersion(string file) + public static string SearchProtectDiscVersion(string file, byte[] fileContent) { - if (file == null || !File.Exists(file)) - return string.Empty; - - Process exe = new Process(); - Process[] processes = new Process[0]; string version = ""; DateTime timestart; - if (!IsEXE(file)) + if (!IsEXE(fileContent)) return ""; - string tempexe = MakeTempFile(file); - string[] DependentDlls = CopyDependentDlls(file); + + string tempexe = MakeTempFile(fileContent); + string[] DependentDlls = CopyDependentDlls(file, fileContent); try { File.Delete(Path.Combine(Path.GetTempPath(), "a*.tmp")); @@ -228,9 +219,12 @@ namespace BurnOutSharp } catch { } } - exe = StartSafe(tempexe); + + Process exe = StartSafe(tempexe); if (exe == null) return ""; + + Process[] processes = new Process[0]; timestart = DateTime.Now; do { @@ -242,6 +236,7 @@ namespace BurnOutSharp { files = Directory.GetFiles(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "ProtectDisc"), "p*.dll"); } + if (files != null) { if (files.Length > 0) @@ -326,11 +321,13 @@ namespace BurnOutSharp } catch { } } + try { File.Delete(Path.Combine(Path.GetTempPath(), "a*.tmp")); } catch { } + try { File.Delete(Path.Combine(Path.GetTempPath(), "PCD*.sys")); @@ -355,19 +352,16 @@ namespace BurnOutSharp return version; } - public static string SearchSafeDiscVersion(string file) + public static string SearchSafeDiscVersion(string file, byte[] fileContent) { - if (file == null || !File.Exists(file)) - return string.Empty; - Process exe = new Process(); string version = ""; DateTime timestart; - if (!IsEXE(file)) + if (!IsEXE(fileContent)) return ""; - string tempexe = MakeTempFile(file); - string[] DependentDlls = CopyDependentDlls(file); + string tempexe = MakeTempFile(fileContent); + string[] DependentDlls = CopyDependentDlls(file, fileContent); try { Directory.Delete(Path.Combine(Path.GetTempPath(), "~e*"), true); @@ -419,9 +413,9 @@ namespace BurnOutSharp try { File.Delete(Path.Combine(Path.GetTempPath(), "~e*")); + File.Delete(tempexe); } catch { } - File.Delete(tempexe); if (DependentDlls != null) { diff --git a/BurnOutSharp/External/HLLib/HLExtract.Net/HLLib.cs b/BurnOutSharp/External/HLLib/HLExtract.Net/HLLib.cs new file mode 100644 index 00000000..c3315d05 --- /dev/null +++ b/BurnOutSharp/External/HLLib/HLExtract.Net/HLLib.cs @@ -0,0 +1,1663 @@ +/* + * HLExtract.Net + * Copyright (C) 2008-2012 Ryan Gregg + + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +using System; +using System.Runtime.InteropServices; + +public sealed class HLLib +{ + #region Constants + public const int HL_VERSION_NUMBER = ((2 << 24) | (4 << 16) | (6 << 8) | 0); + public const string HL_VERSION_STRING = "2.4.6"; + + public const uint HL_ID_INVALID = 0xffffffff; + + public const uint HL_DEFAULT_PACKAGE_TEST_BUFFER_SIZE = 8; + public const uint HL_DEFAULT_VIEW_SIZE = 131072; + public const uint HL_DEFAULT_COPY_BUFFER_SIZE = 131072; + #endregion + + #region Enumerations + public enum HLOption : uint + { + HL_VERSION = 0, + HL_ERROR, + HL_ERROR_SYSTEM, + HL_ERROR_SHORT_FORMATED, + HL_ERROR_LONG_FORMATED, + HL_PROC_OPEN, + HL_PROC_CLOSE, + HL_PROC_READ, + HL_PROC_WRITE, + HL_PROC_SEEK, + HL_PROC_TELL, + HL_PROC_SIZE, + HL_PROC_EXTRACT_ITEM_START, + HL_PROC_EXTRACT_ITEM_END, + HL_PROC_EXTRACT_FILE_PROGRESS, + HL_PROC_VALIDATE_FILE_PROGRESS, + HL_OVERWRITE_FILES, + HL_PACKAGE_BOUND, + HL_PACKAGE_ID, + HL_PACKAGE_SIZE, + HL_PACKAGE_TOTAL_ALLOCATIONS, + HL_PACKAGE_TOTAL_MEMORY_ALLOCATED, + HL_PACKAGE_TOTAL_MEMORY_USED, + HL_READ_ENCRYPTED, + HL_FORCE_DEFRAGMENT, + HL_PROC_DEFRAGMENT_PROGRESS, + HL_PROC_DEFRAGMENT_PROGRESS_EX, + HL_PROC_SEEK_EX, + HL_PROC_TELL_EX, + HL_PROC_SIZE_EX + } + + public enum HLFileMode : uint + { + HL_MODE_INVALID = 0x00, + HL_MODE_READ = 0x01, + HL_MODE_WRITE = 0x02, + HL_MODE_CREATE = 0x04, + HL_MODE_VOLATILE = 0x08, + HL_MODE_NO_FILEMAPPING = 0x10, + HL_MODE_QUICK_FILEMAPPING = 0x20 + } + + public enum HLSeekMode : uint + { + HL_SEEK_BEGINNING = 0, + HL_SEEK_CURRENT, + HL_SEEK_END + } + + public enum HLDirectoryItemType : uint + { + HL_ITEM_NONE = 0, + HL_ITEM_FOLDER, + HL_ITEM_FILE + } + + public enum HLSortOrder : uint + { + HL_ORDER_ASCENDING = 0, + HL_ORDER_DESCENDING + } + + public enum HLSortField : uint + { + HL_FIELD_NAME = 0, + HL_FIELD_SIZE + } + + public enum HLFindType : uint + { + HL_FIND_FILES = 0x01, + HL_FIND_FOLDERS = 0x02, + HL_FIND_NO_RECURSE = 0x04, + HL_FIND_CASE_SENSITIVE = 0x08, + HL_FIND_MODE_STRING = 0x10, + HL_FIND_MODE_SUBSTRING = 0x20, + HL_FIND_MODE_WILDCARD = 0x00, + HL_FIND_ALL = HL_FIND_FILES | HL_FIND_FOLDERS + } + + public enum HLStreamType : uint + { + HL_STREAM_NONE = 0, + HL_STREAM_FILE, + HL_STREAM_GCF, + HL_STREAM_MAPPING, + HL_STREAM_MEMORY, + HL_STREAM_PROC, + HL_STREAM_NULL + } + + public enum HLMappingType : uint + { + HL_MAPPING_NONE = 0, + HL_MAPPING_FILE, + HL_MAPPING_MEMORY, + HL_MAPPING_STREAM + } + + public enum HLPackageType : uint + { + HL_PACKAGE_NONE = 0, + HL_PACKAGE_BSP, + HL_PACKAGE_GCF, + HL_PACKAGE_PAK, + HL_PACKAGE_VBSP, + HL_PACKAGE_WAD, + HL_PACKAGE_XZP, + HL_PACKAGE_ZIP, + HL_PACKAGE_NCF, + HL_PACKAGE_VPK, + HL_PACKAGE_SGA + } + + public enum HLAttributeType : uint + { + HL_ATTRIBUTE_INVALID = 0, + HL_ATTRIBUTE_BOOLEAN, + HL_ATTRIBUTE_INTEGER, + HL_ATTRIBUTE_UNSIGNED_INTEGER, + HL_ATTRIBUTE_FLOAT, + HL_ATTRIBUTE_STRING + } + + public enum HLPackageAttribute : uint + { + HL_BSP_PACKAGE_VERSION = 0, + HL_BSP_PACKAGE_COUNT, + HL_BSP_ITEM_WIDTH = 0, + HL_BSP_ITEM_HEIGHT, + HL_BSP_ITEM_PALETTE_ENTRIES, + HL_BSP_ITEM_COUNT, + + HL_GCF_PACKAGE_VERSION = 0, + HL_GCF_PACKAGE_ID, + HL_GCF_PACKAGE_ALLOCATED_BLOCKS, + HL_GCF_PACKAGE_USED_BLOCKS, + HL_GCF_PACKAGE_BLOCK_LENGTH, + HL_GCF_PACKAGE_LAST_VERSION_PLAYED, + HL_GCF_PACKAGE_COUNT, + HL_GCF_ITEM_ENCRYPTED = 0, + HL_GCF_ITEM_COPY_LOCAL, + HL_GCF_ITEM_OVERWRITE_LOCAL, + HL_GCF_ITEM_BACKUP_LOCAL, + HL_GCF_ITEM_FLAGS, + HL_GCF_ITEM_FRAGMENTATION, + HL_GCF_ITEM_COUNT, + + HL_NCF_PACKAGE_VERSION = 0, + HL_NCF_PACKAGE_ID, + HL_NCF_PACKAGE_LAST_VERSION_PLAYED, + HL_NCF_PACKAGE_COUNT, + HL_NCF_ITEM_ENCRYPTED = 0, + HL_NCF_ITEM_COPY_LOCAL, + HL_NCF_ITEM_OVERWRITE_LOCAL, + HL_NCF_ITEM_BACKUP_LOCAL, + HL_NCF_ITEM_FLAGS, + HL_NCF_ITEM_COUNT, + + HL_PAK_PACKAGE_COUNT = 0, + HL_PAK_ITEM_COUNT = 0, + + HL_SGA_PACKAGE_VERSION_MAJOR = 0, + HL_SGA_PACKAGE_VERSION_MINOR, + HL_SGA_PACKAGE_MD5_FILE, + HL_SGA_PACKAGE_NAME, + HL_SGA_PACKAGE_MD5_HEADER, + HL_SGA_PACKAGE_COUNT, + HL_SGA_ITEM_SECTION_ALIAS = 0, + HL_SGA_ITEM_SECTION_NAME, + HL_SGA_ITEM_MODIFIED, + HL_SGA_ITEM_TYPE, + HL_SGA_ITEM_CRC, + HL_SGA_ITEM_VERIFICATION, + HL_SGA_ITEM_COUNT, + + HL_VBSP_PACKAGE_VERSION = 0, + HL_VBSP_PACKAGE_MAP_REVISION, + HL_VBSP_PACKAGE_COUNT, + HL_VBSP_ITEM_VERSION = 0, + HL_VBSP_ITEM_FOUR_CC, + HL_VBSP_ZIP_PACKAGE_DISK, + HL_VBSP_ZIP_PACKAGE_COMMENT, + HL_VBSP_ZIP_ITEM_CREATE_VERSION, + HL_VBSP_ZIP_ITEM_EXTRACT_VERSION, + HL_VBSP_ZIP_ITEM_FLAGS, + HL_VBSP_ZIP_ITEM_COMPRESSION_METHOD, + HL_VBSP_ZIP_ITEM_CRC, + HL_VBSP_ZIP_ITEM_DISK, + HL_VBSP_ZIP_ITEM_COMMENT, + HL_VBSP_ITEM_COUNT, + + HL_VPK_PACKAGE_COUNT = 0, + HL_VPK_ITEM_PRELOAD_BYTES = 0, + HL_VPK_ITEM_ARCHIVE, + HL_VPK_ITEM_CRC, + HL_VPK_ITEM_COUNT, + + HL_WAD_PACKAGE_VERSION = 0, + HL_WAD_PACKAGE_COUNT, + HL_WAD_ITEM_WIDTH = 0, + HL_WAD_ITEM_HEIGHT, + HL_WAD_ITEM_PALETTE_ENTRIES, + HL_WAD_ITEM_MIPMAPS, + HL_WAD_ITEM_COMPRESSED, + HL_WAD_ITEM_TYPE, + HL_WAD_ITEM_COUNT, + + HL_XZP_PACKAGE_VERSION = 0, + HL_XZP_PACKAGE_PRELOAD_BYTES, + HL_XZP_PACKAGE_COUNT, + HL_XZP_ITEM_CREATED = 0, + HL_XZP_ITEM_PRELOAD_BYTES, + HL_XZP_ITEM_COUNT, + + HL_ZIP_PACKAGE_DISK = 0, + HL_ZIP_PACKAGE_COMMENT, + HL_ZIP_PACKAGE_COUNT, + HL_ZIP_ITEM_CREATE_VERSION = 0, + HL_ZIP_ITEM_EXTRACT_VERSION, + HL_ZIP_ITEM_FLAGS, + HL_ZIP_ITEM_COMPRESSION_METHOD, + HL_ZIP_ITEM_CRC, + HL_ZIP_ITEM_DISK, + HL_ZIP_ITEM_COMMENT, + HL_ZIP_ITEM_COUNT + } + + public enum HLValidation + { + HL_VALIDATES_OK = 0, + HL_VALIDATES_ASSUMED_OK, + HL_VALIDATES_INCOMPLETE, + HL_VALIDATES_CORRUPT, + HL_VALIDATES_CANCELED, + HL_VALIDATES_ERROR + } + #endregion + + #region Structures + [StructLayout(LayoutKind.Sequential,Pack=1,Size=512)] + public struct HLAttribute + { + public HLAttributeType eAttributeType; + [MarshalAs(UnmanagedType.ByValArray, SizeConst=252)] + public byte[] lpName; + [MarshalAs(UnmanagedType.ByValArray, SizeConst=256)] + public byte[] lpValue; + + public string GetName() + { + int iLength = 0; + while(lpName[iLength] != 0) + { + iLength++; + } + try + { + return System.Text.Encoding.ASCII.GetString(lpName, 0, iLength); + } + catch + { + return string.Empty; + } + } + + public object GetData() + { + switch (eAttributeType) + { + case HLAttributeType.HL_ATTRIBUTE_BOOLEAN: + return hlAttributeGetBoolean(ref this); + case HLAttributeType.HL_ATTRIBUTE_INTEGER: + return hlAttributeGetInteger(ref this); + case HLAttributeType.HL_ATTRIBUTE_UNSIGNED_INTEGER: + return hlAttributeGetUnsignedInteger(ref this); + case HLAttributeType.HL_ATTRIBUTE_FLOAT: + return hlAttributeGetFloat(ref this); + case HLAttributeType.HL_ATTRIBUTE_STRING: + return hlAttributeGetString(ref this); + default: + return null; + } + } + + public override string ToString() + { + switch (eAttributeType) + { + case HLAttributeType.HL_ATTRIBUTE_BOOLEAN: + return hlAttributeGetBoolean(ref this).ToString(); + case HLAttributeType.HL_ATTRIBUTE_INTEGER: + return hlAttributeGetInteger(ref this).ToString("#,##0"); + case HLAttributeType.HL_ATTRIBUTE_UNSIGNED_INTEGER: + if (lpValue[4] == 0) + { + return hlAttributeGetUnsignedInteger(ref this).ToString("#,##0"); + } + else // Display as hexadecimal. + { + return "0x" + hlAttributeGetUnsignedInteger(ref this).ToString("x8"); + } + case HLAttributeType.HL_ATTRIBUTE_FLOAT: + return hlAttributeGetFloat(ref this).ToString("#,##0.00000000"); + case HLAttributeType.HL_ATTRIBUTE_STRING: + return hlAttributeGetString(ref this); + default: + return string.Empty; + } + } + } + #endregion + + #region Callback Functions + // + // Important: Callback functions cannot use IntPtr. Instead, I use [MarshalAs(UnmanagedType.I4)]int. + // Convert IntPtr objects using IntPtr.ToInt32(). Convert int objects to IntPtr using new IntPtr(int). + // This obviously only works on 32 bit builds of HLLib. + // + + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + [return:MarshalAs(UnmanagedType.U1)] + public delegate bool HLOpenProc(uint uiMode, IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + [return:MarshalAs(UnmanagedType.U1)] + public delegate bool HLCloseProc(IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate uint HLReadProc(IntPtr lpData, uint uiBytes, IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate uint HLWriteProc(IntPtr lpData, uint uiBytes, IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate uint HLSeekProc(long iOffset, HLSeekMode eSeekMode, IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate ulong HLSeekExProc(Int64 iOffset, HLSeekMode eSeekMode, IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate uint HLTellProc(IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate ulong HLTellExProc(IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate uint HLSizeProc(IntPtr pUserData); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate ulong HLSizeExProc(IntPtr pUserData); + + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate void HLExtractItemStartProc(IntPtr pItem); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate void HLExtractItemEndProc(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bSuccess); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate void HLExtractFileProgressProc(IntPtr pFile, uint uiBytesExtracted, uint uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool bCancel); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate void HLValidateFileProgressProc(IntPtr pFile, uint uiBytesValidated, uint uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool pCancel); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate void HLDefragmentFileProgressProc(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, uint uiBytesDefragmented, uint uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool pCancel); + [UnmanagedFunctionPointerAttribute(CallingConvention.Cdecl)] + public delegate void HLDefragmentFileProgressExProc(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, UInt64 uiBytesDefragmented, UInt64 uiBytesTotal, [MarshalAs(UnmanagedType.U1)]ref bool pCancel); + #endregion + + #region Functions + public static bool IsWow64() + { + return IntPtr.Size == 8; + } + + // + // VTFLib + // + + public static void hlInitialize() + { + if (IsWow64()) x64.hlInitialize(); else x86.hlInitialize(); + } + public static void hlShutdown() + { + if (IsWow64()) x64.hlShutdown(); else x86.hlShutdown(); + } + + // + // Get/Set + // + + public static bool hlGetBoolean(HLOption eOption) + { + if (IsWow64()) return x64.hlGetBoolean(eOption); else return x86.hlGetBoolean(eOption); + } + public static bool hlGetBooleanValidate(HLOption eOption, out bool pValue) + { + if (IsWow64()) return x64.hlGetBooleanValidate(eOption, out pValue); else return x86.hlGetBooleanValidate(eOption, out pValue); + } + public static void hlSetBoolean(HLOption eOption, bool bValue) + { + if (IsWow64()) x64.hlSetBoolean(eOption, bValue); else x86.hlSetBoolean(eOption, bValue); + } + + public static int hlGetInteger(HLOption eOption) + { + if (IsWow64()) return x64.hlGetInteger(eOption); else return x86.hlGetInteger(eOption); + } + public static bool hlGetIntegerValidate(HLOption eOption, out int pValue) + { + if (IsWow64()) return x64.hlGetIntegerValidate(eOption, out pValue); else return x86.hlGetIntegerValidate(eOption, out pValue); + } + public static void hlSetInteger(HLOption eOption, int iValue) + { + if (IsWow64()) x64.hlSetInteger(eOption, iValue); else x86.hlSetInteger(eOption, iValue); + } + + public static uint hlGetUnsignedInteger(HLOption eOption) + { + if (IsWow64()) return x64.hlGetUnsignedInteger(eOption); else return x86.hlGetUnsignedInteger(eOption); + } + public static bool hlGetUnsignedIntegerValidate(HLOption eOption, out uint pValue) + { + if (IsWow64()) return x64.hlGetUnsignedIntegerValidate(eOption, out pValue); else return x86.hlGetUnsignedIntegerValidate(eOption, out pValue); + } + public static void hlSetUnsignedInteger(HLOption eOption, uint uiValue) + { + if (IsWow64()) x64.hlSetUnsignedInteger(eOption, uiValue); else x86.hlSetUnsignedInteger(eOption, uiValue); + } + + public static long hlGetLong(HLOption eOption) + { + if (IsWow64()) return x64.hlGetLong(eOption); else return x86.hlGetLong(eOption); + } + public static bool hlGetLongValidate(HLOption eOption, out long pValue) + { + if (IsWow64()) return x64.hlGetLongValidate(eOption, out pValue); else return x86.hlGetLongValidate(eOption, out pValue); + } + public static void hlSetLong(HLOption eOption, long iValue) + { + if (IsWow64()) x64.hlSetLong(eOption, iValue); else x86.hlSetLong(eOption, iValue); + } + + public static ulong hlGetUnsignedLong(HLOption eOption) + { + if (IsWow64()) return x64.hlGetUnsignedLong(eOption); else return x86.hlGetUnsignedLong(eOption); + } + public static bool hlGetUnsignedLongValidate(HLOption eOption, out ulong pValue) + { + if (IsWow64()) return x64.hlGetUnsignedLongValidate(eOption, out pValue); else return x86.hlGetUnsignedLongValidate(eOption, out pValue); + } + public static void hlSetUnsignedLong(HLOption eOption, ulong uiValue) + { + if (IsWow64()) x64.hlSetUnsignedLong(eOption, uiValue); else x86.hlSetUnsignedLong(eOption, uiValue); + } + + public static float hlGetFloat(HLOption eOption) + { + if (IsWow64()) return x64.hlGetFloat(eOption); else return x86.hlGetFloat(eOption); + } + public static bool hlGetFloatValidate(HLOption eOption, out float pValue) + { + if (IsWow64()) return x64.hlGetFloatValidate(eOption, out pValue); else return x86.hlGetFloatValidate(eOption, out pValue); + } + public static void hlSetFloat(HLOption eOption, float pValue) + { + if (IsWow64()) x64.hlSetFloat(eOption, pValue); else x86.hlSetFloat(eOption, pValue); + } + + public static string hlGetString(HLOption eOption) + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlGetString(eOption); else lpString = x86.hlGetString(eOption); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static bool hlGetStringValidate(HLOption eOption, out string pValue) + { + if (IsWow64()) return x64.hlGetStringValidate(eOption, out pValue); else return x86.hlGetStringValidate(eOption, out pValue); + } + public static void hlSetString(HLOption eOption, string lpValue) + { + if (IsWow64()) x64.hlSetString(eOption, lpValue); else x86.hlSetString(eOption, lpValue); + } + + public static IntPtr hlGetVoid(HLOption eOption) + { + if (IsWow64()) return x64.hlGetVoid(eOption); else return x86.hlGetVoid(eOption); + } + public static bool hlGetVoidValidate(HLOption eOption, out IntPtr pValue) + { + if (IsWow64()) return x64.hlGetVoidValidate(eOption, out pValue); else return x86.hlGetVoidValidate(eOption, out pValue); + } + public static void hlSetVoid(HLOption eOption, IntPtr lpValue) + { + if (IsWow64()) x64.hlSetVoid(eOption, lpValue); else x86.hlSetVoid(eOption, lpValue); + } + + // + // Attributes + // + + public static bool hlAttributeGetBoolean(ref HLAttribute pAttribute) + { + if (IsWow64()) return x64.hlAttributeGetBoolean(ref pAttribute); else return x86.hlAttributeGetBoolean(ref pAttribute); + } + public static void hlAttributeSetBoolean(ref HLAttribute pAttribute, string lpName, bool bValue) + { + if (IsWow64()) x64.hlAttributeSetBoolean(ref pAttribute, lpName, bValue); else x86.hlAttributeSetBoolean(ref pAttribute, lpName, bValue); + } + + public static int hlAttributeGetInteger(ref HLAttribute pAttribute) + { + if (IsWow64()) return x64.hlAttributeGetInteger(ref pAttribute); else return x86.hlAttributeGetInteger(ref pAttribute); + } + public static void hlAttributeSetInteger(ref HLAttribute pAttribute, string lpName, int iValue) + { + if (IsWow64()) x64.hlAttributeSetInteger(ref pAttribute, lpName, iValue); else x86.hlAttributeSetInteger(ref pAttribute, lpName, iValue); + } + + public static uint hlAttributeGetUnsignedInteger(ref HLAttribute pAttribute) + { + if (IsWow64()) return x64.hlAttributeGetUnsignedInteger(ref pAttribute); else return x86.hlAttributeGetUnsignedInteger(ref pAttribute); + } + public static void hlAttributeSetUnsignedInteger(ref HLAttribute pAttribute, string lpName, uint uiValue, bool bHexadecimal) + { + if (IsWow64()) x64.hlAttributeSetUnsignedInteger(ref pAttribute, lpName, uiValue, bHexadecimal); else x86.hlAttributeSetUnsignedInteger(ref pAttribute, lpName, uiValue, bHexadecimal); + } + + public static float hlAttributeGetFloat(ref HLAttribute pAttribute) + { + if (IsWow64()) return x64.hlAttributeGetFloat(ref pAttribute); else return x86.hlAttributeGetFloat(ref pAttribute); + } + public static void hlAttributeSetFloat(ref HLAttribute pAttribute, string lpName, float fValue) + { + if (IsWow64()) x64.hlAttributeSetFloat(ref pAttribute, lpName, fValue); else x86.hlAttributeSetFloat(ref pAttribute, lpName, fValue); + } + + public static string hlAttributeGetString(ref HLAttribute pAttribute) + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlAttributeGetString(ref pAttribute); else lpString = x86.hlAttributeGetString(ref pAttribute); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static void hlAttributeSetString(ref HLAttribute pAttribute, string lpName, string lpValue) + { + if (IsWow64()) x64.hlAttributeSetString(ref pAttribute, lpName, lpValue); else x86.hlAttributeSetString(ref pAttribute, lpName, lpValue); + } + + // + // Directory Item + // + + public static HLDirectoryItemType hlItemGetType(IntPtr pItem) + { + if (IsWow64()) return x64.hlItemGetType(pItem); else return x86.hlItemGetType(pItem); + } + + public static string hlItemGetName(IntPtr pItem) + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlItemGetName(pItem); else lpString = x86.hlItemGetName(pItem); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static uint hlItemGetID(IntPtr pItem) + { + if (IsWow64()) return x64.hlItemGetID(pItem); else return x86.hlItemGetID(pItem); + } + public static IntPtr hlItemGetData(IntPtr pItem) + { + if (IsWow64()) return x64.hlItemGetData(pItem); else return x86.hlItemGetData(pItem); + } + + public static uint hlItemGetPackage(IntPtr pItem) + { + if (IsWow64()) return x64.hlItemGetPackage(pItem); else return x86.hlItemGetPackage(pItem); + } + public static IntPtr hlItemGetParent(IntPtr pItem) + { + if (IsWow64()) return x64.hlItemGetParent(pItem); else return x86.hlItemGetParent(pItem); + } + + public static bool hlItemGetSize(IntPtr pItem, out uint pSize) + { + if (IsWow64()) return x64.hlItemGetSize(pItem, out pSize); else return x86.hlItemGetSize(pItem, out pSize); + } + public static bool hlItemGetSizeEx(IntPtr pItem, out UInt64 pSize) + { + if (IsWow64()) return x64.hlItemGetSizeEx(pItem, out pSize); else return x86.hlItemGetSizeEx(pItem, out pSize); + } + public static bool hlItemGetSizeOnDisk(IntPtr pItem, out uint pSize) + { + if (IsWow64()) return x64.hlItemGetSizeOnDisk(pItem, out pSize); else return x86.hlItemGetSizeOnDisk(pItem, out pSize); + } + public static bool hlItemGetSizeOnDiskEx(IntPtr pItem, out UInt64 pSize) + { + if (IsWow64()) return x64.hlItemGetSizeOnDiskEx(pItem, out pSize); else return x86.hlItemGetSizeOnDiskEx(pItem, out pSize); + } + + public static bool hlItemGetPath(IntPtr pItem, IntPtr lpPath, uint uiPathSize) + { + if (IsWow64()) return x64.hlItemGetPath(pItem, lpPath, uiPathSize); else return x86.hlItemGetPath(pItem, lpPath, uiPathSize); + } + public static bool hlItemExtract(IntPtr pItem, string lpPath) + { + if (IsWow64()) return x64.hlItemExtract(pItem, lpPath); else return x86.hlItemExtract(pItem, lpPath); + } + + // + // Directory Folder + // + + public static uint hlFolderGetCount(IntPtr pItem) + { + if (IsWow64()) return x64.hlFolderGetCount(pItem); else return x86.hlFolderGetCount(pItem); + } + + public static IntPtr hlFolderGetItem(IntPtr pItem, uint uiIndex) + { + if (IsWow64()) return x64.hlFolderGetItem(pItem, uiIndex); else return x86.hlFolderGetItem(pItem, uiIndex); + } + public static IntPtr hlFolderGetItemByName(IntPtr pItem, string lpName, HLFindType eFind) + { + if (IsWow64()) return x64.hlFolderGetItemByName(pItem, lpName, eFind); else return x86.hlFolderGetItemByName(pItem, lpName, eFind); + } + public static IntPtr hlFolderGetItemByPath(IntPtr pItem, string lpPath, HLFindType eFind) + { + if (IsWow64()) return x64.hlFolderGetItemByPath(pItem, lpPath, eFind); else return x86.hlFolderGetItemByPath(pItem, lpPath, eFind); + } + + public static void hlFolderSort(IntPtr pItem, HLSortField eField, HLSortOrder eOrder, bool bRecurse) + { + if (IsWow64()) x64.hlFolderSort(pItem, eField, eOrder, bRecurse); else x86.hlFolderSort(pItem, eField, eOrder, bRecurse); + } + + public static IntPtr hlFolderFindFirst(IntPtr pFolder, string lpSearch, HLFindType eFind) + { + if (IsWow64()) return x64.hlFolderFindFirst(pFolder, lpSearch, eFind); else return x86.hlFolderFindFirst(pFolder, lpSearch, eFind); + } + public static IntPtr hlFolderFindNext(IntPtr pFolder, IntPtr pItem, string lpSearch, HLFindType eFind) + { + if (IsWow64()) return x64.hlFolderFindNext(pFolder, pItem, lpSearch, eFind); else return x86.hlFolderFindNext(pFolder, pItem, lpSearch, eFind); + } + + public static uint hlFolderGetSize(IntPtr pItem, bool bRecurse) + { + if (IsWow64()) return x64.hlFolderGetSize(pItem, bRecurse); else return x86.hlFolderGetSize(pItem, bRecurse); + } + public static UInt64 hlFolderGetSizeEx(IntPtr pItem, bool bRecurse) + { + if (IsWow64()) return x64.hlFolderGetSizeEx(pItem, bRecurse); else return x86.hlFolderGetSizeEx(pItem, bRecurse); + } + public static uint hlFolderGetSizeOnDisk(IntPtr pItem, bool bRecurse) + { + if (IsWow64()) return x64.hlFolderGetSizeOnDisk(pItem, bRecurse); else return x86.hlFolderGetSizeOnDisk(pItem, bRecurse); + } + public static UInt64 hlFolderGetSizeOnDiskEx(IntPtr pItem, bool bRecurse) + { + if (IsWow64()) return x64.hlFolderGetSizeOnDiskEx(pItem, bRecurse); else return x86.hlFolderGetSizeOnDiskEx(pItem, bRecurse); + } + public static uint hlFolderGetFolderCount(IntPtr pItem, bool bRecurse) + { + if (IsWow64()) return x64.hlFolderGetFolderCount(pItem, bRecurse); else return x86.hlFolderGetFolderCount(pItem, bRecurse); + } + public static uint hlFolderGetFileCount(IntPtr pItem, bool bRecurse) + { + if (IsWow64()) return x64.hlFolderGetFileCount(pItem, bRecurse); else return x86.hlFolderGetFileCount(pItem, bRecurse); + } + + // + // Directory File + // + + public static uint hlFileGetExtractable(IntPtr pItem) + { + if (IsWow64()) return x64.hlFileGetExtractable(pItem); else return x86.hlFileGetExtractable(pItem); + } + public static HLValidation hlFileGetValidation(IntPtr pItem) + { + if (IsWow64()) return x64.hlFileGetValidation(pItem); else return x86.hlFileGetValidation(pItem); + } + public static uint hlFileGetSize(IntPtr pItem) + { + if (IsWow64()) return x64.hlFileGetSize(pItem); else return x86.hlFileGetSize(pItem); + } + public static uint hlFileGetSizeOnDisk(IntPtr pItem) + { + if (IsWow64()) return x64.hlFileGetSizeOnDisk(pItem); else return x86.hlFileGetSizeOnDisk(pItem); + } + + public static bool hlFileCreateStream(IntPtr pItem, out IntPtr pStream) + { + if (IsWow64()) return x64.hlFileCreateStream(pItem, out pStream); else return x86.hlFileCreateStream(pItem, out pStream); + } + public static void hlFileReleaseStream(IntPtr pItem, IntPtr pStream) + { + if (IsWow64()) x64.hlFileReleaseStream(pItem, pStream); else x86.hlFileReleaseStream(pItem, pStream); + } + + // + // Stream + // + + public static HLStreamType hlStreamGetType(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetType(pStream); else return x86.hlStreamGetType(pStream); + } + + public static bool hlStreamGetOpened(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetOpened(pStream); else return x86.hlStreamGetOpened(pStream); + } + public static uint hlStreamGetMode(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetMode(pStream); else return x86.hlStreamGetMode(pStream); + } + + public static bool hlStreamOpen(IntPtr pStream, uint uiMode) + { + if (IsWow64()) return x64.hlStreamOpen(pStream, uiMode); else return x86.hlStreamOpen(pStream, uiMode); + } + public static void hlStreamClose(IntPtr pStream) + { + if (IsWow64()) x64.hlStreamClose(pStream); else x86.hlStreamClose(pStream); + } + + public static uint hlStreamGetStreamSize(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetStreamSize(pStream); else return x86.hlStreamGetStreamSize(pStream); + } + public static ulong hlStreamGetStreamSizeEx(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetStreamSizeEx(pStream); else return x86.hlStreamGetStreamSizeEx(pStream); + } + public static uint hlStreamGetStreamPointer(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetStreamPointer(pStream); else return x86.hlStreamGetStreamPointer(pStream); + } + public static ulong hlStreamGetStreamPointerEx(IntPtr pStream) + { + if (IsWow64()) return x64.hlStreamGetStreamPointerEx(pStream); else return x86.hlStreamGetStreamPointerEx(pStream); + } + + public static uint hlStreamSeek(IntPtr pStream, long iOffset, HLSeekMode eSeekMode) + { + if (IsWow64()) return x64.hlStreamSeek(pStream, iOffset, eSeekMode); else return x86.hlStreamSeek(pStream, iOffset, eSeekMode); + } + public static ulong hlStreamSeekEx(IntPtr pStream, long iOffset, HLSeekMode eSeekMode) + { + if (IsWow64()) return x64.hlStreamSeekEx(pStream, iOffset, eSeekMode); else return x86.hlStreamSeekEx(pStream, iOffset, eSeekMode); + } + + public static bool hlStreamReadChar(IntPtr pStream, out char pChar) + { + if (IsWow64()) return x64.hlStreamReadChar(pStream, out pChar); else return x86.hlStreamReadChar(pStream, out pChar); + } + public static uint hlStreamRead(IntPtr pStream, IntPtr lpData, uint uiBytes) + { + if (IsWow64()) return x64.hlStreamRead(pStream, lpData, uiBytes); else return x86.hlStreamRead(pStream, lpData, uiBytes); + } + + public static bool hlStreamWriteChar(IntPtr pStream, char iChar) + { + if (IsWow64()) return x64.hlStreamWriteChar(pStream, iChar); else return x86.hlStreamWriteChar(pStream, iChar); + } + public static uint hlStreamWrite(IntPtr pStream, IntPtr lpData, uint uiBytes) + { + if (IsWow64()) return x64.hlStreamWrite(pStream, lpData, uiBytes); else return x86.hlStreamWrite(pStream, lpData, uiBytes); + } + + // + // Package + // + + public static bool hlBindPackage(uint uiPackage) + { + if (IsWow64()) return x64.hlBindPackage(uiPackage); else return x86.hlBindPackage(uiPackage); + } + + public static HLPackageType hlGetPackageTypeFromName(string lpName) + { + if (IsWow64()) return x64.hlGetPackageTypeFromName(lpName); else return x86.hlGetPackageTypeFromName(lpName); + } + public static HLPackageType hlGetPackageTypeFromMemory(IntPtr lpBuffer, uint uiBufferSize) + { + if (IsWow64()) return x64.hlGetPackageTypeFromMemory(lpBuffer, uiBufferSize); else return x86.hlGetPackageTypeFromMemory(lpBuffer, uiBufferSize); + } + public static HLPackageType hlGetPackageTypeFromStream(IntPtr pStream) + { + if (IsWow64()) return x64.hlGetPackageTypeFromStream(pStream); else return x86.hlGetPackageTypeFromStream(pStream); + } + + public static bool hlCreatePackage(HLPackageType ePackageType, out uint uiPackage) + { + if (IsWow64()) return x64.hlCreatePackage(ePackageType, out uiPackage); else return x86.hlCreatePackage(ePackageType, out uiPackage); + } + public static void hlDeletePackage(uint uiPackage) + { + if (IsWow64()) x64.hlDeletePackage(uiPackage); else x86.hlDeletePackage(uiPackage); + } + + public static HLPackageType hlPackageGetType() + { + if (IsWow64()) return x64.hlPackageGetType(); else return x86.hlPackageGetType(); + } + public static string hlPackageGetExtension() + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlPackageGetExtension(); else lpString = x86.hlPackageGetExtension(); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static string hlPackageGetDescription() + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlPackageGetDescription(); else lpString = x86.hlPackageGetDescription(); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + + public static bool hlPackageGetOpened() + { + if (IsWow64()) return x64.hlPackageGetOpened(); else return x86.hlPackageGetOpened(); + } + + public static bool hlPackageOpenFile(string lpFileName, uint uiMode) + { + if (IsWow64()) return x64.hlPackageOpenFile(lpFileName, uiMode); else return x86.hlPackageOpenFile(lpFileName, uiMode); + } + public static bool hlPackageOpenMemory(IntPtr lpData, uint uiBufferSize, uint uiMode) + { + if (IsWow64()) return x64.hlPackageOpenMemory(lpData, uiBufferSize, uiMode); else return x86.hlPackageOpenMemory(lpData, uiBufferSize, uiMode); + } + public static bool hlPackageOpenProc(IntPtr pUserData, uint uiMode) + { + if (IsWow64()) return x64.hlPackageOpenProc(pUserData, uiMode); else return x86.hlPackageOpenProc(pUserData, uiMode); + } + public static bool hlPackageOpenStream(IntPtr pStream, uint uiMode) + { + if (IsWow64()) return x64.hlPackageOpenStream(pStream, uiMode); else return x86.hlPackageOpenStream(pStream, uiMode); + } + public static void hlPackageClose() + { + if (IsWow64()) x64.hlPackageClose(); else x86.hlPackageClose(); + } + + public static bool hlPackageDefragment() + { + if (IsWow64()) return x64.hlPackageDefragment(); else return x86.hlPackageDefragment(); + } + + public static IntPtr hlPackageGetRoot() + { + if (IsWow64()) return x64.hlPackageGetRoot(); else return x86.hlPackageGetRoot(); + } + + public static uint hlPackageGetAttributeCount() + { + if (IsWow64()) return x64.hlPackageGetAttributeCount(); else return x86.hlPackageGetAttributeCount(); + } + public static string hlPackageGetAttributeName(HLPackageAttribute eAttribute) + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlPackageGetAttributeName(eAttribute); else lpString = x86.hlPackageGetAttributeName(eAttribute); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static bool hlPackageGetAttribute(HLPackageAttribute eAttribute, out HLAttribute pAttribute) + { + if (IsWow64()) return x64.hlPackageGetAttribute(eAttribute, out pAttribute); else return x86.hlPackageGetAttribute(eAttribute, out pAttribute); + } + + public static uint hlPackageGetItemAttributeCount() + { + if (IsWow64()) return x64.hlPackageGetItemAttributeCount(); else return x86.hlPackageGetItemAttributeCount(); + } + public static string hlPackageGetItemAttributeName(HLPackageAttribute eAttribute) + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlPackageGetItemAttributeName(eAttribute); else lpString = x86.hlPackageGetItemAttributeName(eAttribute); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static bool hlPackageGetItemAttribute(IntPtr pItem, HLPackageAttribute eAttribute, out HLAttribute pAttribute) + { + if (IsWow64()) return x64.hlPackageGetItemAttribute(pItem, eAttribute, out pAttribute); else return x86.hlPackageGetItemAttribute(pItem, eAttribute, out pAttribute); + } + + public static bool hlPackageGetExtractable(IntPtr pItem, out bool pExtractable) + { + if (IsWow64()) return x64.hlPackageGetExtractable(pItem, out pExtractable); else return x86.hlPackageGetExtractable(pItem, out pExtractable); + } + public static bool hlPackageGetFileSize(IntPtr pItem, out uint pSize) + { + if (IsWow64()) return x64.hlPackageGetFileSize(pItem, out pSize); else return x86.hlPackageGetFileSize(pItem, out pSize); + } + public static bool hlPackageGetFileSizeOnDisk(IntPtr pItem, out uint pSize) + { + if (IsWow64()) return x64.hlPackageGetFileSizeOnDisk(pItem, out pSize); else return x86.hlPackageGetFileSizeOnDisk(pItem, out pSize); + } + public static bool hlPackageCreateStream(IntPtr pItem, out IntPtr pStream) + { + if (IsWow64()) return x64.hlPackageCreateStream(pItem, out pStream); else return x86.hlPackageCreateStream(pItem, out pStream); + } + public static void hlPackageReleaseStream(IntPtr pStream) + { + if (IsWow64()) x64.hlPackageReleaseStream(pStream); else x86.hlPackageReleaseStream(pStream); + } + + public static string hlNCFFileGetRootPath() + { + IntPtr lpString; + if (IsWow64()) lpString = x64.hlNCFFileGetRootPath(); else lpString = x86.hlNCFFileGetRootPath(); + return lpString == IntPtr.Zero ? string.Empty : Marshal.PtrToStringAnsi(lpString); + } + public static void hlNCFFileSetRootPath(string lpRootPath) + { + if (IsWow64()) x64.hlNCFFileSetRootPath(lpRootPath); else x86.hlNCFFileSetRootPath(lpRootPath); + } + + public static bool hlWADFileGetImageSizePaletted(IntPtr pItem, out uint uiPaletteDataSize, out uint uiPixelDataSize) + { + if (IsWow64()) return x64.hlWADFileGetImageSizePaletted(pItem, out uiPaletteDataSize, out uiPixelDataSize); else return x86.hlWADFileGetImageSizePaletted(pItem, out uiPaletteDataSize, out uiPixelDataSize); + } + public static bool hlWADFileGetImageDataPaletted(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPaletteData, out IntPtr lpPixelData) + { + if (IsWow64()) return x64.hlWADFileGetImageDataPaletted(pItem, out uiWidth, out uiHeight, out lpPaletteData, out lpPixelData); else return x86.hlWADFileGetImageDataPaletted(pItem, out uiWidth, out uiHeight, out lpPaletteData, out lpPixelData); + } + public static bool hlWADFileGetImageSize(IntPtr pItem, out uint uiPixelDataSize) + { + if (IsWow64()) return x64.hlWADFileGetImageSize(pItem, out uiPixelDataSize); else return x86.hlWADFileGetImageSize(pItem, out uiPixelDataSize); + } + public static bool hlWADFileGetImageData(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPixelData) + { + if (IsWow64()) return x64.hlWADFileGetImageData(pItem, out uiWidth, out uiHeight, out lpPixelData); else return x86.hlWADFileGetImageData(pItem, out uiWidth, out uiHeight, out lpPixelData); + } + + private static class x86 + { + // + // VTFLib + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlInitialize(); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlShutdown(); + + // + // Get/Set + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetBoolean(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetBooleanValidate(HLOption eOption, [MarshalAs(UnmanagedType.U1)]out bool pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetBoolean(HLOption eOption, [MarshalAs(UnmanagedType.U1)]bool bValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern int hlGetInteger(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetIntegerValidate(HLOption eOption, out int pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetInteger(HLOption eOption, int iValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlGetUnsignedInteger(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetUnsignedIntegerValidate(HLOption eOption, out uint pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetUnsignedInteger(HLOption eOption, uint uiValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLong")] + public static extern long hlGetLong(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLongValidate")] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetLongValidate(HLOption eOption, out long pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetLongLong")] + public static extern void hlSetLong(HLOption eOption, long iValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLong")] + public static extern ulong hlGetUnsignedLong(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLongValidate")] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetUnsignedLongValidate(HLOption eOption, out ulong pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetUnsignedLongLong")] + public static extern void hlSetUnsignedLong(HLOption eOption, ulong uiValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern float hlGetFloat(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetFloatValidate(HLOption eOption, out float pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetFloat(HLOption eOption, float pValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlGetString(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetStringValidate(HLOption eOption, out string pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetString(HLOption eOption, [MarshalAs(UnmanagedType.LPStr)]string lpValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlGetVoid(HLOption eOption); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetVoidValidate(HLOption eOption, out IntPtr pValue); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetVoid(HLOption eOption, IntPtr lpValue); + + // + // Attributes + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlAttributeGetBoolean(ref HLAttribute pAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetBoolean(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.U1)]bool bValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern int hlAttributeGetInteger(ref HLAttribute pAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, int iValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlAttributeGetUnsignedInteger(ref HLAttribute pAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetUnsignedInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, uint uiValue, [MarshalAs(UnmanagedType.U1)]bool bHexadecimal); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern float hlAttributeGetFloat(ref HLAttribute pAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetFloat(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, float fValue); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlAttributeGetString(ref HLAttribute pAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetString(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.LPStr)]string lpValue); + + // + // Directory Item + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLDirectoryItemType hlItemGetType(IntPtr pItem); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + //[return: MarshalAs(UnmanagedType.LPStr)] + public static extern IntPtr hlItemGetName(IntPtr pItem); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlItemGetID(IntPtr pItem); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlItemGetData(IntPtr pItem); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlItemGetPackage(IntPtr pItem); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlItemGetParent(IntPtr pItem); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSize(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSizeEx(IntPtr pItem, out UInt64 pSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSizeOnDisk(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSizeOnDiskEx(IntPtr pItem, out UInt64 pSize); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetPath(IntPtr pItem, IntPtr lpPath, uint uiPathSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemExtract(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath); + + // + // Directory Folder + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetCount(IntPtr pItem); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderGetItem(IntPtr pItem, uint uiIndex); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderGetItemByName(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpName, HLFindType eFind); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderGetItemByPath(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath, HLFindType eFind); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlFolderSort(IntPtr pItem, HLSortField eField, HLSortOrder eOrder, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderFindFirst(IntPtr pFolder, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderFindNext(IntPtr pFolder, IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetSize(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern UInt64 hlFolderGetSizeEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetSizeOnDisk(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern UInt64 hlFolderGetSizeOnDiskEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetFolderCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetFileCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + + // + // Directory File + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFileGetExtractable(IntPtr pItem); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLValidation hlFileGetValidation(IntPtr pItem); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFileGetSize(IntPtr pItem); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFileGetSizeOnDisk(IntPtr pItem); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlFileCreateStream(IntPtr pItem, out IntPtr pStream); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlFileReleaseStream(IntPtr pItem, IntPtr pStream); + + // + // Stream + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLStreamType hlStreamGetType(IntPtr pStream); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamGetOpened(IntPtr pStream); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamGetMode(IntPtr pStream); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamOpen(IntPtr pStream, uint uiMode); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlStreamClose(IntPtr pStream); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamGetStreamSize(IntPtr pStream); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern ulong hlStreamGetStreamSizeEx(IntPtr pStream); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamGetStreamPointer(IntPtr pStream); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern ulong hlStreamGetStreamPointerEx(IntPtr pStream); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamSeek(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern ulong hlStreamSeekEx(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamReadChar(IntPtr pStream, out char pChar); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamRead(IntPtr pStream, IntPtr lpData, uint uiBytes); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamWriteChar(IntPtr pStream, char iChar); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamWrite(IntPtr pStream, IntPtr lpData, uint uiBytes); + + // + // Package + // + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlBindPackage(uint uiPackage); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlGetPackageTypeFromName([MarshalAs(UnmanagedType.LPStr)]string lpName); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlGetPackageTypeFromMemory(IntPtr lpBuffer, uint uiBufferSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlGetPackageTypeFromStream(IntPtr pStream); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlCreatePackage(HLPackageType ePackageType, out uint uiPackage); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlDeletePackage(uint uiPackage); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlPackageGetType(); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetExtension(); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetDescription(); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetOpened(); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenFile([MarshalAs(UnmanagedType.LPStr)]string lpFileName, uint uiMode); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenMemory(IntPtr lpData, uint uiBufferSize, uint uiMode); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenProc(IntPtr pUserData, uint uiMode); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenStream(IntPtr pStream, uint uiMode); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlPackageClose(); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageDefragment(); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetRoot(); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlPackageGetAttributeCount(); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetAttributeName(HLPackageAttribute eAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetAttribute(HLPackageAttribute eAttribute, out HLAttribute pAttribute); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlPackageGetItemAttributeCount(); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetItemAttributeName(HLPackageAttribute eAttribute); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetItemAttribute(IntPtr pItem, HLPackageAttribute eAttribute, out HLAttribute pAttribute); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetExtractable(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]out bool pExtractable); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetFileSize(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetFileSizeOnDisk(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageCreateStream(IntPtr pItem, out IntPtr pStream); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlPackageReleaseStream(IntPtr pStream); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlNCFFileGetRootPath(); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlNCFFileSetRootPath([MarshalAs(UnmanagedType.LPStr)]string lpRootPath); + + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageSizePaletted(IntPtr pItem, out uint uiPaletteDataSize, out uint uiPixelDataSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageDataPaletted(IntPtr pItemm, out uint uiWidth, out uint uiHeight, out IntPtr lpPaletteData, out IntPtr lpPixelData); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageSize(IntPtr pItem, out uint uiPixelDataSize); + [DllImport("HLLib.x86.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageData(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPixelData); + } + + private static class x64 + { + // + // VTFLib + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlInitialize(); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlShutdown(); + + // + // Get/Set + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetBoolean(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetBooleanValidate(HLOption eOption, [MarshalAs(UnmanagedType.U1)]out bool pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetBoolean(HLOption eOption, [MarshalAs(UnmanagedType.U1)]bool bValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern int hlGetInteger(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetIntegerValidate(HLOption eOption, out int pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetInteger(HLOption eOption, int iValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlGetUnsignedInteger(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetUnsignedIntegerValidate(HLOption eOption, out uint pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetUnsignedInteger(HLOption eOption, uint uiValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLong")] + public static extern long hlGetLong(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetLongLongValidate")] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetLongValidate(HLOption eOption, out long pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetLongLong")] + public static extern void hlSetLong(HLOption eOption, long iValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLong")] + public static extern ulong hlGetUnsignedLong(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlGetUnsignedLongLongValidate")] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetUnsignedLongValidate(HLOption eOption, out ulong pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "hlSetUnsignedLongLong")] + public static extern void hlSetUnsignedLong(HLOption eOption, ulong uiValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern float hlGetFloat(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetFloatValidate(HLOption eOption, out float pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetFloat(HLOption eOption, float pValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlGetString(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetStringValidate(HLOption eOption, out string pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetString(HLOption eOption, [MarshalAs(UnmanagedType.LPStr)]string lpValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlGetVoid(HLOption eOption); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlGetVoidValidate(HLOption eOption, out IntPtr pValue); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlSetVoid(HLOption eOption, IntPtr lpValue); + + // + // Attributes + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlAttributeGetBoolean(ref HLAttribute pAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetBoolean(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.U1)]bool bValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern int hlAttributeGetInteger(ref HLAttribute pAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, int iValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlAttributeGetUnsignedInteger(ref HLAttribute pAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetUnsignedInteger(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, uint uiValue, [MarshalAs(UnmanagedType.U1)]bool bHexadecimal); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern float hlAttributeGetFloat(ref HLAttribute pAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetFloat(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, float fValue); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlAttributeGetString(ref HLAttribute pAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlAttributeSetString(ref HLAttribute pAttribute, [MarshalAs(UnmanagedType.LPStr)]string lpName, [MarshalAs(UnmanagedType.LPStr)]string lpValue); + + // + // Directory Item + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLDirectoryItemType hlItemGetType(IntPtr pItem); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + //[return: MarshalAs(UnmanagedType.LPStr)] + public static extern IntPtr hlItemGetName(IntPtr pItem); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlItemGetID(IntPtr pItem); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlItemGetData(IntPtr pItem); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlItemGetPackage(IntPtr pItem); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlItemGetParent(IntPtr pItem); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSize(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSizeEx(IntPtr pItem, out UInt64 pSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSizeOnDisk(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetSizeOnDiskEx(IntPtr pItem, out UInt64 pSize); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemGetPath(IntPtr pItem, IntPtr lpPath, uint uiPathSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlItemExtract(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath); + + // + // Directory Folder + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetCount(IntPtr pItem); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderGetItem(IntPtr pItem, uint uiIndex); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderGetItemByName(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpName, HLFindType eFind); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderGetItemByPath(IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpPath, HLFindType eFind); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlFolderSort(IntPtr pItem, HLSortField eField, HLSortOrder eOrder, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderFindFirst(IntPtr pFolder, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlFolderFindNext(IntPtr pFolder, IntPtr pItem, [MarshalAs(UnmanagedType.LPStr)]string lpSearch, HLFindType eFind); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetSize(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern UInt64 hlFolderGetSizeEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetSizeOnDisk(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern UInt64 hlFolderGetSizeOnDiskEx(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetFolderCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFolderGetFileCount(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]bool bRecurse); + + // + // Directory File + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFileGetExtractable(IntPtr pItem); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLValidation hlFileGetValidation(IntPtr pItem); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFileGetSize(IntPtr pItem); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlFileGetSizeOnDisk(IntPtr pItem); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlFileCreateStream(IntPtr pItem, out IntPtr pStream); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlFileReleaseStream(IntPtr pItem, IntPtr pStream); + + // + // Stream + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLStreamType hlStreamGetType(IntPtr pStream); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamGetOpened(IntPtr pStream); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamGetMode(IntPtr pStream); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamOpen(IntPtr pStream, uint uiMode); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlStreamClose(IntPtr pStream); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamGetStreamSize(IntPtr pStream); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern ulong hlStreamGetStreamSizeEx(IntPtr pStream); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamGetStreamPointer(IntPtr pStream); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern ulong hlStreamGetStreamPointerEx(IntPtr pStream); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamSeek(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern ulong hlStreamSeekEx(IntPtr pStream, long iOffset, HLSeekMode eSeekMode); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamReadChar(IntPtr pStream, out char pChar); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamRead(IntPtr pStream, IntPtr lpData, uint uiBytes); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlStreamWriteChar(IntPtr pStream, char iChar); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlStreamWrite(IntPtr pStream, IntPtr lpData, uint uiBytes); + + // + // Package + // + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlBindPackage(uint uiPackage); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlGetPackageTypeFromName([MarshalAs(UnmanagedType.LPStr)]string lpName); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlGetPackageTypeFromMemory(IntPtr lpBuffer, uint uiBufferSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlGetPackageTypeFromStream(IntPtr pStream); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlCreatePackage(HLPackageType ePackageType, out uint uiPackage); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlDeletePackage(uint uiPackage); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern HLPackageType hlPackageGetType(); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetExtension(); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetDescription(); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetOpened(); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenFile([MarshalAs(UnmanagedType.LPStr)]string lpFileName, uint uiMode); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenMemory(IntPtr lpData, uint uiBufferSize, uint uiMode); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenProc(IntPtr pUserData, uint uiMode); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageOpenStream(IntPtr pStream, uint uiMode); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlPackageClose(); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageDefragment(); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetRoot(); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlPackageGetAttributeCount(); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetAttributeName(HLPackageAttribute eAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetAttribute(HLPackageAttribute eAttribute, out HLAttribute pAttribute); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern uint hlPackageGetItemAttributeCount(); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlPackageGetItemAttributeName(HLPackageAttribute eAttribute); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetItemAttribute(IntPtr pItem, HLPackageAttribute eAttribute, out HLAttribute pAttribute); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetExtractable(IntPtr pItem, [MarshalAs(UnmanagedType.U1)]out bool pExtractable); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetFileSize(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageGetFileSizeOnDisk(IntPtr pItem, out uint pSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlPackageCreateStream(IntPtr pItem, out IntPtr pStream); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlPackageReleaseStream(IntPtr pStream); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern IntPtr hlNCFFileGetRootPath(); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + public static extern void hlNCFFileSetRootPath([MarshalAs(UnmanagedType.LPStr)]string lpRootPath); + + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageSizePaletted(IntPtr pItem, out uint uiPaletteDataSize, out uint uiPixelDataSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageDataPaletted(IntPtr pItemm, out uint uiWidth, out uint uiHeight, out IntPtr lpPaletteData, out IntPtr lpPixelData); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageSize(IntPtr pItem, out uint uiPixelDataSize); + [DllImport("HLLib.x64.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)] + [return: MarshalAs(UnmanagedType.U1)] + public static extern bool hlWADFileGetImageData(IntPtr pItem, out uint uiWidth, out uint uiHeight, out IntPtr lpPixelData); + } + #endregion +} diff --git a/BurnOutSharp/External/HLLib/HLExtract.Net/Program.cs b/BurnOutSharp/External/HLLib/HLExtract.Net/Program.cs new file mode 100644 index 00000000..9be92f8e --- /dev/null +++ b/BurnOutSharp/External/HLLib/HLExtract.Net/Program.cs @@ -0,0 +1,1158 @@ +/* + * HLExtract.Net + * Copyright (C) 2008-2010 Ryan Gregg + + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Runtime.InteropServices; + +namespace HLExtract.Net +{ + public class HLExtractProgram + { + static bool bSilent = false; + static bool bPause = true; + static string sDestination = string.Empty; + + public static int Process(string[] args) + { + // Arguments. + string sPackage = string.Empty; + List Commands = new List(); + string sNCFRootPath = string.Empty; + + bool bFileMapping = false; + bool bQuickFileMapping = false; + bool bVolatileAccess = false; + bool bWriteAccess = false; + bool bOverwriteFiles = true; + + // Package stuff. + HLLib.HLPackageType ePackageType = HLLib.HLPackageType.HL_PACKAGE_NONE; + uint uiPackage = HLLib.HL_ID_INVALID; + uint uiMode = (uint)HLLib.HLFileMode.HL_MODE_INVALID; + + if(HLLib.hlGetUnsignedInteger(HLLib.HLOption.HL_VERSION) < HLLib.HL_VERSION_NUMBER) + { + //Console.WriteLine("Wrong HLLib version: v{0}.", HLLib.hlGetString(HLLib.HLOption.HL_VERSION)); + return 1; + } + + // Process switches. + if(args.Length == 1) + { + sPackage = args[0]; + } + else + { + for(int i = 0; i < args.Length; i++) + { + if(string.Equals(args[i], "-p", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--package", StringComparison.CurrentCultureIgnoreCase)) + { + if(sPackage.Length == 0 && i + 1 < args.Length) + { + sPackage = args[++i]; + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-d", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--dest", StringComparison.CurrentCultureIgnoreCase)) + { + if(sDestination.Length == 0 && i + 1 < args.Length) + { + sDestination = args[++i]; + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-x", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--execute", StringComparison.CurrentCultureIgnoreCase)) + { + if(sDestination.Length == 0 && i + 1 < args.Length) + { + Commands.Add(args[++i]); + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-n", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--ncfroot", StringComparison.CurrentCultureIgnoreCase)) + { + if(sNCFRootPath.Length == 0 && i + 1 < args.Length) + { + sNCFRootPath = args[++i]; + } + else + { + PrintUsage(); + return 2; + } + } + else if(string.Equals(args[i], "-s", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--silent", StringComparison.CurrentCultureIgnoreCase)) + { + bSilent = true; + } + else if(string.Equals(args[i], "-u", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--no-pause", StringComparison.CurrentCultureIgnoreCase)) + { + bPause = false; + } + else if(string.Equals(args[i], "-m", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--filemapping", StringComparison.CurrentCultureIgnoreCase)) + { + bFileMapping = true; + } + else if(string.Equals(args[i], "-q", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--quick-filemapping", StringComparison.CurrentCultureIgnoreCase)) + { + bFileMapping = true; + bQuickFileMapping = true; + } + else if(string.Equals(args[i], "-v", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--volatile", StringComparison.CurrentCultureIgnoreCase)) + { + bVolatileAccess = true; + } + else if(string.Equals(args[i], "-w", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--write", StringComparison.CurrentCultureIgnoreCase)) + { + bWriteAccess = true; + } + else if(string.Equals(args[i], "-o", StringComparison.CurrentCultureIgnoreCase) || string.Equals(args[i], "--no-overwrite", StringComparison.CurrentCultureIgnoreCase)) + { + bOverwriteFiles = false; + } + else + { + PrintUsage(); + return 2; + } + } + } + + // Make sure we have something to do. + if(sPackage.Length == 0) + { + PrintUsage(); + return 2; + } + + // If the destination directory is not specified, make it the input directory. + if(sDestination.Length == 0) + { + int iIndex = sPackage.LastIndexOfAny(new char[]{'\\', '/'}); + if(iIndex != -1) + { + sDestination = sPackage.Substring(0, iIndex + 1); + } + } + + HLLib.hlInitialize(); + + // Keep the delegates alive so they don't get garbage collected. + HLLib.HLExtractItemStartProc HLExtractItemStartProc = new HLLib.HLExtractItemStartProc(ExtractItemStartCallback); + HLLib.HLExtractItemEndProc HLExtractItemEndProc = new HLLib.HLExtractItemEndProc(ExtractItemEndCallback); + HLLib.HLExtractFileProgressProc HLExtractFileProgressProc = new HLLib.HLExtractFileProgressProc(FileProgressCallback); + HLLib.HLValidateFileProgressProc HLValidateFileProgressProc = new HLLib.HLValidateFileProgressProc(FileProgressCallback); + HLLib.HLDefragmentFileProgressExProc HLDefragmentFileProgressProc = new HLLib.HLDefragmentFileProgressExProc(DefragmentProgressCallback); + + HLLib.hlSetBoolean(HLLib.HLOption.HL_OVERWRITE_FILES, bOverwriteFiles); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_ITEM_START, Marshal.GetFunctionPointerForDelegate(HLExtractItemStartProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_ITEM_END, Marshal.GetFunctionPointerForDelegate(HLExtractItemEndProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_EXTRACT_FILE_PROGRESS, Marshal.GetFunctionPointerForDelegate(HLExtractFileProgressProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_VALIDATE_FILE_PROGRESS, Marshal.GetFunctionPointerForDelegate(HLValidateFileProgressProc)); + HLLib.hlSetVoid(HLLib.HLOption.HL_PROC_DEFRAGMENT_PROGRESS_EX, Marshal.GetFunctionPointerForDelegate(HLDefragmentFileProgressProc)); + + // Get the package type from the filename extension. + ePackageType = HLLib.hlGetPackageTypeFromName(sPackage); + + // If the above fails, try getting the package type from the data at the start of the file. + if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NONE && File.Exists(sPackage)) + { + FileStream Reader = null; + try + { + byte[] lpBuffer = new byte[HLLib.HL_DEFAULT_PACKAGE_TEST_BUFFER_SIZE]; + Reader = new FileStream(sPackage, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + int iBytesRead = Reader.Read(lpBuffer, 0, lpBuffer.Length); + if(iBytesRead > 0) + { + IntPtr lpBytesRead = Marshal.AllocHGlobal(iBytesRead); + try + { + Marshal.Copy(lpBuffer, 0, lpBytesRead, iBytesRead); + ePackageType = HLLib.hlGetPackageTypeFromMemory(lpBytesRead, (uint)iBytesRead); + } + finally + { + Marshal.FreeHGlobal(lpBytesRead); + } + } + } + finally + { + if(Reader != null) + { + Reader.Close(); + } + } + } + + if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NONE) + { + //Console.WriteLine("Error loading {0}:", sPackage); + //Console.WriteLine("Unsupported package type."); + + HLLib.hlShutdown(); + Pause(); + return 3; + } + + // Create a package element, the element is allocated by the library and cleaned + // up by the library. An ID is generated which must be bound to apply operations + // to the package. + if(!HLLib.hlCreatePackage(ePackageType, out uiPackage)) + { + //Console.WriteLine("Error loading {0}:", sPackage); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + + HLLib. hlShutdown(); + Pause(); + return 3; + } + + HLLib.hlBindPackage(uiPackage); + + uiMode = (uint)HLLib.HLFileMode.HL_MODE_READ; + uiMode |= !bFileMapping ? (uint)HLLib.HLFileMode.HL_MODE_NO_FILEMAPPING : 0; + uiMode |= bQuickFileMapping ? (uint)HLLib.HLFileMode.HL_MODE_QUICK_FILEMAPPING : 0; + uiMode |= bVolatileAccess ? (uint)HLLib.HLFileMode.HL_MODE_VOLATILE : 0; + uiMode |= bWriteAccess ? (uint)HLLib.HLFileMode.HL_MODE_WRITE : 0; + + // Open the package. + // Of the above modes, only HL_MODE_READ is required. HL_MODE_WRITE is present + // only for future use. File mapping is recommended as an efficient way to load + // packages. Quick file mapping maps the entire file (instead of bits as they are + // needed) and thus should only be used in Windows 2000 and up (older versions of + // Windows have poor virtual memory management which means large files won't be able + // to find a continues block and will fail to load). Volatile access allows HLLib + // to share files with other applications that have those file open for writing. + // This is useful for, say, loading .gcf files while Steam is running. + if(!HLLib.hlPackageOpenFile(sPackage, uiMode)) + { + //Console.WriteLine("Error loading {0}:", sPackage); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + + HLLib. hlShutdown(); + Pause(); + return 3; + } + + // If we have a .ncf file, the package file data is stored externally. In order to + // validate the file data etc., HLLib needs to know where to look. Tell it where. + if(ePackageType == HLLib.HLPackageType.HL_PACKAGE_NCF && sNCFRootPath.Length > 0) + { + HLLib.hlNCFFileSetRootPath(sNCFRootPath); + } + + if(!bSilent) + //Console.WriteLine("{0} opened.", sPackage); + + // Interactive console mode. + EnterConsole(uiPackage, Commands); + + // Close the package. + HLLib.hlPackageClose(); + + if(!bSilent) + //Console.WriteLine("{0} closed.", sPackage); + + // Free up the allocated memory. + HLLib.hlDeletePackage(uiPackage); + + HLLib.hlShutdown(); + + return 0; + } + + static void Pause() + { + if(bPause) + { + //Console.Write("Press any key to continue . . . "); + //Console.ReadKey(true); + } + } + + static void PrintUsage() + { + System.Reflection.AssemblyName Name = System.Reflection.Assembly.GetExecutingAssembly().GetName(); + + //Console.WriteLine("HLExtract.Net v{0}.{1}.{2} using HLLib v{3}", Name.Version.Major, Name.Version.Minor, Name.Version.Build, HLLib.hlGetString(HLLib.HLOption.HL_VERSION)); + //Console.WriteLine(); + //Console.WriteLine("Correct HLExtract.Net usage:"); + //Console.WriteLine(" -p (Package to load.)"); + //Console.WriteLine(" -d (Destination extraction directory.)"); + //Console.WriteLine(" -x (Execute console command.)"); + //Console.WriteLine(" -s (Silent mode.)"); + //Console.WriteLine(" -u (Don't pause on error..)"); + //Console.WriteLine(" -m (Use file mapping.)"); + //Console.WriteLine(" -q (Use quick file mapping.)"); + //Console.WriteLine(" -v (Allow volatile access.)"); + //Console.WriteLine(" -w (Allow write access.)"); + //Console.WriteLine(" -o (Don't overwrite files.)"); + //Console.WriteLine(" -n (NCF file's root path.)"); + //Console.WriteLine(); + //Console.WriteLine("Example HLExtract.Net usage:"); + //Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -d \"C:\\backup\""); + //Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -m -v"); + //Console.WriteLine("HLExtract.Net.exe -p \"C:\\half-life.gcf\" -w -x defragment -x exit"); + //Console.WriteLine(); + //Console.WriteLine("Batching HLExtract.Net:"); + //Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -u -v -x \"info .\" -x exit"); + //Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -s -u -x \"validate .\" -x exit"); + //Console.WriteLine("for %%F in (*.gcf) do HLExtract.Net.exe -p \"%%F\" -s -u -w -x defragment -x exit"); + + Pause(); + } + + static readonly uint MAX_PATH_SIZE = 512; + + static string GetPath(IntPtr pItem) + { + string sPath = string.Empty; + IntPtr lpPath = IntPtr.Zero; + try + { + lpPath = Marshal.AllocHGlobal((int)MAX_PATH_SIZE); + HLLib.hlItemGetPath(pItem, lpPath, MAX_PATH_SIZE); + sPath = Marshal.PtrToStringAnsi(lpPath); + } + finally + { + if(lpPath != IntPtr.Zero) + { + Marshal.FreeHGlobal(lpPath); + } + } + return sPath; + } + +#region Progress Callbacks + static uint uiProgressLast; + + static void ProgressStart() + { + uiProgressLast = 0; + //Console.Write("0%"); + } + + static void ProgressUpdate(UInt64 uiBytesDone, UInt64 uiBytesTotal) + { + if(!bSilent) + { + uint uiProgress = uiBytesTotal == 0 ? 100 : (uint)(uiBytesDone * 100 / uiBytesTotal); + while(uiProgress >= uiProgressLast + 10) + { + uiProgressLast += 10; + if(uiProgressLast == 100) + { + //Console.Write("100% "); + } + else if(uiProgressLast == 50) + { + //Console.Write("50%"); + } + else + { + //Console.Write("."); + } + } + } + } + + static void ExtractItemStartCallback(IntPtr pItem) + { + if(!bSilent) + { + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + //Console.Write(" Extracting {0}: ", HLLib.hlItemGetName(pItem)); + ProgressStart(); + } + else + { + //Console.WriteLine(" Extracting {0}:", HLLib.hlItemGetName(pItem)); + } + } + } + + static void FileProgressCallback(IntPtr pFile, uint uiBytesExtracted, uint uiBytesTotal, ref bool pCancel) + { + ProgressUpdate((UInt64)uiBytesExtracted, (UInt64)uiBytesTotal); + } + + static void ExtractItemEndCallback(IntPtr pItem, bool bSuccess) + { + if(bSuccess) + { + if(!bSilent) + { + uint uiSize = 0; + HLLib.hlItemGetSize(pItem, out uiSize); + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + //Console.WriteLine("OK ({0} B)", uiSize); + } + else + { + //Console.WriteLine(" Done {0}: OK ({1} B)", HLLib.hlItemGetName(pItem), uiSize); + } + } + } + else + { + if(!bSilent) + { + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + //Console.WriteLine("Errored"); + //Console.WriteLine(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + else + { + //Console.WriteLine(" Done {0}: Errored", HLLib.hlItemGetName(pItem)); + } + } + else + { + if(HLLib.hlItemGetType(pItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + //Console.WriteLine(" Error extracting {0}:", GetPath(pItem)); + //Console.WriteLine(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + else + { + //Console.WriteLine(" Error extracting {0}.", GetPath(pItem)); + } + } + } + } + + static void DefragmentProgressCallback(IntPtr pFile, uint uiFilesDefragmented, uint uiFilesTotal, UInt64 uiBytesDefragmented, UInt64 uiBytesTotal, ref bool pCancel) + { + ProgressUpdate(uiBytesDefragmented, uiBytesTotal); + } +#endregion + + static readonly string[] ValidationNames = new string[] { "OK", "Assumed OK", "Incomplete", "Corrupt", "Canceled", "Error" }; + + static string GetValidation(HLLib.HLValidation eValidation) + { + if(eValidation >= HLLib.HLValidation.HL_VALIDATES_OK && eValidation <= HLLib.HLValidation.HL_VALIDATES_ERROR) + { + return ValidationNames[(uint)eValidation]; + } + return string.Empty; + } + + static HLLib.HLValidation Validate(IntPtr pItem) + { + HLLib.HLValidation eValidation = HLLib.HLValidation.HL_VALIDATES_OK, eTest; + + switch(HLLib.hlItemGetType(pItem)) + { + case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: + if(!bSilent) + { + //Console.WriteLine(" Validating {0}:", HLLib.hlItemGetName(pItem)); + } + + uint uiItemCount = HLLib.hlFolderGetCount(pItem); + for(uint i = 0; i < uiItemCount; i++) + { + eTest = Validate(HLLib.hlFolderGetItem(pItem, i)); + if(eTest > eValidation) + { + eValidation = eTest; + } + } + + if(!bSilent) + { + //Console.WriteLine(" Done {0}: {1}", HLLib.hlItemGetName(pItem), GetValidation(eValidation)); + } + break; + case HLLib.HLDirectoryItemType.HL_ITEM_FILE: + if(!bSilent) + { + //Console.Write(" Validating {0}: ", HLLib.hlItemGetName(pItem)); + ProgressStart(); + } + + eValidation = HLLib.hlFileGetValidation(pItem); + + if(bSilent) + { + switch(eValidation) + { + case HLLib.HLValidation.HL_VALIDATES_INCOMPLETE: + case HLLib.HLValidation.HL_VALIDATES_CORRUPT: + //Console.WriteLine(" Validating {0}: {1}", GetPath(pItem), GetValidation(eValidation)); + break; + } + } + else + { + //Console.WriteLine(GetValidation(eValidation)); + } + break; + } + + return eValidation; + } + + static void EnterConsole(uint uiPackage, List Commands) + { + IntPtr pItem = HLLib.hlPackageGetRoot(); + + while(true) + { + string sLine = null; + if(Commands.Count > 0) + { + sLine = Commands[0].Trim().Trim('\''); + + //Console.WriteLine("{0}>{1}", HLLib.hlItemGetName(pItem), sLine); + Commands.RemoveAt(0); + } + else + { + // Command prompt. + //Console.Write("{0}>", HLLib.hlItemGetName(pItem)); + + // Get and parse line. + //sLine = Console.ReadLine().Trim(); + } + if(sLine == null) + { + break; + } + + int iIndex; + for(iIndex = 0; iIndex < sLine.Length; iIndex++) + { + if(!Char.IsLetter(sLine[iIndex])) + { + break; + } + } + + string sCommand, sArgument; + if(iIndex == sLine.Length) + { + sCommand = sLine; + sArgument = string.Empty; + } + else + { + sCommand = sLine.Substring(0, iIndex).TrimEnd(); + sArgument = sLine.Substring(iIndex).TrimStart(); + } + + // Cycle through commands. + + // + // Directory listing. + // Good example of CDirectoryItem::GetType(). + // + if(String.Equals(sCommand, "dir", StringComparison.CurrentCultureIgnoreCase)) + { + uint uiItemCount = HLLib.hlFolderGetCount(pItem); + uint uiFolderCount = 0, uiFileCount = 0; + + //Console.WriteLine("Directory of {0}:", GetPath(pItem)); + + //Console.WriteLine(); + + if(sArgument.Length == 0) + { + // List all items in the current folder. + for(uint i = 0; i < uiItemCount; i++) + { + IntPtr pSubItem = HLLib.hlFolderGetItem(pItem, i); + if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER) + { + uiFolderCount++; + //Console.WriteLine(" <{0}>", HLLib.hlItemGetName(pSubItem)); + } + else if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + uiFileCount++; + //Console.WriteLine(" {0}", HLLib.hlItemGetName(pSubItem)); + } + } + } + else + { + IntPtr pSubItem = HLLib.hlFolderFindFirst(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL | HLLib.HLFindType.HL_FIND_NO_RECURSE); + while(pSubItem != IntPtr.Zero) + { + if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER) + { + uiFolderCount++; + //Console.WriteLine(" <{0}>", HLLib.hlItemGetName(pSubItem)); + } + else if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FILE) + { + uiFileCount++; + //Console.WriteLine(" {0}", HLLib.hlItemGetName(pSubItem)); + } + + pSubItem = HLLib.hlFolderFindNext(pItem, pSubItem, sArgument, HLLib.HLFindType.HL_FIND_ALL | HLLib.HLFindType.HL_FIND_NO_RECURSE); + } + } + + //Console.WriteLine(); + + // Could also have used hlFolderGetFolderCount() and + // hlFolderGetFileCount(). + + //Console.WriteLine("Summary:"); + //Console.WriteLine(); + //Console.WriteLine(" {0} Folder{1}.", uiFolderCount, uiFolderCount != 1 ? "s" : ""); + //Console.WriteLine(" {0} File{1}.", uiFileCount, uiFileCount != 1 ? "s" : ""); + //Console.WriteLine(); + } + // + // Change directory. + // Good example of CDirectoryFolder::GetParent() and item casting. + // + else if(String.Equals(sCommand, "cd", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command cd supplied."); + } + else + { + if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) + { + + } + else if(String.Equals(sArgument, "..", StringComparison.CurrentCultureIgnoreCase)) + { + if(HLLib.hlItemGetParent(pItem) != IntPtr.Zero) + { + pItem = HLLib.hlItemGetParent(pItem); + } + else + { + //Console.WriteLine("Folder does not have a parent."); + } + } + else + { + bool bFound = false; + uint uiItemCount = HLLib.hlFolderGetCount(pItem); + for(uint i = 0; i < uiItemCount; i++) + { + IntPtr pSubItem = HLLib.hlFolderGetItem(pItem, i); + if(HLLib.hlItemGetType(pSubItem) == HLLib.HLDirectoryItemType.HL_ITEM_FOLDER && String.Equals(sArgument, HLLib.hlItemGetName(pSubItem), StringComparison.CurrentCultureIgnoreCase)) + { + bFound = true; + pItem = pSubItem; + break; + } + } + + if(!bFound) + { + //Console.WriteLine("{0} not found.", sArgument); + } + } + } + } + // + // Go to the root folder. + // + else if(String.Equals(sCommand, "root", StringComparison.CurrentCultureIgnoreCase)) + { + pItem = HLLib.hlPackageGetRoot(); + } + // + // Item information. + // Good example of CPackageUtility helper functions. + // + else if(String.Equals(sCommand, "info", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command info supplied."); + } + else + { + IntPtr pSubItem = HLLib.hlFolderGetItemByPath(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + + if(pSubItem != IntPtr.Zero) + { + //Console.WriteLine("Information for {0}:", GetPath(pSubItem)); + //Console.WriteLine(); + + switch(HLLib.hlItemGetType(pSubItem)) + { + case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: + //Console.WriteLine(" Type: Folder"); + //Console.WriteLine(" Size: {0} B", HLLib.hlFolderGetSizeEx(pSubItem, true)); + //Console.WriteLine(" Size On Disk: {0} B", HLLib.hlFolderGetSizeOnDiskEx(pSubItem, true)); + //Console.WriteLine(" Folders: {0}", HLLib.hlFolderGetFolderCount(pSubItem, true)); + //Console.WriteLine(" Files: {0}", HLLib.hlFolderGetFileCount(pSubItem, true)); + break; + case HLLib.HLDirectoryItemType.HL_ITEM_FILE: + //Console.WriteLine(" Type: File"); + //Console.WriteLine(" Extractable: {0}", HLLib.hlFileGetExtractable(pSubItem) != 0 ? "True" : "False"); + ////Console.WriteLine(" Validates: {0}", HLLib.hlFileGetValidates(pSubItem) ? "True" : "False"); + //Console.WriteLine(" Size: {0} B", HLLib.hlFileGetSize(pSubItem)); + //Console.WriteLine(" Size On Disk: {0} B", HLLib.hlFileGetSizeOnDisk(pSubItem)); + break; + } + + uint uiAttributeCount = HLLib.hlPackageGetItemAttributeCount(); + for(uint i = 0; i < uiAttributeCount; i++) + { + HLLib.HLAttribute Attribute; + if(HLLib.hlPackageGetItemAttribute(pSubItem, (HLLib.HLPackageAttribute)i, out Attribute)) + { + if(Attribute.eAttributeType != HLLib.HLAttributeType.HL_ATTRIBUTE_INVALID) + { + //Console.WriteLine(" {0}: {1}", Attribute.GetName(), Attribute.ToString()); + } + } + } + + //Console.WriteLine(); + } + else + { + //Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Extract item. + // Good example of CPackageUtility extract functions. + // + else if(String.Equals(sCommand, "extract", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command extract supplied."); + } + else + { + IntPtr pSubItem; + if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) + { + pSubItem = pItem; + } + else + { + pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + } + + if(pSubItem != IntPtr.Zero) + { + // Extract the item. + // Item is extracted to cDestination\Item->GetName(). + if(!bSilent) + { + //Console.WriteLine("Extracting {0}...", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(); + } + + HLLib.hlItemExtract(pSubItem, sDestination); + + if(!bSilent) + { + //Console.WriteLine(""); + //Console.WriteLine("Done."); + } + } + else + { + //Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Validate item. + // Validates the checksums of each item. + // + else if(String.Equals(sCommand, "validate", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command extract supplied."); + } + else + { + IntPtr pSubItem; + if(String.Equals(sArgument, ".", StringComparison.CurrentCultureIgnoreCase)) + { + pSubItem = pItem; + } + else + { + pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + } + + if(pSubItem != IntPtr.Zero) + { + if(!bSilent) + { + //Console.WriteLine("Validating {0}...", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(); + } + + Validate(pSubItem); + + if(!bSilent) + { + //Console.WriteLine(); + //Console.WriteLine("Done."); + } + } + else + { + //Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Defragment package. + // Validates the checksums of each item. + // + else if(String.Equals(sCommand, "defragment", StringComparison.CurrentCultureIgnoreCase)) + { + bool bForceDefragment = false; + if(sArgument.Length != 0) + { + try + { + bForceDefragment = Convert.ToBoolean(sArgument); + } + catch + { + } + } + + if(!bSilent) + { + //Console.WriteLine("Defragmenting..."); + //Console.WriteLine(); + } + + HLLib.hlSetBoolean(HLLib.HLOption.HL_FORCE_DEFRAGMENT, bForceDefragment); + + //Console.Write(" Progress: "); + ProgressStart(); + if(!HLLib.hlPackageDefragment()) + { + //Console.Write(" {0}", HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + if(!bSilent) + { + //Console.WriteLine(); + + //Console.WriteLine(); + //Console.WriteLine("Done."); + } + } + // + // Find items. + // Good example of recursive directory navigation (Search() function). + // + else if(String.Equals(sCommand, "find", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command find supplied."); + } + else + { + // Search for the requested items. + if(!bSilent) + { + //Console.WriteLine("Searching for {0}...", sArgument); + //Console.WriteLine(); + } + + uint uiFolderCount = 0, uiFileCount = 0; + IntPtr pSubItem = HLLib.hlFolderFindFirst(pItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + while(pSubItem != IntPtr.Zero) + { + switch(HLLib.hlItemGetType(pSubItem)) + { + case HLLib.HLDirectoryItemType.HL_ITEM_FOLDER: + uiFolderCount++; + + //Console.WriteLine(" Found folder: {0}", GetPath(pSubItem)); + break; + case HLLib.HLDirectoryItemType.HL_ITEM_FILE: + uiFileCount++; + + //Console.WriteLine(" Found file: {0}", GetPath(pSubItem)); + break; + } + + pSubItem = HLLib.hlFolderFindNext(pItem, pSubItem, sArgument, HLLib.HLFindType.HL_FIND_ALL); + } + + if(!bSilent) + { + if(uiFolderCount != 0 || uiFileCount != 0) + { + //Console.WriteLine(); + } + + //Console.WriteLine(" {0} folder{1} and {2} file{3} found.", uiFolderCount, uiFolderCount != 1 ? "s" : "", uiFileCount, uiFileCount != 1 ? "s" : ""); + //Console.WriteLine(); + } + } + } + // + // Type files. + // Good example of reading files into memory. + // + else if(String.Equals(sCommand, "type", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command type supplied."); + } + else + { + IntPtr pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_FILES); + + if(pSubItem != IntPtr.Zero) + { + if(!bSilent) + { + //Console.WriteLine("Type for {0}:", GetPath(pSubItem)); + //Console.WriteLine(); + } + + IntPtr pStream; + if(HLLib.hlFileCreateStream(pSubItem, out pStream)) + { + if(HLLib.hlStreamOpen(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) + { + char iChar; + while(HLLib.hlStreamReadChar(pStream, out iChar)) + { + if((iChar >= ' ' && iChar <= '~') || iChar == '\n' || iChar == '\t') + { + //Console.Write(iChar); + } + } + + HLLib.hlStreamClose(pStream); + } + else + { + //Console.WriteLine("Error typing {0}:", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlFileReleaseStream(pSubItem, pStream); + } + else + { + //Console.WriteLine("Error typing {0}:", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + if(!bSilent) + { + //Console.WriteLine(); + //Console.WriteLine("Done."); + } + } + else + { + //Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Open item. + // Good example of opening packages inside packages. + // + else if(String.Equals(sCommand, "open", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command open supplied."); + } + else + { + IntPtr pSubItem = HLLib.hlFolderGetItemByName(pItem, sArgument, HLLib.HLFindType.HL_FIND_FILES); + + if(pSubItem != IntPtr.Zero) + { + IntPtr pStream; + if(HLLib.hlFileCreateStream(pSubItem, out pStream)) + { + if(HLLib.hlStreamOpen(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) + { + HLLib.HLPackageType ePackageType = HLLib.hlGetPackageTypeFromStream(pStream); + + uint uiSubPackage; + if(HLLib.hlCreatePackage(ePackageType, out uiSubPackage)) + { + HLLib.hlBindPackage(uiSubPackage); + if(HLLib.hlPackageOpenStream(pStream, (uint)HLLib.HLFileMode.HL_MODE_READ)) + { + if(!bSilent) + //Console.WriteLine("{0} opened.", HLLib.hlItemGetName(pSubItem)); + + EnterConsole(uiSubPackage, Commands); + + HLLib.hlPackageClose(); + + if (!bSilent) + { + //Console.WriteLine("{0} closed.", HLLib.hlItemGetName(pSubItem)); + } + } + else + { + //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlDeletePackage(uiSubPackage); + + HLLib.hlBindPackage(uiPackage); + } + else + { + //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlStreamClose(pStream); + } + else + { + //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + + HLLib.hlFileReleaseStream(pSubItem, pStream); + } + else + { + //Console.WriteLine("Error opening {0}:", HLLib.hlItemGetName(pSubItem)); + //Console.WriteLine(HLLib.hlGetString(HLLib.HLOption.HL_ERROR_SHORT_FORMATED)); + } + } + else + { + //Console.WriteLine("{0} not found.", sArgument); + } + } + } + // + // Clear screen. + // + else if(String.Equals(sCommand, "status", StringComparison.CurrentCultureIgnoreCase)) + { + //Console.WriteLine("Total size: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_SIZE)); + //Console.WriteLine("Total mapping allocations: {0}", HLLib.hlGetUnsignedInteger(HLLib.HLOption.HL_PACKAGE_TOTAL_ALLOCATIONS)); + //Console.WriteLine("Total mapping memory allocated: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_TOTAL_MEMORY_ALLOCATED)); + //Console.WriteLine("Total mapping memory used: {0} B", HLLib.hlGetUnsignedLong(HLLib.HLOption.HL_PACKAGE_TOTAL_MEMORY_USED)); + + uint uiAttributeCount = HLLib.hlPackageGetAttributeCount(); + for(uint i = 0; i < uiAttributeCount; i++) + { + HLLib.HLAttribute Attribute; + if(HLLib.hlPackageGetAttribute((HLLib.HLPackageAttribute)i, out Attribute)) + { + if(Attribute.eAttributeType != HLLib.HLAttributeType.HL_ATTRIBUTE_INVALID) + { + //Console.WriteLine("{0}: {1}", Attribute.GetName(), Attribute.ToString()); + } + } + } + } + else if(String.Equals(sCommand, "exec", StringComparison.CurrentCultureIgnoreCase) || String.Equals(sCommand, "execute", StringComparison.CurrentCultureIgnoreCase)) + { + if(sArgument.Length == 0) + { + //Console.WriteLine("No argument for command open supplied."); + } + else + { + string[] NewCommands = sArgument.Split(new char[] { '|' }); + Commands.AddRange(NewCommands); + } + } + else if(String.Equals(sCommand, "cls", StringComparison.CurrentCultureIgnoreCase)) + { + try + { + Console.Clear(); + } + catch + { + } + } + else if(String.Equals(sCommand, "help", StringComparison.CurrentCultureIgnoreCase)) + { + //Console.WriteLine("Valid commands:"); + //Console.WriteLine(); + //Console.WriteLine("dir (Directory list.)"); + //Console.WriteLine("cd (Change directroy.)"); + //Console.WriteLine("info (Item information.)"); + //Console.WriteLine("extract (Extract item.)"); + //Console.WriteLine("validate (Validate item.)"); + //Console.WriteLine("defragment [force] (Defragment package.)"); + //Console.WriteLine("find (Find item.)"); + //Console.WriteLine("type (Type a file.)"); + //Console.WriteLine("open (Open a nested package.)"); + //Console.WriteLine("root (Go to the root folder.)"); + //Console.WriteLine("status (Package information.)"); + //Console.WriteLine("execute |... (Execute 1 or more pipe delimited commands.)"); + //Console.WriteLine("cls (Clear the screen.)"); + //Console.WriteLine("help (Program help.)"); + //Console.WriteLine("exit (Quit program.)"); + //Console.WriteLine(); + } + else if(String.Equals(sCommand, "exit", StringComparison.CurrentCultureIgnoreCase)) + { + break; + } + else + { + //Console.WriteLine("Unkown command: {0}", sCommand); + } + } + } + } +} diff --git a/BurnOutSharp/External/StormLibSharp/MpqArchive.cs b/BurnOutSharp/External/StormLibSharp/MpqArchive.cs new file mode 100644 index 00000000..4585dc50 --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/MpqArchive.cs @@ -0,0 +1,414 @@ +using StormLibSharp.Native; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Globalization; +using System.IO; +using System.IO.MemoryMappedFiles; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace StormLibSharp +{ + public class MpqArchive : IDisposable + { + private MpqArchiveSafeHandle _handle; + private List _openFiles = new List(); + private FileAccess _accessType; + private List _compactCallbacks = new List(); + private SFILE_COMPACT_CALLBACK _compactCallback; + + #region Constructors / Factories + public MpqArchive(string filePath, FileAccess accessType) + { + _accessType = accessType; + SFileOpenArchiveFlags flags = SFileOpenArchiveFlags.TypeIsFile; + if (accessType == FileAccess.Read) + flags |= SFileOpenArchiveFlags.AccessReadOnly; + else + flags |= SFileOpenArchiveFlags.AccessReadWriteShare; + + // constant 2 = SFILE_OPEN_HARD_DISK_FILE + if (!NativeMethods.SFileOpenArchive(filePath, 2, flags, out _handle)) + throw new Win32Exception(); // Implicitly calls GetLastError + } + + public MpqArchive(MemoryMappedFile file, FileAccess accessType) + { + _accessType = accessType; + string fileName = Win32Methods.GetFileNameOfMemoryMappedFile(file); + if (fileName == null) + throw new ArgumentException("Could not retrieve the name of the file to initialize."); + + SFileOpenArchiveFlags flags = SFileOpenArchiveFlags.TypeIsMemoryMapped; + if (accessType == FileAccess.Read) + flags |= SFileOpenArchiveFlags.AccessReadOnly; + else + flags |= SFileOpenArchiveFlags.AccessReadWriteShare; + + // constant 2 = SFILE_OPEN_HARD_DISK_FILE + if (!NativeMethods.SFileOpenArchive(fileName, 2, flags, out _handle)) + throw new Win32Exception(); // Implicitly calls GetLastError + } + + private MpqArchive(string filePath, MpqArchiveVersion version, MpqFileStreamAttributes listfileAttributes, MpqFileStreamAttributes attributesFileAttributes, int maxFileCount) + { + if (maxFileCount < 0) + throw new ArgumentException("maxFileCount"); + + SFileOpenArchiveFlags flags = SFileOpenArchiveFlags.TypeIsFile | SFileOpenArchiveFlags.AccessReadWriteShare; + flags |= (SFileOpenArchiveFlags)version; + + //SFILE_CREATE_MPQ create = new SFILE_CREATE_MPQ() + //{ + // cbSize = unchecked((uint)Marshal.SizeOf(typeof(SFILE_CREATE_MPQ))), + // dwMaxFileCount = unchecked((uint)maxFileCount), + // dwMpqVersion = (uint)version, + // dwFileFlags1 = (uint)listfileAttributes, + // dwFileFlags2 = (uint)attributesFileAttributes, + // dwStreamFlags = (uint)flags, + //}; + + //if (!NativeMethods.SFileCreateArchive2(filePath, ref create, out _handle)) + // throw new Win32Exception(); + if (!NativeMethods.SFileCreateArchive(filePath, (uint)flags, int.MaxValue, out _handle)) + throw new Win32Exception(); + } + + public static MpqArchive CreateNew(string mpqPath, MpqArchiveVersion version) + { + return CreateNew(mpqPath, version, MpqFileStreamAttributes.None, MpqFileStreamAttributes.None, int.MaxValue); + } + + public static MpqArchive CreateNew(string mpqPath, MpqArchiveVersion version, MpqFileStreamAttributes listfileAttributes, + MpqFileStreamAttributes attributesFileAttributes, int maxFileCount) + { + return new MpqArchive(mpqPath, version, listfileAttributes, attributesFileAttributes, maxFileCount); + } + #endregion + + #region Properties + // TODO: Move to common location. + // This is a global setting, not per-archive setting. + + //public int Locale + //{ + // get + // { + // throw new NotImplementedException(); + // } + // set + // { + // throw new NotImplementedException(); + // } + //} + + public long MaxFileCount + { + get + { + VerifyHandle(); + return NativeMethods.SFileGetMaxFileCount(_handle); + } + set + { + if (value < 0 || value > uint.MaxValue) + throw new ArgumentException("value"); + VerifyHandle(); + + if (!NativeMethods.SFileSetMaxFileCount(_handle, unchecked((uint)value))) + throw new Win32Exception(); + } + } + + private void VerifyHandle() + { + if (_handle == null || _handle.IsInvalid) + throw new ObjectDisposedException("MpqArchive"); + } + + public bool IsPatchedArchive + { + get + { + VerifyHandle(); + return NativeMethods.SFileIsPatchedArchive(_handle); + } + } + #endregion + + public void Flush() + { + VerifyHandle(); + if (!NativeMethods.SFileFlushArchive(_handle)) + throw new Win32Exception(); + } + + public int AddListFile(string listfileContents) + { + VerifyHandle(); + return NativeMethods.SFileAddListFile(_handle, listfileContents); + } + + public void AddFileFromDisk(string filePath, string archiveName) + { + VerifyHandle(); + + if (!NativeMethods.SFileAddFile(_handle, filePath, archiveName, 0)) + throw new Win32Exception(); + } + + public void Compact(string listfile) + { + VerifyHandle(); + if (!NativeMethods.SFileCompactArchive(_handle, listfile, false)) + throw new Win32Exception(); + } + + private void _OnCompact(IntPtr pvUserData, uint dwWorkType, ulong bytesProcessed, ulong totalBytes) + { + MpqArchiveCompactingEventArgs args = new MpqArchiveCompactingEventArgs(dwWorkType, bytesProcessed, totalBytes); + OnCompacting(args); + } + + protected virtual void OnCompacting(MpqArchiveCompactingEventArgs e) + { + foreach (var cb in _compactCallbacks) + { + cb(this, e); + } + } + + public event MpqArchiveCompactingEventHandler Compacting + { + add + { + VerifyHandle(); + _compactCallback = _OnCompact; + if (!NativeMethods.SFileSetCompactCallback(_handle, _compactCallback, IntPtr.Zero)) + throw new Win32Exception(); + + _compactCallbacks.Add(value); + } + remove + { + _compactCallbacks.Remove(value); + + VerifyHandle(); + if (_compactCallbacks.Count == 0) + { + if (!NativeMethods.SFileSetCompactCallback(_handle, null, IntPtr.Zero)) + { + // Don't do anything here. Remove shouldn't fail hard. + } + } + } + } + + // TODO: Determine if SFileGetAttributes/SFileSetAttributes/SFileUpdateFileAttributes deserves a projection. + // It's unclear - these seem to affect the (attributes) file but I can't figure out exactly what that means. + + public void AddPatchArchive(string patchPath) + { + VerifyHandle(); + + if (!NativeMethods.SFileOpenPatchArchive(_handle, patchPath, null, 0)) + throw new Win32Exception(); + } + + public void AddPatchArchives(IEnumerable patchPaths) + { + if (patchPaths == null) + throw new ArgumentNullException("patchPaths"); + + VerifyHandle(); + + foreach (string path in patchPaths) + { + // Don't sublet to AddPatchArchive to avoid having to repeatedly call VerifyHandle() + if (!NativeMethods.SFileOpenPatchArchive(_handle, path, null, 0)) + throw new Win32Exception(); + } + } + + public bool HasFile(string fileToFind) + { + VerifyHandle(); + + return NativeMethods.SFileHasFile(_handle, fileToFind); + } + + public MpqFileStream OpenFile(string fileName) + { + VerifyHandle(); + + MpqFileSafeHandle fileHandle; + if (!NativeMethods.SFileOpenFileEx(_handle, fileName, 0, out fileHandle)) + throw new Win32Exception(); + + MpqFileStream fs = new MpqFileStream(fileHandle, _accessType, this); + _openFiles.Add(fs); + return fs; + } + + public void ExtractFile(string fileToExtract, string destinationPath) + { + VerifyHandle(); + + if (!NativeMethods.SFileExtractFile(_handle, fileToExtract, destinationPath, 0)) + throw new Win32Exception(); + } + + public MpqFileVerificationResults VerifyFile(string fileToVerify) + { + VerifyHandle(); + + return (MpqFileVerificationResults)NativeMethods.SFileVerifyFile(_handle, fileToVerify, 0); + } + + // TODO: Consider SFileVerifyRawData + + public MpqArchiveVerificationResult VerifyArchive() + { + VerifyHandle(); + + return (MpqArchiveVerificationResult)NativeMethods.SFileVerifyArchive(_handle); + } + + + #region IDisposable implementation + public void Dispose() + { + Dispose(true); + } + + ~MpqArchive() + { + Dispose(false); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + // Release owned files first. + if (_openFiles != null) + { + foreach (var file in _openFiles) + { + file.Dispose(); + } + + _openFiles.Clear(); + _openFiles = null; + } + + // Release + if (_handle != null && !_handle.IsInvalid) + { + _handle.Close(); + _handle = null; + } + } + } + + internal void RemoveOwnedFile(MpqFileStream file) + { + _openFiles.Remove(file); + } + + #endregion + } + + public enum MpqArchiveVersion + { + Version1 = 0, + Version2 = 0x01000000, + Version3 = 0x02000000, + Version4 = 0x03000000, + } + + [Flags] + public enum MpqFileStreamAttributes + { + None = 0x0, + } + + [Flags] + public enum MpqFileVerificationResults + { + /// + /// There were no errors with the file. + /// + Verified = 0, + /// + /// Failed to open the file + /// + Error = 0x1, + /// + /// Failed to read all data from the file + /// + ReadError = 0x2, + /// + /// File has sector CRC + /// + HasSectorCrc = 0x4, + /// + /// Sector CRC check failed + /// + SectorCrcError = 0x8, + /// + /// File has CRC32 + /// + HasChecksum = 0x10, + /// + /// CRC32 check failed + /// + ChecksumError = 0x20, + /// + /// File has data MD5 + /// + HasMd5 = 0x40, + /// + /// MD5 check failed + /// + Md5Error = 0x80, + /// + /// File has raw data MD5 + /// + HasRawMd5 = 0x100, + /// + /// Raw MD5 check failed + /// + RawMd5Error = 0x200, + } + + public enum MpqArchiveVerificationResult + { + /// + /// There is no signature in the MPQ + /// + NoSignature = 0, + /// + /// There was an error during verifying signature (like no memory) + /// + VerificationFailed = 1, + /// + /// There is a weak signature and sign check passed + /// + WeakSignatureVerified = 2, + /// + /// There is a weak signature but sign check failed + /// + WeakSignatureFailed = 3, + /// + /// There is a strong signature and sign check passed + /// + StrongSignatureVerified = 4, + /// + /// There is a strong signature but sign check failed + /// + StrongSignatureFailed = 5, + } +} diff --git a/BurnOutSharp/External/StormLibSharp/MpqArchiveCompactingEventArgs.cs b/BurnOutSharp/External/StormLibSharp/MpqArchiveCompactingEventArgs.cs new file mode 100644 index 00000000..c2a2ee7b --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/MpqArchiveCompactingEventArgs.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace StormLibSharp +{ + public delegate void MpqArchiveCompactingEventHandler(MpqArchive sender, MpqArchiveCompactingEventArgs e); + + public class MpqArchiveCompactingEventArgs : EventArgs + { + internal MpqArchiveCompactingEventArgs(uint dwWorkType, ulong processed, ulong total) + { + unchecked + { + WorkType = (MpqCompactingWorkType)dwWorkType; + BytesProcessed = (long)processed; + TotalBytes = (long)total; + } + } + + public MpqCompactingWorkType WorkType + { + get; + private set; + } + + public long BytesProcessed + { + get; + private set; + } + + public long TotalBytes + { + get; + private set; + } + } + + public enum MpqCompactingWorkType + { + CheckingFiles = 1, + CheckingHashTable = 2, + CopyingNonMpqData = 3, + CompactingFiles = 4, + ClosingArchive = 5, + } +} diff --git a/BurnOutSharp/External/StormLibSharp/MpqFileStream.cs b/BurnOutSharp/External/StormLibSharp/MpqFileStream.cs new file mode 100644 index 00000000..18f6de25 --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/MpqFileStream.cs @@ -0,0 +1,185 @@ +using StormLibSharp.Native; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; + +namespace StormLibSharp +{ + public class MpqFileStream : Stream + { + private MpqFileSafeHandle _handle; + private FileAccess _accessType; + private MpqArchive _owner; + + internal MpqFileStream(MpqFileSafeHandle handle, FileAccess accessType, MpqArchive owner) + { + _handle = handle; + _accessType = accessType; + _owner = owner; + } + + private void VerifyHandle() + { + if (_handle == null || _handle.IsInvalid || _handle.IsClosed) + throw new ObjectDisposedException("MpqFileStream"); + } + + public override bool CanRead + { + get { VerifyHandle(); return true; } + } + + public override bool CanSeek + { + get { VerifyHandle(); return true; } + } + + public override bool CanWrite + { + get { VerifyHandle(); return _accessType != FileAccess.Read; } + } + + public override void Flush() + { + VerifyHandle(); + + _owner.Flush(); + } + + public override long Length + { + get + { + VerifyHandle(); + + uint high = 0; + uint low = NativeMethods.SFileGetFileSize(_handle, ref high); + + ulong val = (high << 32) | low; + return unchecked((long)val); + } + } + + public override long Position + { + get + { + VerifyHandle(); + + return NativeMethods.SFileGetFilePointer(_handle); + } + set + { + Seek(value, SeekOrigin.Begin); + } + } + + public override unsafe int Read(byte[] buffer, int offset, int count) + { + if (buffer == null) + throw new ArgumentNullException("buffer"); + if (offset > buffer.Length || (offset + count) > buffer.Length) + throw new ArgumentException(); + if (count < 0) + throw new ArgumentOutOfRangeException("count"); + + VerifyHandle(); + + bool success; + uint read; + fixed (byte* pb = &buffer[offset]) + { + NativeOverlapped overlapped = default(NativeOverlapped); + success = NativeMethods.SFileReadFile(_handle, new IntPtr(pb), unchecked((uint)count), out read, ref overlapped); + } + + if (!success) + { + int lastError = Win32Methods.GetLastError(); + if (lastError != 38) // EOF + throw new Win32Exception(lastError); + } + + return unchecked((int)read); + } + + public override long Seek(long offset, SeekOrigin origin) + { + VerifyHandle(); + + uint low, high; + low = unchecked((uint)(offset & 0xffffffffu)); + high = unchecked((uint)(offset >> 32)); + return NativeMethods.SFileSetFilePointer(_handle, low, ref high, (uint)origin); + } + + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + public override unsafe void Write(byte[] buffer, int offset, int count) + { + VerifyHandle(); + + if (buffer == null) + throw new ArgumentNullException("buffer"); + if (offset > buffer.Length || (offset + count) > buffer.Length) + throw new ArgumentException(); + if (count < 0) + throw new ArgumentOutOfRangeException("count"); + + VerifyHandle(); + + bool success; + fixed (byte* pb = &buffer[offset]) + { + success = NativeMethods.SFileWriteFile(_handle, new IntPtr(pb), unchecked((uint)count), 0u); + } + + if (!success) + throw new Win32Exception(); + } + + protected override void Dispose(bool disposing) + { + base.Dispose(disposing); + + if (disposing) + { + if (_handle != null && !_handle.IsInvalid) + { + _handle.Close(); + _handle = null; + } + + if (_owner != null) + { + _owner.RemoveOwnedFile(this); + _owner = null; + } + } + } + + // TODO: Seems like the right place for SFileGetFileInfo, but will need to determine + // what value add these features have except for sophisticated debugging purposes + // (like in Ladis' MPQ Editor app). + + public int ChecksumCrc32 + { + get + { + throw new NotImplementedException(); + } + } + + public byte[] GetMd5Hash() + { + throw new NotImplementedException(); + } + } +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/Callbacks.cs b/BurnOutSharp/External/StormLibSharp/Native/Callbacks.cs new file mode 100644 index 00000000..58e7fa5e --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/Callbacks.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace StormLibSharp.Native +{ + [UnmanagedFunctionPointer(CallingConvention.Winapi)] + internal delegate void SFILE_DOWNLOAD_CALLBACK(IntPtr pvUserData, ulong byteOffset, uint dwTotalBytes); + + [UnmanagedFunctionPointer(CallingConvention.Winapi)] + internal delegate void SFILE_COMPACT_CALLBACK(IntPtr pvUserData, uint dwWorkType, ulong bytesProcessed, ulong totalBytes); + + [UnmanagedFunctionPointer(CallingConvention.Winapi)] + internal delegate void SFILE_ADDFILE_CALLBACK(IntPtr pvUserData, uint dwBytesWritte, uint dwTotalBytes, bool bFinalCall); +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/MpqArchiveSafeHandle.cs b/BurnOutSharp/External/StormLibSharp/Native/MpqArchiveSafeHandle.cs new file mode 100644 index 00000000..5e2df9c4 --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/MpqArchiveSafeHandle.cs @@ -0,0 +1,26 @@ +using Microsoft.Win32.SafeHandles; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace StormLibSharp.Native +{ + internal sealed class MpqArchiveSafeHandle : SafeHandleZeroOrMinusOneIsInvalid + { + public MpqArchiveSafeHandle(IntPtr handle) + : base(true) + { + this.SetHandle(handle); + } + + public MpqArchiveSafeHandle() + : base(true) { } + + protected override bool ReleaseHandle() + { + return NativeMethods.SFileCloseArchive(this.handle); + } + } +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/MpqFileSafeHandle.cs b/BurnOutSharp/External/StormLibSharp/Native/MpqFileSafeHandle.cs new file mode 100644 index 00000000..495dd129 --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/MpqFileSafeHandle.cs @@ -0,0 +1,27 @@ +using Microsoft.Win32.SafeHandles; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace StormLibSharp.Native +{ + internal sealed class MpqFileSafeHandle : SafeHandleZeroOrMinusOneIsInvalid + { + public MpqFileSafeHandle(IntPtr handle) + : base(true) + { + this.SetHandle(handle); + } + + public MpqFileSafeHandle() + : base(true) + { + } + + protected override bool ReleaseHandle() + { + return NativeMethods.SFileCloseFile(this.handle); + } + } +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/NativeMethods.cs b/BurnOutSharp/External/StormLibSharp/Native/NativeMethods.cs new file mode 100644 index 00000000..acef5fbc --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/NativeMethods.cs @@ -0,0 +1,497 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace StormLibSharp.Native +{ + internal static class NativeMethods + { + private const string STORMLIB = "stormlib.dll"; + + #region Functions for manipulation with StormLib global flags + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileGetLocale(); + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileSetLocale(uint lcNewLocale); + #endregion + + #region Functions for archive manipulation + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileOpenArchive( + [MarshalAs(UnmanagedType.LPTStr)] string szMpqName, + uint dwPriority, + SFileOpenArchiveFlags dwFlags, + out MpqArchiveSafeHandle phMpq + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCreateArchive( + [MarshalAs(UnmanagedType.LPTStr)] string szMpqName, + uint dwCreateFlags, + uint dwMaxFileCount, + out MpqArchiveSafeHandle phMpq + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCreateArchive2( + [MarshalAs(UnmanagedType.LPTStr)] string szMpqName, + ref SFILE_CREATE_MPQ pCreateInfo, + out MpqArchiveSafeHandle phMpq + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetDownloadCallback( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.FunctionPtr)] SFILE_DOWNLOAD_CALLBACK pfnCallback, + IntPtr pvUserData + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileFlushArchive(MpqArchiveSafeHandle hMpq); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCloseArchive(IntPtr hMpq); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCloseArchive(MpqArchiveSafeHandle hMpq); + #endregion + + #region Adds another listfile into MPQ. + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SFileAddListFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szListFile + ); + #endregion + + #region Archive compacting + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetCompactCallback( + MpqArchiveSafeHandle hMpq, + SFILE_COMPACT_CALLBACK compactCB, + IntPtr pvUserData + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCompactArchive( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szListFile, + bool bReserved + ); + #endregion + + #region Maximum file count + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileGetMaxFileCount(MpqArchiveSafeHandle hMpq); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetMaxFileCount(MpqArchiveSafeHandle hMpq, uint dwMaxFileCount); + #endregion + + #region Changing (attributes) file + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileGetAttributes(MpqArchiveSafeHandle hMpq); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetAttributes(MpqArchiveSafeHandle hMpq, uint dwFlags); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileUpdateFileAttributes( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName + ); + #endregion + + #region Functions for manipulation with patch archives + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileOpenPatchArchive( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPTStr)] string szPatchMpqName, + [MarshalAs(UnmanagedType.LPStr)] string szPatchPathPrefix, + uint dwFlags + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileIsPatchedArchive(MpqArchiveSafeHandle hMpq); + #endregion + + #region Functions for file manipulation + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileHasFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileOpenFileEx( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName, + uint dwSearchScope, + out MpqFileSafeHandle phFile + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileGetFileSize(MpqFileSafeHandle hFile, ref uint pdwFileSizeHigh); + + public static unsafe uint SFileGetFilePointer( + MpqFileSafeHandle hFile + ) + { + if (hFile.IsInvalid || hFile.IsClosed) + throw new InvalidOperationException(); + + IntPtr handle = hFile.DangerousGetHandle(); + _TMPQFileHeader* header = (_TMPQFileHeader*)handle.ToPointer(); + return header->dwFilePos; + } + + //public static unsafe uint SFileGetFileSize( + // MpqFileSafeHandle hFile + // ) + //{ + // if (hFile.IsInvalid || hFile.IsClosed) + // throw new InvalidOperationException(); + + // IntPtr handle = hFile.DangerousGetHandle(); + // _TMPQFileHeader* header = (_TMPQFileHeader*)handle.ToPointer(); + // return header->pFileEntry->dwFileSize; + //} + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileSetFilePointer( + MpqFileSafeHandle hFile, + uint lFilePos, + ref uint plFilePosHigh, + uint dwMoveMethod + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileReadFile( + MpqFileSafeHandle hFile, + IntPtr lpBuffer, + uint dwToRead, + out uint pdwRead, + ref System.Threading.NativeOverlapped lpOverlapped + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCloseFile(IntPtr hFile); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCloseFile(MpqFileSafeHandle hFile); + + #region Retrieving info about a file in the archive + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileGetFileInfo( + IntPtr hMpqOrFile, + SFileInfoClass InfoClass, + IntPtr pvFileInfo, + uint cbFileInfoSize, + out uint pcbLengthNeeded + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileGetFileInfo( + MpqArchiveSafeHandle hMpqOrFile, + SFileInfoClass InfoClass, + IntPtr pvFileInfo, + uint cbFileInfoSize, + out uint pcbLengthNeeded + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileGetFileInfo( + MpqFileSafeHandle hMpqOrFile, + SFileInfoClass InfoClass, + IntPtr pvFileInfo, + uint cbFileInfoSize, + out uint pcbLengthNeeded + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileGetFileName( + MpqFileSafeHandle hFile, + [MarshalAs(UnmanagedType.LPStr)] out string szFileName + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileFreeFileInfo( + IntPtr pvFileInfo, + SFileInfoClass infoClass + ); + #endregion + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileExtractFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szToExtract, + [MarshalAs(UnmanagedType.LPTStr)] string szExtracted, + uint dwSearchScope + ); + + #endregion + + #region Functions for file and archive verification + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileGetFileChecksums( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName, + out uint pdwCrc32, + IntPtr pMD5 + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileVerifyFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName, + uint dwFlags + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SFileVerifyRawData( + MpqArchiveSafeHandle hMpq, + uint dwWhatToVerify, + [MarshalAs(UnmanagedType.LPStr)] string szFileName + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern uint SFileVerifyArchive(MpqArchiveSafeHandle hMpq); + #endregion + + #region Functions for file searching + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern IntPtr SFileFindFirstFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szMask, + out _SFILE_FIND_DATA lpFindFileData, + [MarshalAs(UnmanagedType.LPStr)] string szListFile + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileFindNextFile( + IntPtr hFind, + [In, Out] ref _SFILE_FIND_DATA lpFindFileData + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileFindClose(IntPtr hFind); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern IntPtr SListFileFindFirstFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szListFile, + [MarshalAs(UnmanagedType.LPStr)] string szMask, + [In, Out] ref _SFILE_FIND_DATA lpFindFileData + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SListFileFindNextFile( + IntPtr hFind, + [In, Out] ref _SFILE_FIND_DATA lpFindFileData + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SListFileFindClose(IntPtr hFind); + #endregion + + #region Locale support + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SFileEnumLocales( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName, + IntPtr plcLocales, + ref uint pdwMaxLocales, + uint dwSearchScope + ); + #endregion + + #region Support for adding files to the MPQ + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileCreateFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szArchiveName, + ulong fileTime, + uint dwFileSize, + uint lcLocale, + uint dwFlags, + out IntPtr phFile + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileWriteFile( + MpqFileSafeHandle hFile, + IntPtr pvData, + uint dwSize, + uint dwCompression + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileFinishFile(MpqFileSafeHandle hFile); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileAddFileEx( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPTStr)] string szFileName, + [MarshalAs(UnmanagedType.LPStr)] string szArchivedName, + uint dwFlags, + uint dwCompression, + uint dwCompressionNext + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileAddFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPTStr)] string szFileName, + [MarshalAs(UnmanagedType.LPStr)] string szArchivedName, + uint dwFlags + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileAddWave( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPTStr)] string szFileName, + [MarshalAs(UnmanagedType.LPStr)] string szArchivedName, + uint dwFlags, + uint dwQuality + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileRemoveFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szFileName, + uint dwSearchScope + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileRenameFile( + MpqArchiveSafeHandle hMpq, + [MarshalAs(UnmanagedType.LPStr)] string szOldFileName, + [MarshalAs(UnmanagedType.LPStr)] string szNewFileName + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetFileLocale( + MpqFileSafeHandle hFile, + uint lcNewLocale + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetDataCompression(uint DataCompression); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern bool SFileSetAddFileCallback( + MpqArchiveSafeHandle hMpq, + SFILE_ADDFILE_CALLBACK AddFileCB, + IntPtr pvUserData + ); + #endregion + + #region Compression and decompression + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SCompImplode( + IntPtr pvOutBuffer, + ref int pcbOutBuffer, + IntPtr pvInBuffer, + int cbInBuffer + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SCompExplode( + IntPtr pvOutBuffer, + ref int pcbOutBuffer, + IntPtr pvInBuffer, + int cbInBuffer + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SCompCompress( + IntPtr pvOutBuffer, + ref int pcbOutBuffer, + IntPtr pvInBuffer, + int cbInBuffer, + uint uCompressionMask, + int nCmpType, + int nCmpLevel + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SCompDecompress( + IntPtr pvOutBuffer, + ref int pcbOutBuffer, + IntPtr pvInBuffer, + int cbInBuffer + ); + + [DllImport(STORMLIB, CallingConvention = CallingConvention.Winapi, ExactSpelling = true, PreserveSig = true, SetLastError = true, ThrowOnUnmappableChar = false)] + public static extern int SCompDecompress2( + IntPtr pvOutBuffer, + ref int pcbOutBuffer, + IntPtr pvInBuffer, + int cbInBuffer + ); + + + #endregion + } + +#pragma warning disable 0169,0649 + internal struct SFILE_CREATE_MPQ + { + public uint cbSize; + public uint dwMpqVersion; + private IntPtr pvUserData; + private uint cbUserData; + public uint dwStreamFlags; + public uint dwFileFlags1; + public uint dwFileFlags2; + public uint dwAttrFlags; + public uint dwSectorSize; + public uint dwRawChunkSize; + public uint dwMaxFileCount; + } + + internal unsafe struct _SFILE_FIND_DATA + { + public fixed char cFileName[260]; // Full name of the found file + + public IntPtr szPlainName; // Plain name of the found file + public uint dwHashIndex; // Hash table index for the file + public uint dwBlockIndex; // Block table index for the file + public uint dwFileSize; // File size in bytes + public uint dwFileFlags; // MPQ file flags + public uint dwCompSize; // Compressed file size + public uint dwFileTimeLo; // Low 32-bits of the file time (0 if not present) + public uint dwFileTimeHi; // High 32-bits of the file time (0 if not present) + public uint lcLocale; // Locale version + } + + internal unsafe struct _TFileEntry + { + public ulong FileNameHash; + public ulong ByteOffset; + public ulong FileTime; + public uint dwHashIndex; + public uint dwFileSize; + public uint dwCmpSize; + public uint dwFlags; + public ushort lcLocale; + public ushort wPlatform; + public uint dwCrc32; + public fixed byte md5[16]; + public IntPtr szFileName; + } + + // Provides enough of _TMPQFile to get to the file size and current position. + internal unsafe struct _TMPQFileHeader + { + public IntPtr pStream; + public IntPtr ha; + public _TFileEntry* pFileEntry; + public uint dwFileKey; + public uint dwFilePos; + } +#pragma warning restore 0169,0649 + +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/SFileInfoClass.cs b/BurnOutSharp/External/StormLibSharp/Native/SFileInfoClass.cs new file mode 100644 index 00000000..f8ef7a92 --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/SFileInfoClass.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace StormLibSharp.Native +{ + internal enum SFileInfoClass + { + // Info classes for archives + SFileMpqFileName, // Name of the archive file (TCHAR []) + SFileMpqStreamBitmap, // Array of bits, each bit means availability of one block (BYTE []) + SFileMpqUserDataOffset, // Offset of the user data header (ULONGLONG) + SFileMpqUserDataHeader, // Raw (unfixed) user data header (TMPQUserData) + SFileMpqUserData, // MPQ USer data, without the header (BYTE []) + SFileMpqHeaderOffset, // Offset of the MPQ header (ULONGLONG) + SFileMpqHeaderSize, // Fixed size of the MPQ header + SFileMpqHeader, // Raw (unfixed) archive header (TMPQHeader) + SFileMpqHetTableOffset, // Offset of the HET table, relative to MPQ header (ULONGLONG) + SFileMpqHetTableSize, // Compressed size of the HET table (ULONGLONG) + SFileMpqHetHeader, // HET table header (TMPQHetHeader) + SFileMpqHetTable, // HET table as pointer. Must be freed using SFileFreeFileInfo + SFileMpqBetTableOffset, // Offset of the BET table, relative to MPQ header (ULONGLONG) + SFileMpqBetTableSize, // Compressed size of the BET table (ULONGLONG) + SFileMpqBetHeader, // BET table header, followed by the flags (TMPQBetHeader + DWORD[]) + SFileMpqBetTable, // BET table as pointer. Must be freed using SFileFreeFileInfo + SFileMpqHashTableOffset, // Hash table offset, relative to MPQ header (ULONGLONG) + SFileMpqHashTableSize64, // Compressed size of the hash table (ULONGLONG) + SFileMpqHashTableSize, // Size of the hash table, in entries (DWORD) + SFileMpqHashTable, // Raw (unfixed) hash table (TMPQBlock []) + SFileMpqBlockTableOffset, // Block table offset, relative to MPQ header (ULONGLONG) + SFileMpqBlockTableSize64, // Compressed size of the block table (ULONGLONG) + SFileMpqBlockTableSize, // Size of the block table, in entries (DWORD) + SFileMpqBlockTable, // Raw (unfixed) block table (TMPQBlock []) + SFileMpqHiBlockTableOffset, // Hi-block table offset, relative to MPQ header (ULONGLONG) + SFileMpqHiBlockTableSize64, // Compressed size of the hi-block table (ULONGLONG) + SFileMpqHiBlockTable, // The hi-block table (USHORT []) + SFileMpqSignatures, // Signatures present in the MPQ (DWORD) + SFileMpqStrongSignatureOffset, // Byte offset of the strong signature, relative to begin of the file (ULONGLONG) + SFileMpqStrongSignatureSize, // Size of the strong signature (DWORD) + SFileMpqStrongSignature, // The strong signature (BYTE []) + SFileMpqArchiveSize64, // Archive size from the header (ULONGLONG) + SFileMpqArchiveSize, // Archive size from the header (DWORD) + SFileMpqMaxFileCount, // Max number of files in the archive (DWORD) + SFileMpqFileTableSize, // Number of entries in the file table (DWORD) + SFileMpqSectorSize, // Sector size (DWORD) + SFileMpqNumberOfFiles, // Number of files (DWORD) + SFileMpqRawChunkSize, // Size of the raw data chunk for MD5 + SFileMpqStreamFlags, // Stream flags (DWORD) + SFileMpqIsReadOnly, // Nonzero if the MPQ is read only (DWORD) + + // Info classes for files + SFileInfoPatchChain, // Chain of patches where the file is (TCHAR []) + SFileInfoFileEntry, // The file entry for the file (TFileEntry) + SFileInfoHashEntry, // Hash table entry for the file (TMPQHash) + SFileInfoHashIndex, // Index of the hash table entry (DWORD) + SFileInfoNameHash1, // The first name hash in the hash table (DWORD) + SFileInfoNameHash2, // The second name hash in the hash table (DWORD) + SFileInfoNameHash3, // 64-bit file name hash for the HET/BET tables (ULONGLONG) + SFileInfoLocale, // File locale (DWORD) + SFileInfoFileIndex, // Block index (DWORD) + SFileInfoByteOffset, // File position in the archive (ULONGLONG) + SFileInfoFileTime, // File time (ULONGLONG) + SFileInfoFileSize, // Size of the file (DWORD) + SFileInfoCompressedSize, // Compressed file size (DWORD) + SFileInfoFlags, // File flags from (DWORD) + SFileInfoEncryptionKey, // File encryption key + SFileInfoEncryptionKeyRaw, // Unfixed value of the file key + } +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/SFileOpenArchiveFlags.cs b/BurnOutSharp/External/StormLibSharp/Native/SFileOpenArchiveFlags.cs new file mode 100644 index 00000000..d444f2be --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/SFileOpenArchiveFlags.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace StormLibSharp.Native +{ + [Flags] + internal enum SFileOpenArchiveFlags : uint + { + None = 0, + TypeIsFile = None, + TypeIsMemoryMapped = 1, + TypeIsHttp = 2, + + AccessReadOnly = 0x100, + AccessReadWriteShare = 0x200, + AccessUseBitmap = 0x400, + + DontOpenListfile = 0x10000, + DontOpenAttributes = 0x20000, + DontSearchHeader = 0x40000, + ForceVersion1 = 0x80000, + CheckSectorCRC = 0x100000, + } +} diff --git a/BurnOutSharp/External/StormLibSharp/Native/Win32Methods.cs b/BurnOutSharp/External/StormLibSharp/Native/Win32Methods.cs new file mode 100644 index 00000000..15596c07 --- /dev/null +++ b/BurnOutSharp/External/StormLibSharp/Native/Win32Methods.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO.MemoryMappedFiles; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; + +namespace StormLibSharp.Native +{ + internal static class Win32Methods + { + [DllImport("kernel32", ExactSpelling = false, SetLastError = true)] + public static extern uint GetMappedFileName( + IntPtr hProcess, + IntPtr fileHandle, + IntPtr lpFilename, + uint nSize + ); + + [DllImport("kernel32", ExactSpelling = false, SetLastError = true)] + public static extern uint GetFinalPathNameByHandle( + IntPtr hFile, + IntPtr lpszFilePath, + uint cchFilePath, + uint dwFlags + ); + + [DllImport("kernel32", SetLastError = false, ExactSpelling = false)] + public static extern int GetLastError(); + + public static string GetFileNameOfMemoryMappedFile(MemoryMappedFile file) + { + const uint size = 522; + IntPtr path = Marshal.AllocCoTaskMem(unchecked((int)size)); // MAX_PATH + 1 char + + string result = null; + try + { + // constant 0x2 = VOLUME_NAME_NT + uint test = GetFinalPathNameByHandle(file.SafeMemoryMappedFileHandle.DangerousGetHandle(), path, size, 0x2); + if (test != 0) + throw new Win32Exception(); + + result = Marshal.PtrToStringAuto(path); + } + catch + { + uint test = GetMappedFileName(Process.GetCurrentProcess().Handle, file.SafeMemoryMappedFileHandle.DangerousGetHandle(), path, size); + if (test != 0) + throw new Win32Exception(); + + result = Marshal.PtrToStringAuto(path); + } + + return result; + } + } +} diff --git a/BurnOutSharp/External/psxt001z/LibCrypt.cs b/BurnOutSharp/External/psxt001z/LibCrypt.cs index cb0fde77..fc5874d6 100644 --- a/BurnOutSharp/External/psxt001z/LibCrypt.cs +++ b/BurnOutSharp/External/psxt001z/LibCrypt.cs @@ -63,7 +63,7 @@ namespace BurnOutSharp.External.psxt001z { subfile.Seek(12, SeekOrigin.Current); if (subfile.Read(buffer, 0, 12) == 0) - return true; + return modifiedSectors != 0; subfile.Seek(72, SeekOrigin.Current); @@ -128,7 +128,7 @@ namespace BurnOutSharp.External.psxt001z } Console.WriteLine($"Number of modified sectors: {modifiedSectors}"); - return true; + return modifiedSectors != 0; } private static byte btoi(byte b) diff --git a/BurnOutSharp/FileType/BFPK.cs b/BurnOutSharp/FileType/BFPK.cs new file mode 100644 index 00000000..4b32f1e9 --- /dev/null +++ b/BurnOutSharp/FileType/BFPK.cs @@ -0,0 +1,122 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using SharpCompress.Compressors; +using SharpCompress.Compressors.Deflate; + +namespace BurnOutSharp.FileType +{ + internal class BFPK + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x42, 0x46, 0x50, 0x4b })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the BFPK file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (BinaryReader br = new BinaryReader(stream, Encoding.Default, true)) + { + br.ReadBytes(4); // Skip magic number + + int version = br.ReadInt32(); + int files = br.ReadInt32(); + long current = br.BaseStream.Position; + + for (int i = 0; i < files; i++) + { + br.BaseStream.Seek(current, SeekOrigin.Begin); + + int nameSize = br.ReadInt32(); + string name = new string(br.ReadChars(nameSize)); + + uint uncompressedSize = br.ReadUInt32(); + int offset = br.ReadInt32(); + + current = br.BaseStream.Position; + + br.BaseStream.Seek(offset, SeekOrigin.Begin); + uint compressedSize = br.ReadUInt32(); + + // Some files can lack the length prefix + if (compressedSize > br.BaseStream.Length) + { + br.BaseStream.Seek(-4, SeekOrigin.Current); + compressedSize = uncompressedSize; + } + + // If an individual entry fails + try + { + string tempFile = Path.Combine(tempPath, name); + if (!Directory.Exists(Path.GetDirectoryName(tempFile))) + Directory.CreateDirectory(Path.GetDirectoryName(tempFile)); + + if (compressedSize == uncompressedSize) + { + using (FileStream fs = File.OpenWrite(tempFile)) + { + fs.Write(br.ReadBytes((int)uncompressedSize), 0, (int)uncompressedSize); + } + } + else + { + using (FileStream fs = File.OpenWrite(tempFile)) + { + try + { + ZlibStream zs = new ZlibStream(br.BaseStream, CompressionMode.Decompress); + zs.CopyTo(fs); + } + catch (ZlibException) + { + br.BaseStream.Seek(offset + 4, SeekOrigin.Begin); + fs.Write(br.ReadBytes((int)compressedSize), 0, (int)compressedSize); + } + } + } + + string protection = ProtectionFind.ScanContent(tempFile); + + // If tempfile cleanup fails + try + { + File.Delete(tempFile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add(tempFile); + } + catch { } + + + br.BaseStream.Seek(current, SeekOrigin.Begin); + } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/BZip2.cs b/BurnOutSharp/FileType/BZip2.cs new file mode 100644 index 00000000..50130b39 --- /dev/null +++ b/BurnOutSharp/FileType/BZip2.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Compressors; +using SharpCompress.Compressors.BZip2; + +namespace BurnOutSharp.FileType +{ + internal class BZip2 + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x42, 0x52, 0x68 })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the 7-zip file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (BZip2Stream bz2File = new BZip2Stream(stream, CompressionMode.Decompress, true)) + { + // If an individual entry fails + try + { + string tempfile = Path.Combine(tempPath, Guid.NewGuid().ToString()); + using (FileStream fs = File.OpenWrite(tempfile)) + { + bz2File.CopyTo(fs); + } + + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{protection}"); + } + catch { } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/Executable.cs b/BurnOutSharp/FileType/Executable.cs new file mode 100644 index 00000000..9e780a33 --- /dev/null +++ b/BurnOutSharp/FileType/Executable.cs @@ -0,0 +1,254 @@ +using System.Collections.Generic; +using System.IO; +using System.Text; +using BurnOutSharp.ProtectionType; + +namespace BurnOutSharp.FileType +{ + internal class Executable + { + public static bool ShouldScan(byte[] magic) + { + // DOS MZ executable file format (and descendants) + if (magic.StartsWith(new byte[] { 0x4d, 0x5a })) + return true; + + // Executable and Linkable Format + if (magic.StartsWith(new byte[] { 0x7f, 0x45, 0x4c, 0x46 })) + return true; + + // Mach-O binary (32-bit) + if (magic.StartsWith(new byte[] { 0xfe, 0xed, 0xfa, 0xce })) + return true; + + // Mach-O binary (32-bit, reverse byte ordering scheme) + if (magic.StartsWith(new byte[] { 0xce, 0xfa, 0xed, 0xfe })) + return true; + + // Mach-O binary (64-bit) + if (magic.StartsWith(new byte[] { 0xfe, 0xed, 0xfa, 0xcf })) + return true; + + // Mach-O binary (64-bit, reverse byte ordering scheme) + if (magic.StartsWith(new byte[] { 0xcf, 0xfa, 0xed, 0xfe })) + return true; + + // Prefrred Executable File Format + if (magic.StartsWith(new byte[] { 0x4a, 0x6f, 0x79, 0x21, 0x70, 0x65, 0x66, 0x66 })) + return true; + + return false; + } + + public static List Scan(Stream stream, string file) + { + // Load the current file content + byte[] fileContent = null; + using (BinaryReader br = new BinaryReader(stream, Encoding.Default, true)) + { + fileContent = br.ReadBytes((int)stream.Length); + } + + // If we can, seek to the beginning of the stream + if (stream.CanSeek) + stream.Seek(0, SeekOrigin.Begin); + + // Files can be protected in multiple ways + List protections = new List(); + List subProtections = new List(); + string protection; + + // 3PLock + protection = ThreePLock.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // ActiveMARK + protection = ActiveMARK.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Alpha-ROM + protection = AlphaROM.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Armadillo + protection = Armadillo.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // CD-Cops + protection = CDCops.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // CD-Lock + protection = CDLock.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // CDSHiELD SE + protection = CDSHiELDSE.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // CD Check + protection = CDCheck.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Cenega ProtectDVD + protection = CengaProtectDVD.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Code Lock + protection = CodeLock.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // CopyKiller + protection = CopyKiller.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Cucko (EA Custom) + protection = Cucko.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // dotFuscator + protection = dotFuscator.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // DVD-Cops + protection = DVDCops.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // EA CdKey Registration Module + protection = EACdKey.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // EXE Stealth + protection = EXEStealth.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Games for Windows - Live + protection = GFWL.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Impulse Reactor + protection = ImpulseReactor.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Inno Setup + protection = InnoSetup.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // JoWooD X-Prot + protection = JoWooDXProt.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Key-Lock (Dongle) + protection = KeyLock.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // LaserLock + protection = LaserLock.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // PE Compact + protection = PECompact.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // ProtectDisc + protection = ProtectDisc.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Ring PROTECH + protection = RingPROTECH.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // SafeDisc / SafeCast + protection = SafeDisc.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // SafeLock + protection = SafeLock.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // SecuROM + protection = SecuROM.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // SmartE + protection = SmartE.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // SolidShield + protection = SolidShield.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // StarForce + protection = StarForce.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // SVK Protector + protection = SVKProtector.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Sysiphus / Sysiphus DVD + protection = Sysiphus.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // TAGES + protection = Tages.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // VOB ProtectCD/DVD + protection = VOBProtectCDDVD.CheckContents(file, fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Wise Installer + subProtections = WiseInstaller.CheckContents(file, fileContent); + if (subProtections != null && subProtections.Count > 0) + protections.AddRange(subProtections); + + // WTM CD Protect + protection = WTMCDProtect.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + // Xtreme-Protector + protection = XtremeProtector.CheckContents(fileContent); + if (!string.IsNullOrWhiteSpace(protection)) + protections.Add(protection); + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/GZIP.cs b/BurnOutSharp/FileType/GZIP.cs new file mode 100644 index 00000000..f22f5257 --- /dev/null +++ b/BurnOutSharp/FileType/GZIP.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Archives; +using SharpCompress.Archives.GZip; + +namespace BurnOutSharp.FileType +{ + internal class GZIP + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x1f, 0x8b })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the gzip file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (GZipArchive zipFile = GZipArchive.Open(stream)) + { + foreach (var entry in zipFile.Entries) + { + // If an individual entry fails + try + { + // If we have a directory, skip it + if (entry.IsDirectory) + continue; + + string tempfile = Path.Combine(tempPath, entry.Key); + entry.WriteToFile(tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{entry.Key} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/InstallShieldCAB.cs b/BurnOutSharp/FileType/InstallShieldCAB.cs new file mode 100644 index 00000000..0bce7e1d --- /dev/null +++ b/BurnOutSharp/FileType/InstallShieldCAB.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text.RegularExpressions; +using UnshieldSharp; + +namespace BurnOutSharp.FileType +{ + internal class InstallShieldCAB + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x49, 0x53, 0x63 })) + return true; + + return false; + } + + // TODO: Add stream opening support + public static List Scan(string file) + { + List protections = new List(); + + // Get the name of the first cabinet file or header + string directory = Path.GetDirectoryName(file); + string noExtension = Path.GetFileNameWithoutExtension(file); + string filenamePattern = Path.Combine(directory, noExtension); + filenamePattern = new Regex(@"\d+$").Replace(filenamePattern, string.Empty); + + bool cabinetHeaderExists = File.Exists(Path.Combine(directory, filenamePattern + "1.hdr")); + bool shouldScanCabinet = cabinetHeaderExists + ? file.Equals(Path.Combine(directory, filenamePattern + "1.hdr"), StringComparison.OrdinalIgnoreCase) + : file.Equals(Path.Combine(directory, filenamePattern + "1.cab"), StringComparison.OrdinalIgnoreCase); + + // If we have the first file + if (shouldScanCabinet) + { + // If the cab file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + UnshieldCabinet cabfile = UnshieldCabinet.Open(file); + for (int i = 0; i < cabfile.FileCount; i++) + { + // If an individual entry fails + try + { + string tempFile = Path.Combine(tempPath, cabfile.FileName(i)); + if (cabfile.FileSave(i, tempFile)) + { + string protection = ProtectionFind.ScanContent(tempFile); + + // If tempfile cleanup fails + try + { + File.Delete(tempFile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{cabfile.FileName(i)} - {protection}"); + } + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + catch { } + } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/MPQ.cs b/BurnOutSharp/FileType/MPQ.cs new file mode 100644 index 00000000..3bf198c6 --- /dev/null +++ b/BurnOutSharp/FileType/MPQ.cs @@ -0,0 +1,78 @@ +using System; +using System.Collections.Generic; +using System.IO; +using StormLibSharp; + +namespace BurnOutSharp.FileType +{ + internal class MPQ + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x4d, 0x50, 0x51, 0x1a })) + return true; + + return false; + } + + // TODO: Add stream opening support + public static List Scan(string file) + { + List protections = new List(); + + // If the mpq file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (MpqArchive mpqArchive = new MpqArchive(file, FileAccess.Read)) + { + string listfile = null; + MpqFileStream listStream = mpqArchive.OpenFile("(listfile)"); + bool canRead = listStream.CanRead; + + using (StreamReader sr = new StreamReader(listStream)) + { + listfile = sr.ReadToEnd(); + Console.WriteLine(listfile); + } + + string sub = string.Empty; + while ((sub = listfile) != null) + { + // If an individual entry fails + try + { + string tempfile = Path.Combine(tempPath, sub); + Directory.CreateDirectory(Path.GetDirectoryName(tempfile)); + mpqArchive.ExtractFile(sub, tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{sub} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/MicrosoftCAB.cs b/BurnOutSharp/FileType/MicrosoftCAB.cs new file mode 100644 index 00000000..0bd44e1f --- /dev/null +++ b/BurnOutSharp/FileType/MicrosoftCAB.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.IO; +using LibMSPackN; + +namespace BurnOutSharp.FileType +{ + internal class MicrosoftCAB + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x4d, 0x53, 0x43, 0x46 })) + return true; + + return false; + } + + // TODO: Add stream opening support + public static List Scan(string file) + { + List protections = new List(); + + // If the cab file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (MSCabinet cabfile = new MSCabinet(file)) + { + foreach (var sub in cabfile.GetFiles()) + { + // If an individual entry fails + try + { + string tempfile = Path.Combine(tempPath, sub.Filename); + sub.ExtractTo(tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{sub.Filename} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/PKZIP.cs b/BurnOutSharp/FileType/PKZIP.cs new file mode 100644 index 00000000..41f520dd --- /dev/null +++ b/BurnOutSharp/FileType/PKZIP.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Archives; +using SharpCompress.Archives.Zip; + +namespace BurnOutSharp.FileType +{ + internal class PKZIP + { + public static bool ShouldScan(byte[] magic) + { + // PKZIP + if (magic.StartsWith(new byte[] { 0x50, 0x4b, 0x03, 0x04 })) + return true; + + // PKZIP (Empty Archive) + if (magic.StartsWith(new byte[] { 0x50, 0x4b, 0x05, 0x06 })) + return true; + + // PKZIP (Spanned Archive) + if (magic.StartsWith(new byte[] { 0x50, 0x4b, 0x07, 0x08 })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the zip file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (ZipArchive zipFile = ZipArchive.Open(stream)) + { + foreach (var entry in zipFile.Entries) + { + // If an individual entry fails + try + { + // If we have a directory, skip it + if (entry.IsDirectory) + continue; + + string tempfile = Path.Combine(tempPath, entry.Key); + entry.WriteToFile(tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{entry.Key} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/RAR.cs b/BurnOutSharp/FileType/RAR.cs new file mode 100644 index 00000000..6ae00055 --- /dev/null +++ b/BurnOutSharp/FileType/RAR.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Archives; +using SharpCompress.Archives.Rar; + +namespace BurnOutSharp.FileType +{ + internal class RAR + { + public static bool ShouldScan(byte[] magic) + { + // RAR archive version 1.50 onwards + if (magic.StartsWith(new byte[] { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x00 })) + return true; + + // RAR archive version 5.0 onwards + if (magic.StartsWith(new byte[] { 0x52, 0x61, 0x72, 0x21, 0x1a, 0x07, 0x01, 0x00 })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the rar file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (RarArchive zipFile = RarArchive.Open(stream)) + { + foreach (var entry in zipFile.Entries) + { + // If an individual entry fails + try + { + // If we have a directory, skip it + if (entry.IsDirectory) + continue; + + string tempfile = Path.Combine(tempPath, entry.Key); + entry.WriteToFile(tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{entry.Key} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/SevenZip.cs b/BurnOutSharp/FileType/SevenZip.cs new file mode 100644 index 00000000..76c520a4 --- /dev/null +++ b/BurnOutSharp/FileType/SevenZip.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Archives; +using SharpCompress.Archives.SevenZip; + +namespace BurnOutSharp.FileType +{ + internal class SevenZip + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the 7-zip file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (SevenZipArchive sevenZipFile = SevenZipArchive.Open(stream)) + { + foreach (var entry in sevenZipFile.Entries) + { + // If an individual entry fails + try + { + // If we have a directory, skip it + if (entry.IsDirectory) + continue; + + string tempfile = Path.Combine(tempPath, entry.Key); + entry.WriteToFile(tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{entry.Key} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/TapeArchive.cs b/BurnOutSharp/FileType/TapeArchive.cs new file mode 100644 index 00000000..667f38be --- /dev/null +++ b/BurnOutSharp/FileType/TapeArchive.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Archives; +using SharpCompress.Archives.Tar; + +namespace BurnOutSharp.FileType +{ + internal class TapeArchive + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0x75, 0x73, 0x74, 0x61, 0x72, 0x00, 0x30, 0x30 })) + return true; + + if (magic.StartsWith(new byte[] { 0x75, 0x73, 0x74, 0x61, 0x72, 0x20, 0x20, 0x00 })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the tar file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (TarArchive tarFile = TarArchive.Open(stream)) + { + foreach (var entry in tarFile.Entries) + { + // If an individual entry fails + try + { + // If we have a directory, skip it + if (entry.IsDirectory) + continue; + + string tempfile = Path.Combine(tempPath, entry.Key); + entry.WriteToFile(tempfile); + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{entry.Key} - {protection}"); + } + catch { } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/Textfile.cs b/BurnOutSharp/FileType/Textfile.cs new file mode 100644 index 00000000..5c8c9c41 --- /dev/null +++ b/BurnOutSharp/FileType/Textfile.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; + +namespace BurnOutSharp.FileType +{ + internal class Textfile + { + public static bool ShouldScan(byte[] magic, string extension) + { + // Rich Text File + if (magic.StartsWith(new byte[] { 0x7b, 0x5c, 0x72, 0x74, 0x66, 0x31 })) + return true; + + // HTML + if (magic.StartsWith(new byte[] { 0x3c, 0x68, 0x74, 0x6d, 0x6c })) + return true; + + // HTML and XML + if (magic.StartsWith(new byte[] { 0x3c, 0x21, 0x44, 0x4f, 0x43, 0x54, 0x59, 0x50, 0x45 })) + return true; + + // Microsoft Office File (old) + if (magic.StartsWith(new byte[] { 0xd0, 0xcf, 0x11, 0xe0, 0xa1, 0xb1, 0x1a, 0xe1 })) + return true; + + // Generic textfile (no header) + if (string.Equals(extension, "txt", StringComparison.OrdinalIgnoreCase)) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + try + { + // Load the current file content + string fileContent = null; + using (StreamReader sr = new StreamReader(stream, Encoding.Default, false, 1024 * 1024, true)) + { + fileContent = sr.ReadToEnd(); + } + + // CD-Key + if (fileContent.Contains("a valid serial number is required") + || fileContent.Contains("serial number is located")) + { + protections.Add("CD-Key / Serial"); + } + } + catch + { + // We don't care what the error was + } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/Valve.cs b/BurnOutSharp/FileType/Valve.cs new file mode 100644 index 00000000..ab8acd51 --- /dev/null +++ b/BurnOutSharp/FileType/Valve.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.IO; +using HLExtract.Net; + +namespace BurnOutSharp.FileType +{ + internal class Valve + { + public static bool ShouldScan(byte[] magic) + { + // GCF + if (magic.StartsWith(new byte[] { 0x01, 0x00, 0x00, 0x00 })) + return true; + + // PAK + if (magic.StartsWith(new byte[] { 0x50, 0x41, 0x43, 0x4b })) + return true; + + // SGA + if (magic.StartsWith(new byte[] { 0x5f, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45 })) + return true; + + // VPK + if (magic.StartsWith(new byte[] { 0x55, 0xaa, 0x12, 0x34 })) + return true; + + // WAD + if (magic.StartsWith(new byte[] { 0x57, 0x41, 0x44, 0x33 })) + return true; + + return false; + } + + // TODO: Add stream opening support + public static List Scan(string file) + { + List protections = new List(); + + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + string[] args = new string[] + { + "-p", file, + "-x", "root", + "-x", "'extract .'", + "-x", "exit", + "-d", tempPath, + }; + + HLExtractProgram.Process(args); + + if (Directory.Exists(tempPath)) + { + foreach (string tempFile in Directory.EnumerateFiles(tempPath, "*", SearchOption.AllDirectories)) + { + string protection = ProtectionFind.ScanContent(tempFile); + + // If tempfile cleanup fails + try + { + File.Delete(tempFile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add(tempFile); + } + } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/FileType/XZ.cs b/BurnOutSharp/FileType/XZ.cs new file mode 100644 index 00000000..9adbd845 --- /dev/null +++ b/BurnOutSharp/FileType/XZ.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SharpCompress.Compressors.Xz; + +namespace BurnOutSharp.FileType +{ + internal class XZ + { + public static bool ShouldScan(byte[] magic) + { + if (magic.StartsWith(new byte[] { 0xfd, 0x37, 0x7a, 0x58, 0x5a, 0x00 })) + return true; + + return false; + } + + public static List Scan(Stream stream) + { + List protections = new List(); + + // If the 7-zip file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + using (XZStream xzFile = new XZStream(stream)) + { + // If an individual entry fails + try + { + string tempfile = Path.Combine(tempPath, Guid.NewGuid().ToString()); + using (FileStream fs = File.OpenWrite(tempfile)) + { + xzFile.CopyTo(fs); + } + + string protection = ProtectionFind.ScanContent(tempfile); + + // If tempfile cleanup fails + try + { + File.Delete(tempfile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{protection}"); + } + catch { } + + // If temp directory cleanup fails + try + { + Directory.Delete(tempPath, true); + } + catch { } + } + } + catch { } + + return protections; + } + } +} diff --git a/BurnOutSharp/HLLib.x64.dll b/BurnOutSharp/HLLib.x64.dll new file mode 100644 index 0000000000000000000000000000000000000000..e1cf3fa1cbba535d2794fdc7743388d168fe2835 GIT binary patch literal 224256 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 literal 0 HcmV?d00001 diff --git a/BurnOutSharp/HLLib.x86.dll b/BurnOutSharp/HLLib.x86.dll new file mode 100644 index 0000000000000000000000000000000000000000..087a5416832468670df19e820b49c7b569cb1c77 GIT binary patch literal 187392 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≻+G#XcG-&B#;3` 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

    DO;tzVE1rBrYX4Nxi&K!5}aR7DH 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

    DU8X#Cw1k7-lwTN*UP=gKD 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 /// File path for scanning - public static string ScanInFile(string file) + public static string ScanContent(string file) { - // Get the extension for certain checks - string extension = Path.GetExtension(file).ToLower().TrimStart('.'); - - // Read the first 8 bytes to get the file type - string magic = ""; - try + using (FileStream fs = File.OpenRead(file)) { - using (BinaryReader br = new BinaryReader(File.OpenRead(file))) - { - magic = new string(br.ReadChars(8)); - } + return ScanContent(fs, file); } - catch - { - // We don't care what the issue was, we can't open the file - return null; - } - - // Files can be protected in multiple ways - List protections = new List(); - - #region Executable Content Checks - - if (magic.StartsWith("MZ") // Windows Executable and DLL - || magic.StartsWith((char)0x7f + "ELF") // Unix binaries - || magic.StartsWith("" + (char)0xfe + (char)0xed + (char)0xfa + (char)0xce) // Macintosh - || magic.StartsWith("" + (char)0xce + (char)0xfa + (char)0xed + (char)0xfe) // Macintosh - || magic.StartsWith("Joy!peff")) // Macintosh - { - try - { - // Load the current file content - string fileContent = null; - using (StreamReader sr = new StreamReader(file, Encoding.Default)) - { - fileContent = sr.ReadToEnd(); - } - - protections.AddRange(ScanFileContent(file, fileContent)); - } - catch { } - } - - #endregion - - #region Textfile Content Checks - - if (magic.StartsWith("{\rtf") // Rich Text File - || magic.StartsWith("" + (char)0xd0 + (char)0xcf + (char)0x11 + (char)0xe0 + (char)0xa1 + (char)0xb1 + (char)0x1a + (char)0xe1) // Microsoft Office File (old) - || extension == "txt") // Generic textfile (no header) - { - try - { - StreamReader sr = File.OpenText(file); - string FileContent = sr.ReadToEnd().ToLower(); - sr.Close(); - - // CD-Key - if (FileContent.Contains("a valid serial number is required") - || FileContent.Contains("serial number is located")) - { - protections.Add("CD-Key / Serial"); - } - } - catch - { - // We don't care what the error was - } - } - - #endregion - - #region Archive Content Checks - - // 7-zip - if (magic.StartsWith("7z" + (char)0xbc + (char)0xaf + (char)0x27 + (char)0x1c)) - { - // No-op - } - - // InstallShield CAB - else if (magic.StartsWith("ISc")) - { - // Get the name of the first cabinet file or header - string directory = Path.GetDirectoryName(file); - string noExtension = Path.GetFileNameWithoutExtension(file); - string filenamePattern = Path.Combine(directory, noExtension); - filenamePattern = new Regex(@"\d+$").Replace(filenamePattern, string.Empty); - - bool cabinetHeaderExists = File.Exists(Path.Combine(directory, filenamePattern + "1.hdr")); - bool shouldScanCabinet = cabinetHeaderExists - ? file.Equals(Path.Combine(directory, filenamePattern + "1.hdr"), StringComparison.OrdinalIgnoreCase) - : file.Equals(Path.Combine(directory, filenamePattern + "1.cab"), StringComparison.OrdinalIgnoreCase); - - // If we have the first file - if (shouldScanCabinet) - { - try - { - string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); - Directory.CreateDirectory(tempPath); - - UnshieldCabinet cabfile = UnshieldCabinet.Open(file); - for (int i = 0; i < cabfile.FileCount; i++) - { - string tempFileName = Path.Combine(tempPath, cabfile.FileName(i)); - if (cabfile.FileSave(i, tempFileName)) - { - string protection = ScanInFile(tempFileName); - try - { - File.Delete(tempFileName); - } - catch { } - - if (!string.IsNullOrEmpty(protection)) - protections.Add(protection); - } - } - - try - { - Directory.Delete(tempPath, true); - } - catch { } - } - catch { } - } - } - - // Microsoft CAB - else if (magic.StartsWith("MSCF")) - { - try - { - string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); - Directory.CreateDirectory(tempPath); - - using (MSCabinet cabfile = new MSCabinet(file)) - { - foreach (var sub in cabfile.GetFiles()) - { - string tempfile = Path.Combine(tempPath, sub.Filename); - sub.ExtractTo(tempfile); - string protection = ScanInFile(tempfile); - File.Delete(tempfile); - - if (!string.IsNullOrEmpty(protection)) - protections.Add(protection); - } - - try - { - Directory.Delete(tempPath, true); - } - catch { } - } - } - catch { } - } - - // PKZIP - else if (magic.StartsWith("PK" + (char)03 + (char)04) - || magic.StartsWith("PK" + (char)05 + (char)06) - || magic.StartsWith("PK" + (char)07 + (char)08)) - { - // No-op - } - - // RAR - else if (magic.StartsWith("Rar!")) - { - // No-op - } - - #endregion - - // Return blank if nothing found, or comma-separated list of protections - if (protections.Count() == 0) - return string.Empty; - else - return string.Join(", ", protections); } ///

    @@ -541,115 +360,82 @@ namespace BurnOutSharp /// /// Generic stream to scan /// File path to be used for name checks (optional) - public static string ScanInFile(Stream stream, string file = null) + public static string ScanContent(Stream stream, string file = null) { + // Get the extension for certain checks + string extension = Path.GetExtension(file).ToLower().TrimStart('.'); + // Assume the first part of the stream is the start of a file - string magic = ""; + byte[] magic = new byte[16]; try { - using (BinaryReader br = new BinaryReader(stream, Encoding.Default, true)) - { - magic = new string(br.ReadChars(8)); - } + stream.Read(magic, 0, 16); + stream.Seek(-16, SeekOrigin.Current); } catch { - // We don't care what the issue was, we can't open the file + // We don't care what the issue was, we can't read or seek the file return null; } - // If we can, seek to the beginning of the stream - if (stream.CanSeek) - stream.Seek(0, SeekOrigin.Begin); - // Files can be protected in multiple ways List protections = new List(); - #region Executable Content Checks + // 7-Zip archive + if (SevenZip.ShouldScan(magic)) + protections.AddRange(SevenZip.Scan(stream)); - // Windows Executable and DLL - if (magic.StartsWith("MZ")) - { - try - { - // Load the current file content - string fileContent = null; - using (StreamReader sr = new StreamReader(stream, Encoding.Default)) - { - fileContent = sr.ReadToEnd(); - } + // BFPK archive + if (BFPK.ShouldScan(magic)) + protections.AddRange(BFPK.Scan(stream)); - protections.AddRange(ScanFileContent(file, fileContent)); - } - catch { } - } + // BZip2 + if (BZip2.ShouldScan(magic)) + protections.AddRange(BZip2.Scan(stream)); - #endregion + // Executable + if (Executable.ShouldScan(magic)) + protections.AddRange(Executable.Scan(stream, file)); - #region Textfile Content Checks + // GZIP + if (GZIP.ShouldScan(magic)) + protections.AddRange(GZIP.Scan(stream)); - if (magic.StartsWith("{\rtf") // Rich Text File - || magic.StartsWith("" + (char)0xd0 + (char)0xcf + (char)0x11 + (char)0xe0 + (char)0xa1 + (char)0xb1 + (char)0x1a + (char)0xe1)) // Microsoft Office File (old) - { - try - { - // Load the current file content - string fileContent = null; - using (StreamReader sr = new StreamReader(stream)) - { - fileContent = sr.ReadToEnd(); - } + // InstallShield Cabinet + if (file != null && InstallShieldCAB.ShouldScan(magic)) + protections.AddRange(InstallShieldCAB.Scan(file)); - // CD-Key - if (fileContent.Contains("a valid serial number is required") - || fileContent.Contains("serial number is located")) - { - protections.Add("CD-Key / Serial"); - } - } - catch - { - // We don't care what the error was - } - } + // Microsoft Cabinet + if (file != null && MicrosoftCAB.ShouldScan(magic)) + protections.AddRange(MicrosoftCAB.Scan(file)); - #endregion + // MPQ archive + if (file != null && MPQ.ShouldScan(magic)) + protections.AddRange(MPQ.Scan(file)); - #region Archive Content Checks + // PKZIP archive (and derivatives) + if (PKZIP.ShouldScan(magic)) + protections.AddRange(PKZIP.Scan(stream)); - // 7-zip - if (magic.StartsWith("7z" + (char)0xbc + (char)0xaf + (char)0x27 + (char)0x1c)) - { - // No-op - } + // RAR archive + if (RAR.ShouldScan(magic)) + protections.AddRange(RAR.Scan(stream)); - // InstallShield CAB - else if (magic.StartsWith("ISc")) - { - // TODO: Update UnshieldSharp to include generic stream support - } + // Tape Archive + if (TapeArchive.ShouldScan(magic)) + protections.AddRange(TapeArchive.Scan(stream)); - // Microsoft CAB - else if (magic.StartsWith("MSCF")) - { - // TODO: See if LibMSPackN can use generic streams - } + // Text-based files + if (Textfile.ShouldScan(magic, extension)) + protections.AddRange(Textfile.Scan(stream)); - // PKZIP - else if (magic.StartsWith("PK" + (char)03 + (char)04) - || magic.StartsWith("PK" + (char)05 + (char)06) - || magic.StartsWith("PK" + (char)07 + (char)08)) - { - // No-op - } + // Valve archive formats + if (file != null && Valve.ShouldScan(magic)) + protections.AddRange(Valve.Scan(file)); - // RAR - else if (magic.StartsWith("Rar!")) - { - // No-op - } - - #endregion + // XZ + if (XZ.ShouldScan(magic)) + protections.AddRange(XZ.Scan(stream)); // Return blank if nothing found, or comma-separated list of protections if (protections.Count() == 0) @@ -658,204 +444,6 @@ namespace BurnOutSharp return string.Join(", ", protections); } - /// - /// Scan the contents of a file for protection - /// - /// TODO: This needs to work on a byte array of file content instead of string - private static List ScanFileContent(string file, string fileContent) - { - // Files can be protected in multiple ways - List protections = new List(); - string protection; - - // 3PLock - protection = ThreePLock.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // ActiveMARK - protection = ActiveMARK.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Alpha-ROM - protection = AlphaROM.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Armadillo - protection = Armadillo.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // CD-Cops - protection = CDCops.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // CD-Lock - protection = CDLock.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // CDSHiELD SE - protection = CDSHiELDSE.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // CD Check - protection = CDCheck.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Cenega ProtectDVD - protection = CengaProtectDVD.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Code Lock - protection = CodeLock.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // CopyKiller - protection = CopyKiller.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Cucko (EA Custom) - protection = Cucko.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // dotFuscator - protection = dotFuscator.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // DVD-Cops - protection = DVDCops.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // EA CdKey Registration Module - protection = EACdKey.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // EXE Stealth - protection = EXEStealth.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Games for Windows - Live - protection = GFWL.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Impulse Reactor - protection = ImpulseReactor.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Inno Setup - protection = InnoSetup.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // JoWooD X-Prot - protection = JoWooDXProt.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Key-Lock (Dongle) - protection = KeyLock.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // LaserLock - protection = LaserLock.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // PE Compact - protection = PECompact.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // ProtectDisc - protection = ProtectDisc.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Ring PROTECH - protection = RingPROTECH.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // SafeDisc / SafeCast - protection = SafeDisc.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // SafeLock - protection = SafeLock.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // SecuROM - protection = SecuROM.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // SmartE - protection = SmartE.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // SolidShield - protection = SolidShield.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // StarForce - protection = StarForce.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // SVK Protector - protection = SVKProtector.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Sysiphus / Sysiphus DVD - protection = Sysiphus.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // TAGES - protection = Tages.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // VOB ProtectCD/DVD - protection = VOBProtectCDDVD.CheckContents(file, fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // WTM CD Protect - protection = WTMCDProtect.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - // Xtreme-Protector - protection = XtremeProtector.CheckContents(fileContent); - if (!string.IsNullOrWhiteSpace(protection)) - protections.Add(protection); - - return protections; - } - /// /// Scan a disc sector by sector for protection /// diff --git a/BurnOutSharp/ProtectionType/ActiveMARK.cs b/BurnOutSharp/ProtectionType/ActiveMARK.cs index 8c59cf45..cf9231c4 100644 --- a/BurnOutSharp/ProtectionType/ActiveMARK.cs +++ b/BurnOutSharp/ProtectionType/ActiveMARK.cs @@ -2,17 +2,17 @@ { public class ActiveMARK { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("TMSAMVOF")) - return "ActiveMARK"; + // "TMSAMVOF" + byte[] check = new byte[] { 0x54, 0x4D, 0x53, 0x41, 0x4D, 0x56, 0x4F, 0x46 }; + if (fileContent.Contains(check, out int position)) + return $"ActiveMARK (Index {position})"; - if (fileContent.Contains(" " + (char)0xC2 + (char)0x16 + (char)0x00 + (char)0xA8 + (char)0xC1 + (char)0x16 - + (char)0x00 + (char)0xB8 + (char)0xC1 + (char)0x16 + (char)0x00 + (char)0x86 + (char)0xC8 + (char)0x16 + (char)0x0 - + (char)0x9A + (char)0xC1 + (char)0x16 + (char)0x00 + (char)0x10 + (char)0xC2 + (char)0x16 + (char)0x00)) - { - return "ActiveMARK 5"; - } + // " " + (char)0xC2 + (char)0x16 + (char)0x00 + (char)0xA8 + (char)0xC1 + (char)0x16 + (char)0x00 + (char)0xB8 + (char)0xC1 + (char)0x16 + (char)0x00 + (char)0x86 + (char)0xC8 + (char)0x16 + (char)0x0 + (char)0x9A + (char)0xC1 + (char)0x16 + (char)0x00 + (char)0x10 + (char)0xC2 + (char)0x16 + (char)0x00 + check = new byte[] { 0x20, 0xC2, 0x16, 0x00, 0xA8, 0xC1, 0x16, 0x00, 0xB8, 0xC1, 0x16, 0x00, 0x86, 0xC8, 0x16, 0x0, 0x9A, 0xC1, 0x16, 0x00, 0x10, 0xC2, 0x16, 0x00 }; + if (fileContent.Contains(check, out position)) + return $"ActiveMARK 5 (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/AlphaROM.cs b/BurnOutSharp/ProtectionType/AlphaROM.cs index b6d6292d..1d32ae1c 100644 --- a/BurnOutSharp/ProtectionType/AlphaROM.cs +++ b/BurnOutSharp/ProtectionType/AlphaROM.cs @@ -2,10 +2,12 @@ { public class AlphaROM { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("SETTEC")) - return "Alpha-ROM"; + // "SETTEC" + byte[] check = new byte[] { 0x53, 0x45, 0x54, 0x54, 0x45, 0x43 }; + if (fileContent.Contains(check, out int position)) + return $"Alpha-ROM (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/Armadillo.cs b/BurnOutSharp/ProtectionType/Armadillo.cs index 39aaa58a..61d10f08 100644 --- a/BurnOutSharp/ProtectionType/Armadillo.cs +++ b/BurnOutSharp/ProtectionType/Armadillo.cs @@ -2,11 +2,17 @@ { public class Armadillo { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains(".nicode" + (char)0x00) - || fileContent.Contains("ARMDEBUG")) - return "Armadillo"; + // ".nicode" + (char)0x00 + byte[] check = new byte[] { 0x2E, 0x6E, 0x69, 0x63, 0x6F, 0x64, 0x65, 0x00 }; + if (fileContent.Contains(check, out int position)) + return $"Armadillo (Index {position})"; + + // "ARMDEBUG" + check = new byte[] { 0x41, 0x52, 0x4D, 0x44, 0x45, 0x42, 0x55, 0x47 }; + if (fileContent.Contains(check, out position)) + return $"Armadillo (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/CDCheck.cs b/BurnOutSharp/ProtectionType/CDCheck.cs index 4a18b340..c0ce056f 100644 --- a/BurnOutSharp/ProtectionType/CDCheck.cs +++ b/BurnOutSharp/ProtectionType/CDCheck.cs @@ -2,11 +2,17 @@ { public class CDCheck { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("GetDriveType") - || fileContent.Contains("GetVolumeInformation")) - return "CD Check"; + // "GetDriveType" + byte[] check = new byte[] { 0x47, 0x65, 0x74, 0x44, 0x72, 0x69, 0x76, 0x65, 0x54, 0x79, 0x70, 0x65 }; + if (fileContent.Contains(check, out int position)) + return $"CD Check (Index {position})"; + + // "GetVolumeInformation" + check = new byte[] { 0x47, 0x65, 0x74, 0x56, 0x6F, 0x6C, 0x75, 0x6D, 0x65, 0x49, 0x6E, 0x66, 0x6F, 0x72, 0x6D, 0x61, 0x74, 0x69, 0x6F, 0x6E }; + if (fileContent.Contains(check, out position)) + return $"CD Check (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/CDCops.cs b/BurnOutSharp/ProtectionType/CDCops.cs index ad70618d..6f39ef2e 100644 --- a/BurnOutSharp/ProtectionType/CDCops.cs +++ b/BurnOutSharp/ProtectionType/CDCops.cs @@ -7,14 +7,17 @@ namespace BurnOutSharp.ProtectionType { public class CDCops { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("CD-Cops, ver. ")) > -1) - return "CD-Cops " + GetVersion(file, position); + // "CD-Cops, ver. " + byte[] check = new byte[] { 0x43, 0x44, 0x2D, 0x43, 0x6F, 0x70, 0x73, 0x2C, 0x20, 0x20, 0x76, 0x65, 0x72, 0x2E, 0x20 }; + if (fileContent.Contains(check, out int position)) + return $"CD-Cops {GetVersion(fileContent, position)} (Index {position})"; - if (fileContent.Contains(".grand" + (char)0x00)) - return "CD-Cops"; + // ".grand" + (char)0x00 + check = new byte[] { 0x2E, 0x67, 0x72, 0x61, 0x6E, 0x64, 0x00}; + if (fileContent.Contains(check, out position)) + return $"CD-Cops (Index {position})"; return null; } @@ -47,21 +50,13 @@ namespace BurnOutSharp.ProtectionType return null; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + char[] version = new ArraySegment(fileContent, position + 15, 4).Select(b => (char)b).ToArray(); + if (version[0] == 0x00) + return ""; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position + 15, SeekOrigin.Begin); // Begin reading after "CD-Cops, ver." - char[] version = br.ReadChars(4); - if (version[0] == 0x00) - return ""; - - return new string(version); - } + return new string(version); } } } diff --git a/BurnOutSharp/ProtectionType/CDLock.cs b/BurnOutSharp/ProtectionType/CDLock.cs index 06bbae10..68c1733d 100644 --- a/BurnOutSharp/ProtectionType/CDLock.cs +++ b/BurnOutSharp/ProtectionType/CDLock.cs @@ -7,14 +7,12 @@ namespace BurnOutSharp.ProtectionType { public class CDLock { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("2" + (char)0xF2 + (char)0x02 + (char)0x82 + (char)0xC3 + (char)0xBC + (char)0x0B - + "$" + (char)0x99 + (char)0xAD + "'C" + (char)0xE4 + (char)0x9D + "st" - + (char)0x99 + (char)0xFA + "2$" + (char)0x9D + ")4" + (char)0xFF + "t")) - { - return "CD-Lock"; - } + // "2" + (char)0xF2 + (char)0x02 + (char)0x82 + (char)0xC3 + (char)0xBC + (char)0x0B + "$" + (char)0x99 + (char)0xAD + "'C" + (char)0xE4 + (char)0x9D + "st" + (char)0x99 + (char)0xFA + "2$" + (char)0x9D + ")4" + (char)0xFF + "t" + byte[] check = new byte[] { 0x32, 0xF2, 0x02, 0x82, 0xC3, 0xBC, 0x0B, 0x24, 0x99, 0xAD, 0x27, 0x43, 0xE4, 0x9D, 0x73, 0x74, 0x99, 0xFA, 0x32, 0x24, 0x9D, 0x29, 0x34, 0xFF, 0x74 }; + if (fileContent.Contains(check, out int position)) + return $"CD-Lock (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/CDSHiELDSE.cs b/BurnOutSharp/ProtectionType/CDSHiELDSE.cs index 31d27ca7..258dea06 100644 --- a/BurnOutSharp/ProtectionType/CDSHiELDSE.cs +++ b/BurnOutSharp/ProtectionType/CDSHiELDSE.cs @@ -2,10 +2,12 @@ { public class CDSHiELDSE { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("~0017.tmp")) - return "CDSHiELD SE"; + // "~0017.tmp" + byte[] check = new byte[] { 0x7E, 0x30, 0x30, 0x31, 0x37, 0x2E, 0x74, 0x6D, 0x70 }; + if (fileContent.Contains(check, out int position)) + return $"CDSHiELD SE (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/CengaProtectDVD.cs b/BurnOutSharp/ProtectionType/CengaProtectDVD.cs index a4161587..860a8aeb 100644 --- a/BurnOutSharp/ProtectionType/CengaProtectDVD.cs +++ b/BurnOutSharp/ProtectionType/CengaProtectDVD.cs @@ -2,10 +2,12 @@ { public class CengaProtectDVD { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains(".cenega")) - return "Cenega ProtectDVD"; + // ".cenega" + byte[] check = new byte[] { 0x2E, 0x63, 0x65, 0x6E, 0x65, 0x67, 0x61 }; + if (fileContent.Contains(check, out int position)) + return $"Cenega ProtectDVD (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/CodeLock.cs b/BurnOutSharp/ProtectionType/CodeLock.cs index ad66e48f..6baae3f1 100644 --- a/BurnOutSharp/ProtectionType/CodeLock.cs +++ b/BurnOutSharp/ProtectionType/CodeLock.cs @@ -2,15 +2,23 @@ { public class CodeLock { - public static string CheckContents(string fileContent) + // TODO: Verify if these are OR or AND + public static string CheckContents(byte[] fileContent) { - // TODO: Verify if these are OR or AND - if (fileContent.Contains("icd1" + (char)0x00) - || fileContent.Contains("icd2" + (char)0x00) - || fileContent.Contains("CODE-LOCK.OCX")) - { - return "Code Lock"; - } + // "icd1" + (char)0x00 + byte[] check = new byte[] { 0x69, 0x63, 0x64, 0x31, 0x00 }; + if (fileContent.Contains(check, out int position)) + return $"Code Lock (Index {position})"; + + // "icd2" + (char)0x00 + check = new byte[] { 0x69, 0x63, 0x64, 0x32, 0x00 }; + if (fileContent.Contains(check, out position)) + return $"Code Lock (Index {position})"; + + // "CODE-LOCK.OCX" + check = new byte[] { 0x43, 0x4F, 0x44, 0x45, 0x2D, 0x4C, 0x4F, 0x43, 0x4B, 0x2E, 0x4F, 0x43, 0x58 }; + if (fileContent.Contains(check, out position)) + return $"Code Lock (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/CopyKiller.cs b/BurnOutSharp/ProtectionType/CopyKiller.cs index b21aba12..34a6ed54 100644 --- a/BurnOutSharp/ProtectionType/CopyKiller.cs +++ b/BurnOutSharp/ProtectionType/CopyKiller.cs @@ -7,10 +7,12 @@ namespace BurnOutSharp.ProtectionType { public class CopyKiller { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("Tom Commander")) - return "CopyKiller"; + // "Tom Commander" + byte[] check = new byte[] { 0x54, 0x6F, 0x6D, 0x20, 0x43, 0x6F, 0x6D, 0x6D, 0x61, 0x6E, 0x64, 0x65, 0x72 }; + if (fileContent.Contains(check, out int position)) + return $"CopyKiller (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/Cucko.cs b/BurnOutSharp/ProtectionType/Cucko.cs index 56d5588c..6b91ed46 100644 --- a/BurnOutSharp/ProtectionType/Cucko.cs +++ b/BurnOutSharp/ProtectionType/Cucko.cs @@ -2,11 +2,13 @@ { public class Cucko { - public static string CheckContents(string fileContent) + // TODO: Verify this doesn't over-match + public static string CheckContents(byte[] fileContent) { - // TODO: Verify this doesn't over-match - if (fileContent.Contains("EASTL")) - return "Cucko (EA Custom)"; + // "EASTL" + byte[] check = new byte[] { 0x45, 0x41, 0x53, 0x54, 0x4C }; + if (fileContent.Contains(check, out int position)) + return $"Cucko (EA Custom) (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/DVDCops.cs b/BurnOutSharp/ProtectionType/DVDCops.cs index ed80c3fc..4566bb71 100644 --- a/BurnOutSharp/ProtectionType/DVDCops.cs +++ b/BurnOutSharp/ProtectionType/DVDCops.cs @@ -1,33 +1,27 @@ -using System.IO; +using System; +using System.Linq; namespace BurnOutSharp.ProtectionType { public class DVDCops { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("DVD-Cops, ver. ")) > -1) - return "DVD-Cops " + GetVersion(file, position); + // "DVD-Cops, ver. " + byte[] check = new byte[] { 0x44, 0x56, 0x44, 0x2D, 0x43, 0x6F, 0x70, 0x73, 0x2C, 0x20, 0x20, 0x76, 0x65, 0x72, 0x2E, 0x20 }; + if (fileContent.Contains(check, out int position)) + return $"DVD-Cops {GetVersion(fileContent, position)} (Index {position})"; return null; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + char[] version = new ArraySegment(fileContent, position + 15, 4).Select(b => (char)b).ToArray(); + if (version[0] == 0x00) + return ""; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position + 15, SeekOrigin.Begin); // Begin reading after "CD-Cops, ver." - char[] version = br.ReadChars(4); - if (version[0] == 0x00) - return ""; - - return new string(version); - } + return new string(version); } } } diff --git a/BurnOutSharp/ProtectionType/EACdKey.cs b/BurnOutSharp/ProtectionType/EACdKey.cs index fd196f2f..d4c4a8e9 100644 --- a/BurnOutSharp/ProtectionType/EACdKey.cs +++ b/BurnOutSharp/ProtectionType/EACdKey.cs @@ -2,10 +2,12 @@ { public class EACdKey { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("ereg.ea-europe.com")) - return "EA CdKey Registration Module"; + // "ereg.ea-europe.com" + byte[] check = new byte[] { 0x65, 0x72, 0x65, 0x67, 0x2E, 0x65, 0x61, 0x2D, 0x65, 0x75, 0x72, 0x6F, 0x70, 0x65, 0x2E, 0x63, 0x6F, 0x6D }; + if (fileContent.Contains(check, out int position)) + return $"EA CdKey Registration Module (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/EXEStealth.cs b/BurnOutSharp/ProtectionType/EXEStealth.cs index fe03597c..962b1919 100644 --- a/BurnOutSharp/ProtectionType/EXEStealth.cs +++ b/BurnOutSharp/ProtectionType/EXEStealth.cs @@ -2,14 +2,12 @@ { public class EXEStealth { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("??[[__[[_" + (char)0x00 + "{{" + (char)0x0 - + (char)0x00 + "{{" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x0 - + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "?;??;??")) - { - return "EXE Stealth"; - } + // "??[[__[[_" + (char)0x00 + "{{" + (char)0x0 + (char)0x00 + "{{" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x0 + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "?;??;??" + byte[] check = new byte[] { 0x3F, 0x3F, 0x5B, 0x5B, 0x5F, 0x5F, 0x5B, 0x5B, 0x5F, 0x00, 0x7B, 0x7B, 0x00, 0x00, 0x7B, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x3F, 0x3B, 0x3F, 0x3F, 0x3B, 0x3F, 0x3F }; + if (fileContent.Contains(check, out int position)) + return $"EXE Stealth (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/GFWL.cs b/BurnOutSharp/ProtectionType/GFWL.cs index 8424e22b..4dc0076d 100644 --- a/BurnOutSharp/ProtectionType/GFWL.cs +++ b/BurnOutSharp/ProtectionType/GFWL.cs @@ -7,10 +7,12 @@ namespace BurnOutSharp.ProtectionType { public class GFWL { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("xlive.dll")) - return "Games for Windows - Live"; + // "xlive.dll" + byte[] check = new byte[] { 0x78, 0x6C, 0x69, 0x76, 0x65, 0x2E, 0x64, 0x6C, 0x6C }; + if (fileContent.Contains(check, out int position)) + return $"Games for Windows - Live (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/ImpulseReactor.cs b/BurnOutSharp/ProtectionType/ImpulseReactor.cs index ca414984..6602fabc 100644 --- a/BurnOutSharp/ProtectionType/ImpulseReactor.cs +++ b/BurnOutSharp/ProtectionType/ImpulseReactor.cs @@ -7,22 +7,18 @@ namespace BurnOutSharp.ProtectionType { public class ImpulseReactor { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - if (fileContent.Contains("CVPInitializeClient")) + // "CVPInitializeClient" + byte[] check = new byte[] { 0x43, 0x56, 0x50, 0x49, 0x6E, 0x69, 0x74, 0x69, 0x61, 0x6C, 0x69, 0x7A, 0x65, 0x43, 0x6C, 0x69, 0x65, 0x6E, 0x74 }; + if (fileContent.Contains(check, out int position)) { - if (fileContent.Contains("A" + (char)0x00 + "T" + (char)0x00 + "T" + (char)0x00 + "L" + (char)0x00 + "I" - + (char)0x00 + "S" + (char)0x00 + "T" + (char)0x00 + (char)0x00 + (char)0x00 + "E" + (char)0x00 + "L" - + (char)0x00 + "E" + (char)0x00 + "M" + (char)0x00 + "E" + (char)0x00 + "N" + (char)0x00 + "T" + (char)0x00 - + (char)0x00 + (char)0x00 + "N" + (char)0x00 + "O" + (char)0x00 + "T" + (char)0x00 + "A" + (char)0x00 + "T" - + (char)0x00 + "I" + (char)0x00 + "O" + (char)0x00 + "N")) - { - return "Impulse Reactor " + Utilities.GetFileVersion(file); - } + // "A" + (char)0x00 + "T" + (char)0x00 + "T" + (char)0x00 + "L" + (char)0x00 + "I" + (char)0x00 + "S" + (char)0x00 + "T" + (char)0x00 + (char)0x00 + (char)0x00 + "E" + (char)0x00 + "L" + (char)0x00 + "E" + (char)0x00 + "M" + (char)0x00 + "E" + (char)0x00 + "N" + (char)0x00 + "T" + (char)0x00 + (char)0x00 + (char)0x00 + "N" + (char)0x00 + "O" + (char)0x00 + "T" + (char)0x00 + "A" + (char)0x00 + "T" + (char)0x00 + "I" + (char)0x00 + "O" + (char)0x00 + "N" + byte[] check2 = new byte[] { 0x41, 0x00, 0x54, 0x00, 0x54, 0x00, 0x4C, 0x00, 0x49, 0x00, 0x53, 0x00, 0x54, 0x00, 0x00, 0x00, 0x45, 0x00, 0x4C, 0x00, 0x45, 0x00, 0x4D, 0x00, 0x45, 0x00, 0x4E, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x4F, 0x00, 0x54, 0x00, 0x41, 0x00, 0x54, 0x00, 0x49, 0x00, 0x4F, 0x00, 0x4E }; + if (fileContent.Contains(check2, out int position2)) + return $"Impulse Reactor {Utilities.GetFileVersion(file)} (Index {position}, {position2}"; else - { - return "Impulse Reactor"; - } + return $"Impulse Reactor (Index {position})"; } return null; diff --git a/BurnOutSharp/ProtectionType/InnoSetup.cs b/BurnOutSharp/ProtectionType/InnoSetup.cs index bda474e5..c259f8f2 100644 --- a/BurnOutSharp/ProtectionType/InnoSetup.cs +++ b/BurnOutSharp/ProtectionType/InnoSetup.cs @@ -1,48 +1,55 @@ -using System.IO; +using System; +using System.Linq; namespace BurnOutSharp.ProtectionType { public class InnoSetup { - public static string CheckContents(string file, string fileContent) + // TOOO: Add Inno Setup extraction + // https://github.com/dscharrer/InnoExtract + public static string CheckContents(byte[] fileContent) { - if (fileContent.IndexOf("Inno") == 0x30) - { - // TOOO: Add Inno Setup extraction - return "Inno Setup " + GetVersion(file); - } + // "Inno" + byte[] check = new byte[] { 0x49, 0x6E, 0x6E, 0x6F }; + if (fileContent.Contains(check, out int position) && position == 0x30) + return $"Inno Setup {GetVersion(fileContent)} (Index {position})"; return null; } - private static string GetVersion(string file) + private static string GetVersion(byte[] fileContent) { - if (file == null || !File.Exists(file)) - return string.Empty; + byte[] signature = new ArraySegment(fileContent, 0x30, 12).ToArray(); - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(0x30, SeekOrigin.Begin); - string signature = new string(br.ReadChars(12)); + // "rDlPtS02" + (char)0x87 + "eVx" + if (signature.SequenceEqual( new byte[] { 0x72, 0x44, 0x6C, 0x50, 0x74, 0x53, 0x30, 0x32, 0x87, 0x65, 0x56, 0x78 })) + return "1.2.10"; - if (signature == "rDlPtS02" + (char)0x87 + "eVx") - return "1.2.10"; - else if (signature == "rDlPtS04" + (char)0x87 + "eVx") - return "4.0.0"; - else if (signature == "rDlPtS05" + (char)0x87 + "eVx") - return "4.0.3"; - else if (signature == "rDlPtS06" + (char)0x87 + "eVx") - return "4.0.10"; - else if (signature == "rDlPtS07" + (char)0x87 + "eVx") - return "4.1.6"; - else if (signature == "rDlPtS" + (char)0xcd + (char)0xe6 + (char)0xd7 + "{" + (char)0x0b + "*") - return "5.1.5"; - else if (signature == "nS5W7dT" + (char)0x83 + (char)0xaa + (char)0x1b + (char)0x0f + "j") - return "5.1.5"; + // "rDlPtS04" + (char)0x87 + "eVx" + else if (signature.SequenceEqual(new byte[] { 0x72, 0x44, 0x6C, 0x50, 0x74, 0x53, 0x30, 0x34, 0x87, 0x65, 0x56, 0x78 })) + return "4.0.0"; - return string.Empty; - } + // "rDlPtS05" + (char)0x87 + "eVx" + else if (signature.SequenceEqual(new byte[] { 0x72, 0x44, 0x6C, 0x50, 0x74, 0x53, 0x30, 0x35, 0x87, 0x65, 0x56, 0x78 })) + return "4.0.3"; + + // "rDlPtS06" + (char)0x87 + "eVx" + else if (signature.SequenceEqual(new byte[] { 0x72, 0x44, 0x6C, 0x50, 0x74, 0x53, 0x30, 0x36, 0x87, 0x65, 0x56, 0x78 })) + return "4.0.10"; + + // "rDlPtS07" + (char)0x87 + "eVx" + else if (signature.SequenceEqual(new byte[] { 0x72, 0x44, 0x6C, 0x50, 0x74, 0x53, 0x30, 0x37, 0x87, 0x65, 0x56, 0x78 })) + return "4.1.6"; + + // "rDlPtS" + (char)0xcd + (char)0xe6 + (char)0xd7 + "{" + (char)0x0b + "*" + else if (signature.SequenceEqual(new byte[] { 0x72, 0x44, 0x6C, 0x50, 0x74, 0x53, 0xCD, 0xE6, 0xD7, 0x7B, 0x0b, 0x2A })) + return "5.1.5"; + + // "nS5W7dT" + (char)0x83 + (char)0xaa + (char)0x1b + (char)0x0f + "j" + else if (signature.SequenceEqual(new byte[] { 0x6E, 0x53, 0x35, 0x57, 0x37, 0x64, 0x54, 0x83, 0xAA, 0x1B, 0x0F, 0x6A })) + return "5.1.5"; + + return string.Empty; } } } diff --git a/BurnOutSharp/ProtectionType/JoWooDXProt.cs b/BurnOutSharp/ProtectionType/JoWooDXProt.cs index ac1c4a26..9d88f744 100644 --- a/BurnOutSharp/ProtectionType/JoWooDXProt.cs +++ b/BurnOutSharp/ProtectionType/JoWooDXProt.cs @@ -1,51 +1,36 @@ -using System.IO; +using System; +using System.Linq; namespace BurnOutSharp.ProtectionType { public class JoWooDXProt { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(byte[] fileContent) { - int position; - if (fileContent.Contains(".ext ")) + // ".ext " + byte[] check = new byte[] { 0x2E, 0x65, 0x78, 0x74, 0x20, 0x20, 0x20, 0x20 }; + if (fileContent.Contains(check, out int position)) { - if ((position = fileContent.IndexOf("kernel32.dll" + (char)0x00 + (char)0x00 + (char)0x00 + "VirtualProtect")) > -1) - { - return "JoWooD X-Prot " + GetVersion(file, --position); - } + // "kernel32.dll" + (char)0x00 + (char)0x00 + (char)0x00 + "VirtualProtect" + byte[] check2 = new byte[] { 0x6B, 0x65, 0x72, 0x6E, 0x65, 0x6C, 0x33, 0x32, 0x2E, 0x64, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x56, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6C, 0x50, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74 }; + if (fileContent.Contains(check2, out int position2)) + return $"JoWooD X-Prot {GetVersion(fileContent, --position2)} (Index {position}, {position2})"; else - { - return "JoWooD X-Prot v1"; - } + return $"JoWooD X-Prot v1 (Index {position})"; } - if (fileContent.Contains("@HC09 ")) - return "JoWooD X-Prot v2"; + // "@HC09 " + check = new byte[] { 0x40, 0x48, 0x43, 0x30, 0x39, 0x20, 0x20, 0x20, 0x20 }; + if (fileContent.Contains(check, out position)) + return $"JoWooD X-Prot v2 (Index {position})"; return null; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; - - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - char[] version = new char[5]; - br.BaseStream.Seek(position + 67, SeekOrigin.Begin); - version[0] = br.ReadChar(); - br.ReadByte(); - version[1] = br.ReadChar(); - br.ReadByte(); - version[2] = br.ReadChar(); - br.ReadByte(); - version[3] = br.ReadChar(); - version[4] = br.ReadChar(); - - return version[0] + "." + version[1] + "." + version[2] + "." + version[3] + version[4]; - } + char[] version = new ArraySegment(fileContent, position + 67, 8).Select(b => (char)b).ToArray(); + return $"{version[0]}.{version[2]}.{version[4]}.{version[6]}{version[7]}"; } } } diff --git a/BurnOutSharp/ProtectionType/KeyLock.cs b/BurnOutSharp/ProtectionType/KeyLock.cs index 802db143..ddaba068 100644 --- a/BurnOutSharp/ProtectionType/KeyLock.cs +++ b/BurnOutSharp/ProtectionType/KeyLock.cs @@ -2,10 +2,12 @@ { public class KeyLock { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("KEY-LOCK COMMAND")) - return "Key-Lock (Dongle)"; + // "KEY-LOCK COMMAND" + byte[] check = new byte[] { 0x4B, 0x45, 0x59, 0x2D, 0x4C, 0x4F, 0x43, 0x4B, 0x20, 0x43, 0x4F, 0x4D, 0x4D, 0x41, 0x4E, 0x44 }; + if (fileContent.Contains(check, out int position)) + return $"Key-Lock (Dongle) (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/LaserLock.cs b/BurnOutSharp/ProtectionType/LaserLock.cs index 2a3d2ba8..860ee6de 100644 --- a/BurnOutSharp/ProtectionType/LaserLock.cs +++ b/BurnOutSharp/ProtectionType/LaserLock.cs @@ -7,38 +7,35 @@ namespace BurnOutSharp.ProtectionType { public class LaserLock { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if (fileContent.Contains("Packed by SPEEnc V2 Asterios Parlamentas.PE") - && (position = fileContent.IndexOf("GetModuleHandleA" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 - + "GetProcAddress" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "LoadLibraryA" + (char)0x00 + (char)0x00 - + "KERNEL32.dll" + (char)0x00 + "ëy" + (char)0x01 + "SNIF")) > -1) - { - return "LaserLock " + GetVersion(fileContent, position) + " " + GetBuild(fileContent, true); - } + // "Packed by SPEEnc V2 Asterios Parlamentas.PE" + byte[] check = new byte[] { 0x50, 0x61, 0x63, 0x6B, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x53, 0x50, 0x45, 0x45, 0x6E, 0x63, 0x20, 0x56, 0x32, 0x20, 0x41, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6F, 0x73, 0x20, 0x50, 0x61, 0x72, 0x6C, 0x61, 0x6D, 0x65, 0x6E, 0x74, 0x61, 0x73, 0x2E, 0x50, 0x45 }; + bool containsCheck = fileContent.Contains(check, out int position); - if (fileContent.Contains("Packed by SPEEnc V2 Asterios Parlamentas.PE")) - return "LaserLock Marathon " + GetBuild(fileContent, false); + // "GetModuleHandleA" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "GetProcAddress" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "LoadLibraryA" + (char)0x00 + (char)0x00 + "KERNEL32.dll" + (char)0x00 + "ëy" + (char)0x01 + "SNIF" + byte[] check2 = { 0x47, 0x65, 0x74, 0x4D, 0x6F, 0x64, 0x75, 0x6C, 0x65, 0x48, 0x61, 0x6E, 0x64, 0x6C, 0x65, 0x41, 0x00, 0x00, 0x00, 0x00, 0x47, 0x65, 0x74, 0x50, 0x72, 0x6F, 0x63, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x00, 0x00, 0x00, 0x00, 0x4C, 0x6F, 0x61, 0x64, 0x4C, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79, 0x41, 0x00, 0x00, 0x4B, 0x45, 0x52, 0x4E, 0x45, 0x4C, 0x33, 0x32, 0x2E, 0x64, 0x6C, 0x6C, 0x00, 0xEB, 0x79, 0x01, 0x53, 0x4E, 0x49, 0x46 }; + bool containsCheck2 = fileContent.Contains(check2, out int position2); - if ((position = fileContent.IndexOf("GetModuleHandleA" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 - + "GetProcAddress" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "LoadLibraryA" + (char)0x00 + (char)0x00 - + "KERNEL32.dll" + (char)0x00 + "ëy" + (char)0x01 + "SNIF")) > -1) - { - return "LaserLock " + GetVersion(fileContent, --position) + " " + GetBuild(fileContent, false); - } + if (containsCheck && containsCheck2) + return $"LaserLock {GetVersion(fileContent, position2)} {GetBuild(fileContent, true)} (Index {position}, {position2})"; + else if (containsCheck && !containsCheck2) + return $"LaserLock Marathon {GetBuild(fileContent, false)} (Index {position})"; + else if (!containsCheck && containsCheck2) + return $"LaserLock {GetVersion(fileContent, --position2)} {GetBuild(fileContent, false)} (Index {position2})"; - if (file != null && Path.GetFileName(file) == "NOMOUSE.SP") - return "LaserLock " + GetVersion16Bit(file); + if (file != null && string.Equals(Path.GetFileName(file), "NOMOUSE.SP", StringComparison.OrdinalIgnoreCase)) + return $"LaserLock {GetVersion16Bit(fileContent)} (Index 71)"; - if (fileContent.Contains(":\\LASERLOK\\LASERLOK.IN" + (char)0x00 + "C:\\NOMOUSE.SP")) - return "LaserLock 3"; + // ":\\LASERLOK\\LASERLOK.IN" + (char)0x00 + "C:\\NOMOUSE.SP" + check = new byte[] { 0x3A, 0x5C, 0x5C, 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x5C, 0x5C, 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x2E, 0x49, 0x4E, 0x00, 0x43, 0x3A, 0x5C, 0x5C, 0x4E, 0x4F, 0x4D, 0x4F, 0x55, 0x53, 0x45, 0x2E, 0x53, 0x50 }; + if (fileContent.Contains(check, out position)) + return $"LaserLock 3 (Index {position})"; - if (fileContent.Contains("LASERLOK_INIT" + (char)0xC + "LASERLOK_RUN" + (char)0xE + "LASERLOK_CHECK" - + (char)0xF + "LASERLOK_CHECK2" + (char)0xF + "LASERLOK_CHECK3")) - { - return "LaserLock 5"; - } + // "LASERLOK_INIT" + (char)0xC + "LASERLOK_RUN" + (char)0xE + "LASERLOK_CHECK" + (char)0xF + "LASERLOK_CHECK2" + (char)0xF + "LASERLOK_CHECK3" + check = new byte[] { 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x5F, 0x49, 0x4E, 0x49, 0x54, 0x0C, 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x5F, 0x52, 0x55, 0x4E, 0x0E, 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x5F, 0x43, 0x48, 0x45, 0x43, 0x4B, 0x0F, 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x5F, 0x43, 0x48, 0x45, 0x43, 0x4B, 0x32, 0x0F, 0x4C, 0x41, 0x53, 0x45, 0x52, 0x4C, 0x4F, 0x4B, 0x5F, 0x43, 0x48, 0x45, 0x43, 0x4B, 0x33 }; + if (fileContent.Contains(check, out position)) + return $"LaserLock 5 (Index {position})"; return null; } @@ -65,6 +62,9 @@ namespace BurnOutSharp.ProtectionType } else { + if (path != null && string.Equals(Path.GetFileName(path), "NOMOUSE.SP", StringComparison.OrdinalIgnoreCase)) + return $"LaserLock {GetVersion16Bit(path)}"; + if (Path.GetFileName(path).Equals("NOMOUSE.SP", StringComparison.OrdinalIgnoreCase) || Path.GetFileName(path).Equals("NOMOUSE.COM", StringComparison.OrdinalIgnoreCase) || Path.GetFileName(path).Equals("l16dll.dll", StringComparison.OrdinalIgnoreCase) @@ -79,30 +79,37 @@ namespace BurnOutSharp.ProtectionType return null; } - private static string GetBuild(string fileContent, bool versionTwo) + private static string GetBuild(byte[] fileContent, bool versionTwo) { - // TODO: Is this supposed to be "Unknown"? - int position = fileContent.IndexOf("Unkown" + (char)0 + "Unkown"); + // "Unkown" + (char)0x00 + "Unkown" // TODO: Is this supposed to be "Unknown"? + byte[] check = new byte[] { 0x55, 0x6E, 0x6B, 0x6F, 0x77, 0x6E, 0x00, 0x55, 0x6E, 0x6B, 0x6F, 0x77, 0x6E }; + fileContent.Contains(check, out int position); string year, month, day; if (versionTwo) { - day = fileContent.Substring(position + 14, 2); - month = fileContent.Substring(position + 14 + 3, 2); - year = "20" + fileContent.Substring(position + 14 + 6, 2); + int index = position + 14; + day = new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); + index += 3; + month = new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); + index += 3; + year = "20" + new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); } else { - day = fileContent.Substring(position + 13, 2); - month = fileContent.Substring(position + 13 + 3, 2); - year = "20" + fileContent.Substring(position + 13 + 6, 2); + int index = position + 13; + day = new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); + index += 3; + month = new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); + index += 3; + year = "20" + new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); } - return "(Build " + year + "-" + month + "-" + day + ")"; + return $"(Build {year}-{month}-{day})"; } - private static string GetVersion(string FileContent, int position) + private static string GetVersion(byte[] fileContent, int position) { - return FileContent.Substring(position + 76, 4); + return new string(new ArraySegment(fileContent, position + 76, 4).Select(b => (char)b).ToArray()); } private static string GetVersion16Bit(string file) @@ -110,18 +117,17 @@ namespace BurnOutSharp.ProtectionType using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) using (var br = new BinaryReader(fs)) { - char[] version = new char[3]; - br.BaseStream.Seek(71, SeekOrigin.Begin); - version[0] = br.ReadChar(); - br.ReadByte(); - version[1] = br.ReadChar(); - version[2] = br.ReadChar(); - - if (char.IsNumber(version[0]) && char.IsNumber(version[1]) && char.IsNumber(version[2])) - return version[0] + "." + version[1] + version[2]; - - return ""; + return GetVersion16Bit(br.ReadBytes((int)fs.Length)); } } + + private static string GetVersion16Bit(byte[] fileContent) + { + char[] version = new ArraySegment(fileContent, 71, 4).Select(b => (char)b).ToArray(); + if (char.IsNumber(version[0]) && char.IsNumber(version[2]) && char.IsNumber(version[3])) + return $"{version[0]}.{version[2]}{version[3]}"; + + return ""; + } } } diff --git a/BurnOutSharp/ProtectionType/PECompact.cs b/BurnOutSharp/ProtectionType/PECompact.cs index a38d2af5..427e6356 100644 --- a/BurnOutSharp/ProtectionType/PECompact.cs +++ b/BurnOutSharp/ProtectionType/PECompact.cs @@ -2,10 +2,12 @@ { public class PECompact { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("PEC2")) - return "PE Compact 2"; + // "PEC2" + byte[] check = new byte[] { 0x50, 0x45, 0x43, 0x32 }; + if (fileContent.Contains(check, out int position)) + return $"PE Compact 2 (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/PSXAntiModchip.cs b/BurnOutSharp/ProtectionType/PSXAntiModchip.cs index ad240724..82e7190c 100644 --- a/BurnOutSharp/ProtectionType/PSXAntiModchip.cs +++ b/BurnOutSharp/ProtectionType/PSXAntiModchip.cs @@ -3,14 +3,18 @@ public class PSXAntiModchip { // TODO: Figure out PSX binary header so this can be checked explicitly - public static string CheckContents(string file, string fileContent) + // TODO: Detect Red Hand protection + public static string CheckContents(byte[] fileContent) { - // TODO: Detect Red Hand protection - if (fileContent.Contains(" SOFTWARE TERMINATED\nCONSOLE MAY HAVE BEEN MODIFIED\n CALL 1-888-780-7690")) - return "PlayStation Anti-modchip (English)"; + // " SOFTWARE TERMINATED\nCONSOLE MAY HAVE BEEN MODIFIED\n CALL 1-888-780-7690" + byte[] check = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x53, 0x4F, 0x46, 0x54, 0x57, 0x41, 0x52, 0x45, 0x20, 0x54, 0x45, 0x52, 0x4D, 0x49, 0x4E, 0x41, 0x54, 0x45, 0x44, 0x5C, 0x6E, 0x43, 0x4F, 0x4E, 0x53, 0x4F, 0x4C, 0x45, 0x20, 0x4D, 0x41, 0x59, 0x20, 0x48, 0x41, 0x56, 0x45, 0x20, 0x42, 0x45, 0x45, 0x4E, 0x20, 0x4D, 0x4F, 0x44, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5C, 0x6E, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x41, 0x4C, 0x4C, 0x20, 0x31, 0x2D, 0x38, 0x38, 0x38, 0x2D, 0x37, 0x38, 0x30, 0x2D, 0x37, 0x36, 0x39, 0x30 }; + if (fileContent.Contains(check, out int position)) + return $"PlayStation Anti-modchip (English) (Index {position})"; - if (fileContent.Contains("強制終了しました。\n本体が改造されている\nおそれがあります。")) - return "PlayStation Anti-modchip (Japanese)"; + // "強制終了しました。\n本体が改造されている\nおそれがあります。" + check = new byte[] { 0x5F, 0x37, 0x52, 0x36, 0x7D, 0x42, 0x4E, 0x86, 0x30, 0x57, 0x30, 0x7E, 0x30, 0x57, 0x30, 0x5F, 0x30, 0x02, 0x5C, 0x6E, 0x67, 0x2C, 0x4F, 0x53, 0x30, 0x4C, 0x65, 0x39, 0x90, 0x20, 0x30, 0x55, 0x30, 0x8C, 0x30, 0x66, 0x30, 0x44, 0x30, 0x8B, 0x5C, 0x6E, 0x30, 0x4A, 0x30, 0x5D, 0x30, 0x8C, 0x30, 0x4C, 0x30, 0x42, 0x30, 0x8A, 0x30, 0x7E, 0x30, 0x59, 0x30, 0x02 }; + if (fileContent.Contains(check, out position)) + return $"PlayStation Anti-modchip (Japanese) (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/ProtectDisc.cs b/BurnOutSharp/ProtectionType/ProtectDisc.cs index 552363fd..f820493c 100644 --- a/BurnOutSharp/ProtectionType/ProtectDisc.cs +++ b/BurnOutSharp/ProtectionType/ProtectDisc.cs @@ -1,164 +1,172 @@ using System; -using System.IO; +using System.Linq; namespace BurnOutSharp.ProtectionType { public class ProtectDisc { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("HúMETINF")) > -1) + // "HúMETINF" + byte[] check = new byte[] { 0x48, 0xFA, 0x4D, 0x45, 0x54, 0x49, 0x4E, 0x46 }; + if (fileContent.Contains(check, out int position)) { - string version = EVORE.SearchProtectDiscVersion(file); + string version = EVORE.SearchProtectDiscVersion(file, fileContent); if (version.Length > 0) { string[] astrVersionArray = version.Split('.'); if (astrVersionArray[0] == "9") { - if (GetVersionBuild76till10(file, position, out int ibuild).Length > 0) - return "ProtectDisc " + astrVersionArray[0] + "." + astrVersionArray[1] + astrVersionArray[2] + "." + astrVersionArray[3] + " (Build " + ibuild + ")"; + if (GetVersionBuild76till10(fileContent, position, out int ibuild).Length > 0) + return $"ProtectDisc {astrVersionArray[0]}.{astrVersionArray[1]}{astrVersionArray[2]}.{astrVersionArray[3]} (Build {ibuild}) (Index {position})"; } else - return "ProtectDisc " + astrVersionArray[0] + "." + astrVersionArray[1] + "." + astrVersionArray[2] + " (Build " + astrVersionArray[3] + ")"; + { + return $"ProtectDisc {astrVersionArray[0]}.{astrVersionArray[1]}.{astrVersionArray[2]} (Build {astrVersionArray[3]}) (Index {position})"; + } } } - if ((position = fileContent.IndexOf("ACE-PCD")) > -1) + // "ACE-PCD" + check = new byte[] { 0x41, 0x43, 0x45, 0x2D, 0x50, 0x43, 0x44 }; + if (fileContent.Contains(check, out position)) { - string version = EVORE.SearchProtectDiscVersion(file); + string version = EVORE.SearchProtectDiscVersion(file, fileContent); if (version.Length > 0) { string[] astrVersionArray = version.Split('.'); - return "ProtectDisc " + astrVersionArray[0] + "." + astrVersionArray[1] + "." + astrVersionArray[2] + " (Build " + astrVersionArray[3] + ")"; + return $"ProtectDisc {astrVersionArray[0]}.{astrVersionArray[1]}.{astrVersionArray[2]} (Build {astrVersionArray[3]}) (Index {position})"; } - return "ProtectDisc " + GetVersionBuild6till8(file, position); + return $"ProtectDisc {GetVersionBuild6till8(fileContent, position)} (Index {position})"; } return null; } - private static string GetVersionBuild6till8(string file, int position) + private static string GetVersionBuild6till8(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + string version; + string strBuild; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) + int index = position - 12; + if (new ArraySegment(fileContent, index, 4).SequenceEqual(new byte[] { 0x0A, 0x0D, 0x0A, 0x0D })) // ProtectDisc 6-7 with Build Number in plain text { - string version; - string strBuild; + index = position - 12 - 6; - br.BaseStream.Seek(position - 12, SeekOrigin.Begin); - if (br.ReadByte() == 0xA && br.ReadByte() == 0xD && br.ReadByte() == 0xA && br.ReadByte() == 0xD) // ProtectDisc 6-7 with Build Number in plain text + // ProtectDisc 7 + if (new string(new ArraySegment(fileContent, index, 6).Select(b => (char)b).ToArray()) == "Henrik") { - br.BaseStream.Seek(position - 12 - 6, SeekOrigin.Begin); - if (new string(br.ReadChars(6)) == "Henrik") // ProtectDisc 7 - { - version = "7.1-7.5"; - br.BaseStream.Seek(position - 12 - 6 - 6, SeekOrigin.Begin); - } - else // ProtectDisc 6 - { - version = "6"; - br.BaseStream.Seek(position - 12 - 10, SeekOrigin.Begin); - while (true) //search for e.g. "Build 050913 - September 2005" - { - if (Char.IsNumber(br.ReadChar())) - break; - br.BaseStream.Seek(-2, SeekOrigin.Current); //search upwards - } - - br.BaseStream.Seek(-5, SeekOrigin.Current); - } + version = "7.1-7.5"; + index = position - 12 - 6 - 6; } + + // ProtectDisc 6 else { - br.BaseStream.Seek(position + 28, SeekOrigin.Begin); - if (br.ReadByte() == 0xFB) + version = "6"; + index = position - 12 - 10; + while (true) //search for e.g. "Build 050913 - September 2005" { - return "7.6-7.x"; - } - else - { - return "8.0"; + if (Char.IsNumber((char)fileContent[index])) + break; + + index -= 1; //search upwards } + + index -= 5; } - strBuild = "" + br.ReadChar() + br.ReadChar() + br.ReadChar() + br.ReadChar() + br.ReadChar(); - return version + " (Build " + strBuild + ")"; } + else + { + index = position + 28; + if (fileContent[index] == 0xFB) + return "7.6-7.x"; + else + return "8.0"; + } + + strBuild = new string(new ArraySegment(fileContent, index, 5).Select(b => (char)b).ToArray()); + return $"{version} (Build {strBuild})"; } - private static string GetVersionBuild76till10(string file, int position, out int irefBuild) + private static string GetVersionBuild76till10(byte[] fileContent, int position, out int irefBuild) { - irefBuild = 0; - if (file == null || !File.Exists(file)) - return string.Empty; + int index = position + 37; + byte subversion = fileContent[index]; + index++; + index++; + byte version = fileContent[index]; + index = position + 49; + irefBuild = BitConverter.ToInt32(fileContent, index); + index = position + 53; + byte versionindicatorPD9 = fileContent[index]; + index = position + 0x40; + byte subsubversionPD9x = fileContent[index]; + index++; + byte subversionPD9x2 = fileContent[index]; + index++; + byte subversionPD9x1 = fileContent[index]; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) + // version 7 + if (version == 0xAC) + return $"7.{subversion ^ 0x43} (Build {irefBuild})"; + + // version 8 + else if (version == 0xA2) { - br.BaseStream.Seek(position + 37, SeekOrigin.Begin); - byte subversion = br.ReadByte(); - br.ReadByte(); - byte version = br.ReadByte(); - br.BaseStream.Seek(position + 49, SeekOrigin.Begin); - irefBuild = br.ReadInt32(); - br.BaseStream.Seek(position + 53, SeekOrigin.Begin); - byte versionindicatorPD9 = br.ReadByte(); - br.BaseStream.Seek(position + 0x40, SeekOrigin.Begin); - byte subsubversionPD9x = br.ReadByte(); - byte subversionPD9x2 = br.ReadByte(); - byte subversionPD9x1 = br.ReadByte(); - - // version 7 - if (version == 0xAC) - return "7." + (subversion ^ 0x43) + " (Build " + irefBuild + ")"; - // version 8 - else if (version == 0xA2) + if (subversion == 0x46) { - if (subversion == 0x46) - { - if ((irefBuild & 0x3A00) == 0x3A00) - return "8.2" + " (Build " + irefBuild + ")"; - else - return "8.1" + " (Build " + irefBuild + ")"; - } - return "8." + (subversion ^ 0x47) + " (Build " + irefBuild + ")"; - } - // version 9 - else if (version == 0xA3) - { - // version removed or not given - if ((subversionPD9x2 == 0x5F && subversionPD9x1 == 0x61) || (subversionPD9x1 == 0 && subversionPD9x2 == 0)) - { - if (versionindicatorPD9 == 0xB) - return "9.0-9.4" + " (Build " + irefBuild + ")"; - else if (versionindicatorPD9 == 0xC) - { - if (subversionPD9x2 == 0x5F && subversionPD9x1 == 0x61) - return "9.5-9.11" + " (Build " + irefBuild + ")"; - else if (subversionPD9x1 == 0 && subversionPD9x2 == 0) - return "9.11-9.20" + " (Build " + irefBuild + ")"; - } - else - return "9." + subversionPD9x1 + subversionPD9x2 + "." + subsubversionPD9x + " (Build " + irefBuild + ")"; - } - } - else if (version == 0xA0) - { - // version removed - if (subversionPD9x1 != 0 || subversionPD9x2 != 0) - return "10." + subversionPD9x1 + "." + subsubversionPD9x + " (Build " + irefBuild + ")"; + if ((irefBuild & 0x3A00) == 0x3A00) + return $"8.2 (Build {irefBuild})"; else - return "10.x (Build " + irefBuild + ")"; + return $"8.1 (Build {irefBuild})"; } - else - return "7.6-10.x (Build " + irefBuild + ")"; - return ""; + return $"8.{subversion ^ 0x47} (Build {irefBuild})"; } + + // version 9 + else if (version == 0xA3) + { + // version removed or not given + if ((subversionPD9x2 == 0x5F && subversionPD9x1 == 0x61) || (subversionPD9x1 == 0 && subversionPD9x2 == 0)) + { + if (versionindicatorPD9 == 0xB) + { + return $"9.0-9.4 (Build {irefBuild})"; + } + else if (versionindicatorPD9 == 0xC) + { + if (subversionPD9x2 == 0x5F && subversionPD9x1 == 0x61) + return $"9.5-9.11 (Build {irefBuild})"; + else if (subversionPD9x1 == 0 && subversionPD9x2 == 0) + return $"9.11-9.20 (Build {irefBuild})"; + } + else + { + return $"9.{subversionPD9x1}{subversionPD9x2}.{subsubversionPD9x} (Build {irefBuild})"; + } + } + } + + // version 10 + else if (version == 0xA0) + { + // version removed + if (subversionPD9x1 != 0 || subversionPD9x2 != 0) + return $"10.{subversionPD9x1}.{subsubversionPD9x} (Build {irefBuild})"; + else + return $"10.x (Build {irefBuild})"; + } + + // unknown version + else + { + return $"7.6-10.x (Build {irefBuild})"; + } + + return ""; } } } diff --git a/BurnOutSharp/ProtectionType/RingPROTECH.cs b/BurnOutSharp/ProtectionType/RingPROTECH.cs index ffa50b12..bb94aea4 100644 --- a/BurnOutSharp/ProtectionType/RingPROTECH.cs +++ b/BurnOutSharp/ProtectionType/RingPROTECH.cs @@ -2,10 +2,12 @@ { public class RingPROTECH { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains((char)0x00 + "Allocator" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00)) - return "Ring PROTECH"; + // (char)0x00 + "Allocator" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + byte[] check = new byte[] { 0x00, 0x41, 0x6C, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x6F, 0x72, 0x00, 0x00, 0x00, 0x00 }; + if (fileContent.Contains(check, out int position)) + return $"Ring PROTECH (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/SVKProtector.cs b/BurnOutSharp/ProtectionType/SVKProtector.cs index 0dbb00c8..3d14a1e0 100644 --- a/BurnOutSharp/ProtectionType/SVKProtector.cs +++ b/BurnOutSharp/ProtectionType/SVKProtector.cs @@ -2,10 +2,12 @@ { public class SVKProtector { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("?SVKP" + (char)0x00 + (char)0x00)) - return "SVK Protector"; + // "?SVKP" + (char)0x00 + (char)0x00 + byte[] check = new byte[] { 0x3F, 0x53, 0x56, 0x4B, 0x50, 0x00, 0x00 }; + if (fileContent.Contains(check, out int position)) + return $"SVK Protector (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/SafeDisc.cs b/BurnOutSharp/ProtectionType/SafeDisc.cs index d62dd015..79b58670 100644 --- a/BurnOutSharp/ProtectionType/SafeDisc.cs +++ b/BurnOutSharp/ProtectionType/SafeDisc.cs @@ -7,26 +7,51 @@ namespace BurnOutSharp.ProtectionType { public class SafeDisc { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("BoG_ *90.0&!! Yy>")) > -1) + // "BoG_ *90.0&!! Yy>" + byte[] check = new byte[] { 0x42, 0x6F, 0x47, 0x5F, 0x20, 0x2A, 0x39, 0x30, 0x2E, 0x30, 0x26, 0x21, 0x21, 0x20, 0x20, 0x59, 0x79, 0x3E }; + if (fileContent.Contains(check, out int position)) { - if (fileContent.IndexOf("product activation library") > 0) - return "SafeCast " + GetVersion(file, position); + // "product activation library" + byte[] check2 = new byte[] { 0x70, 0x72, 0x6F, 0x64, 0x75, 0x63, 0x74, 0x20, 0x61, 0x63, 0x74, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x6C, 0x69, 0x62, 0x72, 0x61, 0x72, 0x79 }; + if (fileContent.Contains(check2, out int position2)) + return $"SafeCast {GetVersion(fileContent, position)} (Index {position}, {position2})"; else - return "SafeDisc " + GetVersion(file, position); + return $"SafeDisc {GetVersion(fileContent, position)} (Index {position})"; } - if (fileContent.Contains((char)0x00 + (char)0x00 + "BoG_") - || fileContent.Contains("stxt774") - || fileContent.Contains("stxt371")) + // (char)0x00 + (char)0x00 + "BoG_" + check = new byte[] { 0x00, 0x00, 0x42, 0x6F, 0x47, 0x5F }; + if (fileContent.Contains(check, out position)) { - string version = EVORE.SearchSafeDiscVersion(file); + string version = EVORE.SearchSafeDiscVersion(file, fileContent); if (version.Length > 0) - return "SafeDisc " + version; + return $"SafeDisc {version} (Index {position})"; - return "SafeDisc 3.20-4.xx (version removed)"; + return $"SafeDisc 3.20-4.xx (version removed) (Index {position})"; + } + + // "stxt774" + check = new byte[] { 0x73, 0x74, 0x78, 0x74, 0x37, 0x37, 0x34 }; + if (fileContent.Contains(check, out position)) + { + string version = EVORE.SearchSafeDiscVersion(file, fileContent); + if (version.Length > 0) + return $"SafeDisc {version} (Index {position})"; + + return $"SafeDisc 3.20-4.xx (version removed) (Index {position})"; + } + + // "stxt371" + check = new byte[] { 0x73, 0x74, 0x78, 0x74, 0x33, 0x37, 0x31 }; + if (fileContent.Contains(check, out position)) + { + string version = EVORE.SearchSafeDiscVersion(file, fileContent); + if (version.Length > 0) + return $"SafeDisc {version} (Index {position})"; + + return $"SafeDisc 3.20-4.xx (version removed) (Index {position})"; } return null; @@ -192,32 +217,29 @@ namespace BurnOutSharp.ProtectionType return "SafeDisc 2 or greater"; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + int index = position + 20; // Begin reading after "BoG_ *90.0&!! Yy>" for old SafeDisc + int version = BitConverter.ToInt32(fileContent, index); + index += 4; + int subVersion = BitConverter.ToInt32(fileContent, index); + index += 4; + int subsubVersion = BitConverter.ToInt32(fileContent, index); - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position + 20, SeekOrigin.Begin); // Begin reading after "BoG_ *90.0&!! Yy>" for old SafeDisc - int version = br.ReadInt32(); - int subVersion = br.ReadInt32(); - int subsubVersion = br.ReadInt32(); + if (version != 0) + return $"{version}.{subVersion:00}.{subsubVersion:000}"; - if (version != 0) - return version + "." + subVersion.ToString("00") + "." + subsubVersion.ToString("000"); + index = position + 18 + 14; // Begin reading after "BoG_ *90.0&!! Yy>" for newer SafeDisc + version = BitConverter.ToInt32(fileContent, index); + index += 4; + subVersion = BitConverter.ToInt32(fileContent, index); + index += 4; + subsubVersion = BitConverter.ToInt32(fileContent, index); - br.BaseStream.Seek(position + 18 + 14, SeekOrigin.Begin); // Begin reading after "BoG_ *90.0&!! Yy>" for newer SafeDisc - version = br.ReadInt32(); - subVersion = br.ReadInt32(); - subsubVersion = br.ReadInt32(); + if (version == 0) + return ""; - if (version == 0) - return ""; - - return version + "." + subVersion.ToString("00") + "." + subsubVersion.ToString("000"); - } + return $"{version}.{subVersion:00}.{subsubVersion:000}"; } } } diff --git a/BurnOutSharp/ProtectionType/SafeLock.cs b/BurnOutSharp/ProtectionType/SafeLock.cs index 39d2c04e..71b344e7 100644 --- a/BurnOutSharp/ProtectionType/SafeLock.cs +++ b/BurnOutSharp/ProtectionType/SafeLock.cs @@ -7,10 +7,12 @@ namespace BurnOutSharp.ProtectionType { public class SafeLock { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("SafeLock")) - return "SafeLock"; + // "SafeLock" + byte[] check = new byte[] { 0x53, 0x61, 0x66, 0x65, 0x4C, 0x6F, 0x63, 0x6B }; + if (fileContent.Contains(check, out int position)) + return $"SafeLock (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/SecuROM.cs b/BurnOutSharp/ProtectionType/SecuROM.cs index 98bce334..f9a4dac9 100644 --- a/BurnOutSharp/ProtectionType/SecuROM.cs +++ b/BurnOutSharp/ProtectionType/SecuROM.cs @@ -7,32 +7,42 @@ namespace BurnOutSharp.ProtectionType { public class SecuROM { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("AddD" + (char)0x03 + (char)0x00 + (char)0x00 + (char)0x00)) > -1) - return "SecuROM " + GetV4Version(file, position); + // "AddD" + (char)0x03 + (char)0x00 + (char)0x00 + (char)0x00) + byte[] check = new byte[] { 0x41, 0x64, 0x64, 0x44, 0x03, 0x00, 0x00, 0x00 }; + if (fileContent.Contains(check, out int position)) + return $"SecuROM {GetV4Version(fileContent, position)} (Index {position})"; - if ((position = fileContent.IndexOf("" + (char)0xCA + (char)0xDD + (char)0xDD + (char)0xAC + (char)0x03)) > -1) - return "SecuROM " + GetV5Version(file, position); + // (char)0xCA + (char)0xDD + (char)0xDD + (char)0xAC + (char)0x03 + check = new byte[] { 0xCA, 0xDD, 0xDD, 0xAC, 0x03 }; + if (fileContent.Contains(check, out position)) + return $"SecuROM {GetV5Version(fileContent, position)} (Index {position})"; - if (fileContent.Contains(".securom") - || fileContent.StartsWith(".securom" + (char)0xE0 + (char)0xC0)) - { - return "SecuROM " + GetV7Version(file); - } + // ".securom" + (char)0xE0 + (char)0xC0 + check = new byte[] { 0x2E, 0x73, 0x65, 0x63, 0x75, 0x72, 0x6F, 0x6D, 0xE0, 0xC0 }; + if (fileContent.Contains(check, out position) && position == 0) + return $"SecuROM {GetV7Version(fileContent)} (Index {position})"; - if (fileContent.Contains("_and_play.dll" + (char)0x00 + "drm_pagui_doit")) - return "SecuROM Product Activation " + Utilities.GetFileVersion(file); + // ".securom" + check = new byte[] { 0x2E, 0x73, 0x65, 0x63, 0x75, 0x72, 0x6F, 0x6D }; + if (fileContent.Contains(check, out position)) + return $"SecuROM {GetV7Version(fileContent)} (Index {position})"; - if (fileContent.Contains("_and_play.dll" + (char)0x00 + "drm_pagui_doit")) - return "SecuROM Product Activation " + Utilities.GetFileVersion(file); + // "_and_play.dll" + (char)0x00 + "drm_pagui_doit" + check = new byte[] { 0x5F, 0x61, 0x6E, 0x64, 0x5F, 0x70, 0x6C, 0x61, 0x79, 0x2E, 0x64, 0x6C, 0x6C, 0x00, 0x64, 0x72, 0x6D, 0x5F, 0x70, 0x61, 0x67, 0x75, 0x69, 0x5F, 0x64, 0x6F, 0x69, 0x74 }; + if (fileContent.Contains(check, out position)) + return $"SecuROM Product Activation {Utilities.GetFileVersion(file)} (Index {position})"; - if (fileContent.Contains(".cms_t" + (char)0x00) - || fileContent.Contains(".cms_d" + (char)0x00)) - { - return "SecuROM 1-3"; - } + // ".cms_t" + (char)0x00 + check = new byte[] { 0x2E, 0x63, 0x6D, 0x73, 0x5F, 0x74, 0x00 }; + if (fileContent.Contains(check, out position)) + return $"SecuROM 1-3 (Index {position})"; + + // ".cms_d" + (char)0x00 + check = new byte[] { 0x2E, 0x63, 0x6D, 0x73, 0x5F, 0x64, 0x00 }; + if (fileContent.Contains(check, out position)) + return $"SecuROM 1-3 (Index {position})"; return null; } @@ -78,84 +88,76 @@ namespace BurnOutSharp.ProtectionType return null; } - private static string GetV4Version(string file, int position) + private static string GetV4Version(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + int index = position + 8; // Begin reading after "AddD" + char version = (char)fileContent[index]; + index += 2; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position + 8, SeekOrigin.Begin); // Begin reading after "AddD" - char version = br.ReadChar(); - br.ReadByte(); - char subVersion1 = br.ReadChar(); - char subVersion2 = br.ReadChar(); - br.ReadByte(); - char subsubVersion1 = br.ReadChar(); - char subsubVersion2 = br.ReadChar(); - br.ReadByte(); - char subsubsubVersion1 = br.ReadChar(); - char subsubsubVersion2 = br.ReadChar(); - char subsubsubVersion3 = br.ReadChar(); - char subsubsubVersion4 = br.ReadChar(); + string subVersion = new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); + index += 3; - return version + "." + subVersion1 + subVersion2 + "." + subsubVersion1 + subsubVersion2 + "." + subsubsubVersion1 + subsubsubVersion2 + subsubsubVersion3 + subsubsubVersion4; - } + string subSubVersion = new string(new ArraySegment(fileContent, index, 2).Select(b => (char)b).ToArray()); + index += 3; + + string subSubSubVersion = new string(new ArraySegment(fileContent, index, 4).Select(b => (char)b).ToArray()); + + if (!char.IsNumber(version)) + return "(very old, v3 or less)"; + + return $"{version}.{subVersion}.{subSubVersion}.{subSubSubVersion}"; } - private static string GetV5Version(string file, int position) + private static string GetV5Version(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + int index = position + 8; // Begin reading after "ÊÝݬ" + byte version = (byte)(fileContent[index] & 0x0F); + index += 2; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position + 8, SeekOrigin.Begin); // Begin reading after "ÊÝݬ" - byte version = (byte)(br.ReadByte() & 0xF); - br.ReadByte(); - byte subVersion1 = (byte)(br.ReadByte() ^ 36); - byte subVersion2 = (byte)(br.ReadByte() ^ 28); - br.ReadByte(); - byte subsubVersion1 = (byte)(br.ReadByte() ^ 42); - byte subsubVersion2 = (byte)(br.ReadByte() ^ 8); - br.ReadByte(); - byte subsubsubVersion1 = (byte)(br.ReadByte() ^ 16); - byte subsubsubVersion2 = (byte)(br.ReadByte() ^ 116); - byte subsubsubVersion3 = (byte)(br.ReadByte() ^ 34); - byte subsubsubVersion4 = (byte)(br.ReadByte() ^ 22); + byte[] subVersion = new byte[2]; + subVersion[0] = (byte)(fileContent[index] ^ 36); + index++; + subVersion[1] = (byte)(fileContent[index] ^ 28); + index += 2; - if (version == 0 || version > 9) - return ""; + byte[] subSubVersion = new byte[2]; + subSubVersion[0] = (byte)(fileContent[index] ^ 42); + index++; + subSubVersion[0] = (byte)(fileContent[index] ^ 8); + index += 2; - return version + "." + subVersion1 + subVersion2 + "." + subsubVersion1 + subsubVersion2 + "." + subsubsubVersion1 + subsubsubVersion2 + subsubsubVersion3 + subsubsubVersion4; - } + byte[] subSubSubVersion = new byte[4]; + subSubSubVersion[0] = (byte)(fileContent[index] ^ 16); + index++; + subSubSubVersion[1] = (byte)(fileContent[index] ^ 116); + index++; + subSubSubVersion[2] = (byte)(fileContent[index] ^ 34); + index++; + subSubSubVersion[3] = (byte)(fileContent[index] ^ 22); + + if (version == 0 || version > 9) + return ""; + + return $"{version}.{subVersion[0]}{subVersion[1]}.{subSubVersion[0]}{subSubVersion[1]}.{subSubSubVersion[0]}{subSubSubVersion[1]}{subSubSubVersion[2]}{subSubSubVersion[3]}"; } - private static string GetV7Version(string file) + private static string GetV7Version(byte[] fileContent) { - if (file == null || !File.Exists(file)) - return string.Empty; - - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) + int index = 236; + byte[] bytes = new ArraySegment(fileContent, index, 4).ToArray(); + + //SecuROM 7 new and 8 + if (bytes[3] == 0x5C) // if (bytes[0] == 0xED && bytes[3] == 0x5C { { - br.BaseStream.Seek(236, SeekOrigin.Begin); - byte[] bytes = br.ReadBytes(4); - // if (bytes[0] == 0xED && bytes[3] == 0x5C { - if (bytes[3] == 0x5C) - { - //SecuROM 7 new and 8 - return (bytes[0] ^ 0xEA).ToString() + "." + (bytes[1] ^ 0x2C).ToString("00") + "." + (bytes[2] ^ 0x8).ToString("0000"); - } - else // SecuROM 7 old - { - br.BaseStream.Seek(122, SeekOrigin.Begin); - bytes = br.ReadBytes(2); - return "7." + (bytes[0] ^ 0x10).ToString("00") + "." + (bytes[1] ^ 0x10).ToString("0000"); - //return "7.01-7.10" - } + return $"{bytes[0] ^ 0xEA}.{bytes[1] ^ 0x2C:00}.{bytes[2] ^ 0x8:0000}"; + } + + // SecuROM 7 old + else + { + index = 122; + bytes = new ArraySegment(fileContent, index, 2).ToArray(); + return $"7.{bytes[0] ^ 0x10:00}.{bytes[1] ^ 0x10:0000}"; //return "7.01-7.10" } } } diff --git a/BurnOutSharp/ProtectionType/SmartE.cs b/BurnOutSharp/ProtectionType/SmartE.cs index 4bb6c554..b1d41b45 100644 --- a/BurnOutSharp/ProtectionType/SmartE.cs +++ b/BurnOutSharp/ProtectionType/SmartE.cs @@ -7,10 +7,12 @@ namespace BurnOutSharp.ProtectionType { public class SmartE { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("BITARTS")) - return "SmartE"; + // "BITARTS" + byte[] check = new byte[] { 0x42, 0x49, 0x54, 0x41, 0x52, 0x54, 0x53 }; + if (fileContent.Contains(check, out int position)) + return $"SmartE (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/SolidShield.cs b/BurnOutSharp/ProtectionType/SolidShield.cs index c0a69264..427be003 100644 --- a/BurnOutSharp/ProtectionType/SolidShield.cs +++ b/BurnOutSharp/ProtectionType/SolidShield.cs @@ -8,96 +8,101 @@ namespace BurnOutSharp.ProtectionType { public class SolidShield { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if (fileContent.Contains("D" + (char)0x00 + "V" + (char)0x00 + "M" + (char)0x00 + " " + (char)0x00 + "L" + (char)0x00 - + "i" + (char)0x00 + "b" + (char)0x00 + "r" + (char)0x00 + "a" + (char)0x00 + "r" + (char)0x00 + "y")) - { - return "SolidShield " + Utilities.GetFileVersion(file); - } + // "D" + (char)0x00 + "V" + (char)0x00 + "M" + (char)0x00 + " " + (char)0x00 + "L" + (char)0x00 + "i" + (char)0x00 + "b" + (char)0x00 + "r" + (char)0x00 + "a" + (char)0x00 + "r" + (char)0x00 + "y" + byte[] check = new byte[] { 0x44, 0x00, 0x56, 0x00, 0x4D, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x62, 0x00, 0x72, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79 }; + if (fileContent.Contains(check, out int position)) + return $"SolidShield {Utilities.GetFileVersion(file)} (Index {position})"; - if (fileContent.Contains("S" + (char)0x00 + "o" + (char)0x00 + "l" + (char)0x00 + "i" + (char)0x00 + "d" + (char)0x00 - + "s" + (char)0x00 + "h" + (char)0x00 + "i" + (char)0x00 + "e" + (char)0x00 + "l" + (char)0x00 + "d" + (char)0x00 - + " " + (char)0x00 + "L" + (char)0x00 + "i" + (char)0x00 + "b" + (char)0x00 + "r" + (char)0x00 + "a" + (char)0x00 - + "r" + (char)0x00 + "y") - || fileContent.Contains("S" + (char)0x00 + "o" + (char)0x00 + "l" + (char)0x00 + "i" + (char)0x00 + "d" + (char)0x00 - + "s" + (char)0x00 + "h" + (char)0x00 + "i" + (char)0x00 + "e" + (char)0x00 + "l" + (char)0x00 + "d" + (char)0x00 - + " " + (char)0x00 + "A" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "v" + (char)0x00 - + "a" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + " " + (char)0x00 - + "L" + (char)0x00 + "i" + (char)0x00 + "b" + (char)0x00 + "r" + (char)0x00 + "a" + (char)0x00 + "r" + (char)0x00 + "y")) + // "S" + (char)0x00 + "o" + (char)0x00 + "l" + (char)0x00 + "i" + (char)0x00 + "d" + (char)0x00 + "s" + (char)0x00 + "h" + (char)0x00 + "i" + (char)0x00 + "e" + (char)0x00 + "l" + (char)0x00 + "d" + (char)0x00 + " " + (char)0x00 + "L" + (char)0x00 + "i" + (char)0x00 + "b" + (char)0x00 + "r" + (char)0x00 + "a" + (char)0x00 + "r" + (char)0x00 + "y" + check = new byte[] { 0x53, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x73, 0x00, 0x68, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x64, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x62, 0x00, 0x72, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79 }; + if (fileContent.Contains(check, out position)) { string companyName = string.Empty; if (file != null) companyName = FileVersionInfo.GetVersionInfo(file).CompanyName.ToLower(); if (companyName.Contains("solidshield") || companyName.Contains("tages")) - return "SolidShield Core.dll " + Utilities.GetFileVersion(file); + return $"SolidShield Core.dll {Utilities.GetFileVersion(file)} (Index {position})"; } - if ((position = fileContent.IndexOf("" + (char)0xEF + (char)0xBE + (char)0xAD + (char)0xDE)) > -1) - { - var id1 = fileContent.Substring(position + 5, 3); - var id2 = fileContent.Substring(position + 16, 4); - - if (id1 == "" + (char)0x00 + (char)0x00 + (char)0x00 && id2 == "" + (char)0x00 + (char)0x10 + (char)0x00 + (char)0x00) - return "SolidShield 1 (SolidShield EXE Wrapper)"; - else if (id1 == ".o&" && id2 == "ÛÅ›¹") - return "SolidShield 2 (SolidShield v2 EXE Wrapper)"; // TODO: Verify against other SolidShield 2 discs - } - - if (fileContent.Contains("A" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "v" + (char)0x00 - + "a" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + " " + (char)0x00 - + "M" + (char)0x00 + "a" + (char)0x00 + "n" + (char)0x00 + "a" + (char)0x00 + "g" + (char)0x00 + "e" + (char)0x00 + "r")) + // "S" + (char)0x00 + "o" + (char)0x00 + "l" + (char)0x00 + "i" + (char)0x00 + "d" + (char)0x00 + "s" + (char)0x00 + "h" + (char)0x00 + "i" + (char)0x00 + "e" + (char)0x00 + "l" + (char)0x00 + "d" + (char)0x00 + " " + (char)0x00 + "A" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "v" + (char)0x00 + "a" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + " " + (char)0x00 + "L" + (char)0x00 + "i" + (char)0x00 + "b" + (char)0x00 + "r" + (char)0x00 + "a" + (char)0x00 + "r" + (char)0x00 + "y" + check = new byte[] { 0x53, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x69, 0x00, 0x64, 0x00, 0x73, 0x00, 0x68, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6C, 0x00, 0x64, 0x00, 0x20, 0x00, 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x4C, 0x00, 0x69, 0x00, 0x62, 0x00, 0x72, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79 }; + if (fileContent.Contains(check, out position)) { string companyName = string.Empty; if (file != null) companyName = FileVersionInfo.GetVersionInfo(file).CompanyName.ToLower(); if (companyName.Contains("solidshield") || companyName.Contains("tages")) - return "SolidShield Activation Manager Module " + Utilities.GetFileVersion(file); + return $"SolidShield Core.dll {Utilities.GetFileVersion(file)} (Index {position})"; } - if ((position = fileContent.IndexOf("" + (char)0xAD + (char)0xDE + (char)0xFE + (char)0xCA)) > -1) + // (char)0xEF + (char)0xBE + (char)0xAD + (char)0xDE + check = new byte[] { }; + if (fileContent.Contains(check, out position)) { - if ((fileContent[position + 3] == (char)0x04 || fileContent[position + 3] == (char)0x05) - && fileContent.Substring(position + 4, 3) == "" + (char)0x00 + (char)0x00 + (char)0x00 - && fileContent.Substring(position + 15, 4) == "" + (char)0x00 + (char)0x10 + (char)0x00 + (char)0x00) + var id1 = new ArraySegment(fileContent, position + 5, 3); + var id2 = new ArraySegment(fileContent, position + 16, 4); + + if (id1.SequenceEqual(new byte[] { 0x00, 0x00, 0x00 }) && id2.SequenceEqual(new byte[] { 0x00, 0x10, 0x00, 0x00 })) + return $"SolidShield 1 (SolidShield EXE Wrapper) (Index {position})"; + else if (id1.SequenceEqual(new byte[] { 0x2E, 0x6F, 0x26 }) && id2.SequenceEqual(new byte[] { 0xDB, 0xC5, 0x20, 0x3A, 0xB9 })) + return $"SolidShield 2 (SolidShield v2 EXE Wrapper) (Index {position})"; // TODO: Verify against other SolidShield 2 discs + } + + // "A" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "v" + (char)0x00 + "a" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + " " + (char)0x00 + "M" + (char)0x00 + "a" + (char)0x00 + "n" + (char)0x00 + "a" + (char)0x00 + "g" + (char)0x00 + "e" + (char)0x00 + "r" + check = new byte[] { 0x41, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x76, 0x00, 0x61, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x72 }; + if (fileContent.Contains(check, out position)) + { + string companyName = string.Empty; + if (file != null) + companyName = FileVersionInfo.GetVersionInfo(file).CompanyName.ToLower(); + + if (companyName.Contains("solidshield") || companyName.Contains("tages")) + return $"SolidShield Activation Manager Module {Utilities.GetFileVersion(file)} (Index {position})"; + } + + // (char)0xAD + (char)0xDE + (char)0xFE + (char)0xCA + check = new byte[] { 0xAD, 0xDE, 0xFE, 0xCA }; + if (fileContent.Contains(check, out position)) + { + var id1 = new ArraySegment(fileContent, position + 4, 3); + var id2 = new ArraySegment(fileContent, position + 15, 4); + + if ((fileContent[position + 3] == 0x04 || fileContent[position + 3] == 0x05) + && id1.SequenceEqual(new byte[] { 0x00, 0x00, 0x00 }) + && id2.SequenceEqual(new byte[] { 0x00, 0x10, 0x00, 0x00 })) { - return "SolidShield 2 (SolidShield v2 EXE Wrapper)"; + return $"SolidShield 2 (SolidShield v2 EXE Wrapper) (Index {position})"; } - else if (fileContent.Substring(position + 4, 3) == "" + (char)0x00 + (char)0x00 + (char)0x00 - && fileContent.Substring(position + 15, 4) == "" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00) + else if (id1.SequenceEqual(new byte[] { 0x00, 0x00, 0x00 }) + && id2.SequenceEqual(new byte[] { 0x00, 0x00, 0x00, 0x00 })) { - position = fileContent.IndexOf("T" + (char)0x00 + "a" + (char)0x00 + "g" + (char)0x00 + "e" + (char)0x00 + "s" - + (char)0x00 + "S" + (char)0x00 + "e" + (char)0x00 + "t" + (char)0x00 + "u" + (char)0x00 + "p" - + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "0" + (char)0x00 + (char)0x8 - + (char)0x00 + (char)0x1 + (char)0x0 + "F" + (char)0x00 + "i" + (char)0x00 + "l" + (char)0x00 + "e" - + (char)0x00 + "V" + (char)0x00 + "e" + (char)0x00 + "r" + (char)0x00 + "s" + (char)0x00 + "i" + (char)0x00 - + "o" + (char)0x00 + "n" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00); - if (position > -1) + // "T" + (char)0x00 + "a" + (char)0x00 + "g" + (char)0x00 + "e" + (char)0x00 + "s" + (char)0x00 + "S" + (char)0x00 + "e" + (char)0x00 + "t" + (char)0x00 + "u" + (char)0x00 + "p" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + "0" + (char)0x00 + (char)0x8 + (char)0x00 + (char)0x1 + (char)0x0 + "F" + (char)0x00 + "i" + (char)0x00 + "l" + (char)0x00 + "e" + (char)0x00 + "V" + (char)0x00 + "e" + (char)0x00 + "r" + (char)0x00 + "s" + (char)0x00 + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0x00 + byte[] check2 = new byte[] { 0x54, 0x61, 0x67, 0x65, 0x73, 0x53, 0x65, 0x74, 0x75, 0x70, 0x30, 0x08, 0x01, 0x00, 0x46, 0x69, 0x6C, 0x65, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x00, 0x00, 0x00, 0x00 }; + if (fileContent.Contains(check2, out int position2)) { - position--; // TODO: Verify this subtract - return "SolidShield 2 + Tagès " + fileContent.Substring(position + 0x38, 1) + "." + fileContent.Substring(position + 0x38 + 4, 1) + "." + fileContent.Substring(position + 0x38 + 8, 1) + "." + fileContent.Substring(position + 0x38 + 12, 1); + position2--; // TODO: Verify this subtract + return $"SolidShield 2 + Tagès {fileContent[position2 + 0x38]}.{fileContent[position2 + 0x38 + 4]}.{fileContent[position2 + 0x38 + 8]}.{fileContent[position + 0x38 + 12]} (Index {position}, {position2})"; } else { - return "SolidShield 2 (SolidShield v2 EXE Wrapper)"; + return $"SolidShield 2 (SolidShield v2 EXE Wrapper) (Index {position})"; } } } - if ((position = fileContent.IndexOf("Solidshield")) > 0) - { - return "SolidShield " + GetVersion(file, position); - } + // "Solidshield" + check = new byte[] { 0x53, 0x6F, 0x6C, 0x69, 0x64, 0x73, 0x68, 0x69, 0x65, 0x6C, 0x64 }; + if (fileContent.Contains(check, out position)) + return $"SolidShield {GetVersion(fileContent, position)} (Index {position})"; - if (fileContent.Contains("B" + (char)0x00 + "I" + (char)0x00 + "N" + (char)0x00 + (char)0x7 + (char)0x00 + - "I" + (char)0x00 + "D" + (char)0x00 + "R" + (char)0x00 + "_" + (char)0x00 + - "S" + (char)0x00 + "G" + (char)0x00 + "T" + (char)0x0)) - { - return "SolidShield"; - } + // "B" + (char)0x00 + "I" + (char)0x00 + "N" + (char)0x00 + (char)0x7 + (char)0x00 + "I" + (char)0x00 + "D" + (char)0x00 + "R" + (char)0x00 + "_" + (char)0x00 + "S" + (char)0x00 + "G" + (char)0x00 + "T" + (char)0x0 + check = new byte[] { 0x42, 0x00, 0x49, 0x00, 0x4E, 0x00, 0x07, 0x00, 0x49, 0x00, 0x44, 0x00, 0x52, 0x00, 0x5F, 0x00, 0x53, 0x00, 0x47, 0x00, 0x54, 0x00 }; + if (fileContent.Contains(check, out position)) + return $"SolidShield (Index {position})"; return null; } @@ -129,24 +134,21 @@ namespace BurnOutSharp.ProtectionType return null; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; - - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position + 12, SeekOrigin.Begin); // Begin reading after "Solidshield" - char version = br.ReadChar(); - br.ReadByte(); - char subVersion = br.ReadChar(); - br.ReadByte(); - char subsubVersion = br.ReadChar(); - br.ReadByte(); - char subsubsubVersion = br.ReadChar(); - return version + "." + subVersion + "." + subsubVersion + "." + subsubsubVersion; - } + int index = position + 12; // Begin reading after "Solidshield" + char version = (char)fileContent[index]; + index++; + index++; + char subVersion = (char)fileContent[index]; + index++; + index++; + char subSubVersion = (char)fileContent[index]; + index++; + index++; + char subSubSubVersion = (char)fileContent[index]; + + return $"{version}.{subVersion}.{subSubVersion}.{subSubSubVersion}"; } } } diff --git a/BurnOutSharp/ProtectionType/StarForce.cs b/BurnOutSharp/ProtectionType/StarForce.cs index 6017bbc8..1e63511d 100644 --- a/BurnOutSharp/ProtectionType/StarForce.cs +++ b/BurnOutSharp/ProtectionType/StarForce.cs @@ -7,37 +7,58 @@ namespace BurnOutSharp.ProtectionType { public class StarForce { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if (fileContent.Contains("(" + (char)0x00 + "c" + (char)0x00 + ")" + (char)0x00 + " " + (char)0x00 + "P" + (char)0x00 - + "r" + (char)0x00 + "o" + (char)0x00 + "t" + (char)0x00 + "e" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 - + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + " " + (char)0x00 + "T" + (char)0x00 + "e" + (char)0x00 - + "c" + (char)0x00 + "h" + (char)0x00 + "n" + (char)0x00 + "o" + (char)0x00 + "l" + (char)0x00 + "o" + (char)0x00 - + "g" + (char)0x00 + "y" + (char)0x00) - || fileContent.Contains("Protection Technology, Ltd.")) + // "(" + (char)0x00 + "c" + (char)0x00 + ")" + (char)0x00 + " " + (char)0x00 + "P" + (char)0x00 + "r" + (char)0x00 + "o" + (char)0x00 + "t" + (char)0x00 + "e" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 + "i" + (char)0x00 + "o" + (char)0x00 + "n" + (char)0x00 + " " + (char)0x00 + "T" + (char)0x00 + "e" + (char)0x00 + "c" + (char)0x00 + "h" + (char)0x00 + "n" + (char)0x00 + "o" + (char)0x00 + "l" + (char)0x00 + "o" + (char)0x00 + "g" + (char)0x00 + "y" + (char)0x00 + byte[] check = new byte[] { 0x28, 0x00, 0x63, 0x00, 0x29, 0x00, 0x20, 0x00, 0x50, 0x00, 0x72, 0x00, 0x6F, 0x00, 0x74, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x69, 0x00, 0x6F, 0x00, 0x6E, 0x00, 0x20, 0x00, 0x54, 0x00, 0x65, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6E, 0x00, 0x6F, 0x00, 0x6C, 0x00, 0x6F, 0x00, 0x67, 0x00, 0x79, 0x00 }; + if (fileContent.Contains(check, out int position)) { - //if (FileContent.Contains("PSA_GetDiscLabel") - //if (FileContent.Contains("(c) Protection Technology") - position = fileContent.IndexOf("TradeName") - 1; - if (position != -1 && position != -2) - return "StarForce " + Utilities.GetFileVersion(file) + " (" + fileContent.Substring(position + 22, 30).Split((char)0x00)[0] + ")"; + // "PSA_GetDiscLabel" + // byte[] check2 = new byte[] { 0x50, 0x53, 0x41, 0x5F, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x4C, 0x61, 0x62, 0x65, 0x6C }; + + // "(c) Protection Technology" + // byte[] check2 = new byte[] { 0x28, 0x63, 0x29, 0x20, 0x50, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6E, 0x6F, 0x6C, 0x6F, 0x67, 0x79 }; + + // "TradeName" + byte[] check2 = new byte[] { 0x54, 0x72, 0x61, 0x64, 0x65, 0x4E, 0x61, 0x6D, 0x65 }; + if (fileContent.Contains(check2, out int position2) && position2 != 0) + return $"StarForce {Utilities.GetFileVersion(file)} ({fileContent.Skip(position2 + 22).TakeWhile(c => c != 0x00)}) (Index {position}, {position2})"; else - return "StarForce " + Utilities.GetFileVersion(file); + return $"StarForce {Utilities.GetFileVersion(file)} (Index {position}, {position2})"; } - if (fileContent.Contains(".sforce") - || fileContent.Contains(".brick")) + // "Protection Technology, Ltd." + check = new byte[] { 0x50, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6E, 0x6F, 0x6C, 0x6F, 0x67, 0x79, 0x2C, 0x20, 0x4C, 0x74, 0x64, 0x2E }; + if (fileContent.Contains(check, out position)) { - return "StarForce 3-5"; + // "PSA_GetDiscLabel" + // byte[] check2 = new byte[] { 0x50, 0x53, 0x41, 0x5F, 0x47, 0x65, 0x74, 0x44, 0x69, 0x73, 0x63, 0x4C, 0x61, 0x62, 0x65, 0x6C }; + + // "(c) Protection Technology" + // byte[] check2 = new byte[] { 0x28, 0x63, 0x29, 0x20, 0x50, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x54, 0x65, 0x63, 0x68, 0x6E, 0x6F, 0x6C, 0x6F, 0x67, 0x79 }; + + // "TradeName" + byte[] check2 = new byte[] { 0x54, 0x72, 0x61, 0x64, 0x65, 0x4E, 0x61, 0x6D, 0x65 }; + if (fileContent.Contains(check2, out int position2) && position2 != 0) + return $"StarForce {Utilities.GetFileVersion(file)} ({fileContent.Skip(position2 + 22).TakeWhile(c => c != 0x00)}) (Index {position}, {position2})"; + else + return $"StarForce {Utilities.GetFileVersion(file)} (Index {position}, {position2})"; } - if (fileContent.Contains("P" + (char)0x00 + "r" + (char)0x00 + "o" + (char)0x00 + "t" + (char)0x00 + "e" + (char)0x00 - + "c" + (char)0x00 + "t" + (char)0x00 + "e" + (char)0x00 + "d" + (char)0x00 + " " + (char)0x00 + "M" + (char)0x00 - + "o" + (char)0x00 + "d" + (char)0x00 + "u" + (char)0x00 + "l" + (char)0x00 + "e")) - { - return "StarForce 5"; - } + // ".sforce" + check = new byte[] { 0x2E, 0x73, 0x66, 0x6F, 0x72, 0x63, 0x65 }; + if (fileContent.Contains(check, out position)) + return $"StarForce 3-5 (Index {position})"; + + // ".brick" + check = new byte[] { 0x2E, 0x62, 0x72, 0x69, 0x63, 0x6B }; + if (fileContent.Contains(check, out position)) + return $"StarForce 3-5 (Index {position})"; + + // "P" + (char)0x00 + "r" + (char)0x00 + "o" + (char)0x00 + "t" + (char)0x00 + "e" + (char)0x00 + "c" + (char)0x00 + "t" + (char)0x00 + "e" + (char)0x00 + "d" + (char)0x00 + " " + (char)0x00 + "M" + (char)0x00 + "o" + (char)0x00 + "d" + (char)0x00 + "u" + (char)0x00 + "l" + (char)0x00 + "e" + check = new byte[] { 0x50, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x65, 0x00, 0x63, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x65 }; + if (fileContent.Contains(check, out position)) + return $"StarForce 5 (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/Sysiphus.cs b/BurnOutSharp/ProtectionType/Sysiphus.cs index f7ba6b0a..b489de1c 100644 --- a/BurnOutSharp/ProtectionType/Sysiphus.cs +++ b/BurnOutSharp/ProtectionType/Sysiphus.cs @@ -1,39 +1,34 @@ -using System.IO; - -namespace BurnOutSharp.ProtectionType +namespace BurnOutSharp.ProtectionType { public class Sysiphus { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("V SUHPISYSDVD")) > -1) - return "Sysiphus DVD " + GetVersion(file, position); + // "V SUHPISYSDVD" + byte[] check = new byte[] { 0x56, 0x20, 0x53, 0x55, 0x48, 0x50, 0x49, 0x53, 0x59, 0x53, 0x44, 0x56, 0x44 }; + if (fileContent.Contains(check, out int position)) + return $"Sysiphus DVD {GetVersion(fileContent, position)} (Index {position})"; - if ((position = fileContent.IndexOf("V SUHPISYS")) > -1) - return "Sysiphus " + GetVersion(file, position); + // "V SUHPISYS" + check = new byte[] { 0x56, 0x20, 0x53, 0x55, 0x48, 0x50, 0x49, 0x53, 0x59, 0x53 }; + if (fileContent.Contains(check, out position)) + return $"Sysiphus {GetVersion(fileContent, position)} (Index {position})"; return null; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + int index = position - 3; + char subVersion = (char)fileContent[index]; + index++; + index++; + char version = (char)fileContent[index]; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position - 3, SeekOrigin.Begin); - char subVersion = br.ReadChar(); - br.ReadChar(); - char version = br.ReadChar(); - - if (char.IsNumber(version) && char.IsNumber(subVersion)) - return version + "." + subVersion; - else - return ""; - } + if (char.IsNumber(version) && char.IsNumber(subVersion)) + return $"{version}.{subVersion}"; + else + return ""; } } } diff --git a/BurnOutSharp/ProtectionType/Tages.cs b/BurnOutSharp/ProtectionType/Tages.cs index 34807dff..70ff48fe 100644 --- a/BurnOutSharp/ProtectionType/Tages.cs +++ b/BurnOutSharp/ProtectionType/Tages.cs @@ -7,16 +7,26 @@ namespace BurnOutSharp.ProtectionType { public class Tages { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if (fileContent.Contains("protected-tages-runtime.exe") || - fileContent.Contains("tagesprotection.com")) - return "TAGES " + Utilities.GetFileVersion(file); + // "protected-tages-runtime.exe" + byte[] check = new byte[] { 0x70, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74, 0x65, 0x64, 0x2D, 0x74, 0x61, 0x67, 0x65, 0x73, 0x2D, 0x72, 0x75, 0x6E, 0x74, 0x69, 0x6D, 0x65, 0x2E, 0x65, 0x78, 0x65 }; + if (fileContent.Contains(check, out int position)) + return $"TAGES {Utilities.GetFileVersion(file)} (Index {position})"; - if ((position = fileContent.IndexOf("" + (char)0xE8 + "u" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0xE8)) > -1 - && fileContent.Substring(--position + 8, 3) == "" + (char)0xFF + (char)0xFF + "h") // TODO: Verify this subtract - return "TAGES " + GetVersion(file, position); + // "tagesprotection.com" + check = new byte[] { 0x74, 0x61, 0x67, 0x65, 0x73, 0x70, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x63, 0x6F, 0x6D }; + if (fileContent.Contains(check, out position)) + return $"TAGES {Utilities.GetFileVersion(file)} (Index {position})"; + + // (char)0xE8 + "u" + (char)0x00 + (char)0x00 + (char)0x00 + (char)0xE8 + check = new byte[] { 0xE8, 0x75, 0x00, 0x00, 0x00, 0xE8 }; + if (fileContent.Contains(check, out position)) + { + // (char)0xFF + (char)0xFF + "h" + if (new ArraySegment(fileContent, --position + 8, 3).SequenceEqual(new byte[] { 0xFF, 0xFF, 0x68 })) // TODO: Verify this subtract + return $"TAGES {GetVersion(fileContent, position)} (Index {position})"; + } return null; } @@ -78,27 +88,19 @@ namespace BurnOutSharp.ProtectionType return null; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; - - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) + switch (fileContent[position + 7]) { - br.BaseStream.Seek(position + 7, SeekOrigin.Begin); - byte bVersion = br.ReadByte(); - switch (bVersion) - { - case 0x1B: - return "5.3-5.4"; - case 0x14: - return "5.5.0"; - case 0x4: - return "5.5.2"; - } - return ""; + case 0x1B: + return "5.3-5.4"; + case 0x14: + return "5.5.0"; + case 0x4: + return "5.5.2"; } + + return ""; } } } diff --git a/BurnOutSharp/ProtectionType/ThreePLock.cs b/BurnOutSharp/ProtectionType/ThreePLock.cs index dd22e49a..2df5cc4a 100644 --- a/BurnOutSharp/ProtectionType/ThreePLock.cs +++ b/BurnOutSharp/ProtectionType/ThreePLock.cs @@ -2,14 +2,22 @@ { public class ThreePLock { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains(".ldr") - || fileContent.Contains(".ldt")) - // || fileContent.Contains("Y" + (char)0xC3 + "U" + (char)0x8B + (char)0xEC + (char)0x83 + (char)0xEC + "0SVW") - { - return "3PLock"; - } + // ".ldr" + byte[] check = new byte[] { 0x2E, 0x6C, 0x64, 0x72 }; + if (fileContent.Contains(check, out int position)) + return $"3PLock (Index {position})"; + + // ".ldt" + check = new byte[] { 0x2E, 0x6C, 0x64, 0x74 }; + if (fileContent.Contains(check, out position)) + return $"3PLock (Index {position})"; + + // "Y" + (char)0xC3 + "U" + (char)0x8B + (char)0xEC + (char)0x83 + (char)0xEC + "0SVW" + // check = new byte[] { 0x59, 0xC3, 0x55, 0x8B, 0xEC, 0x83, 0xEC, 0x30, 0x53, 0x56, 0x57 }; + //if (fileContent.Contains(check, out position)) + // return $"3PLock (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/VOBProtectCDDVD.cs b/BurnOutSharp/ProtectionType/VOBProtectCDDVD.cs index fa7b4c54..3f1705c2 100644 --- a/BurnOutSharp/ProtectionType/VOBProtectCDDVD.cs +++ b/BurnOutSharp/ProtectionType/VOBProtectCDDVD.cs @@ -7,35 +7,37 @@ namespace BurnOutSharp.ProtectionType { public class VOBProtectCDDVD { - public static string CheckContents(string file, string fileContent) + public static string CheckContents(string file, byte[] fileContent) { - int position; - if ((position = fileContent.IndexOf("VOB ProtectCD")) > -1) - return "VOB ProtectCD/DVD " + GetOldVersion(file, --position); // TODO: Verify this subtract + // "VOB ProtectCD" + byte[] check = new byte[] { 0x56, 0x4F, 0x42, 0x20, 0x50, 0x72, 0x6F, 0x74, 0x65, 0x63, 0x74, 0x43, 0x44 }; + if (fileContent.Contains(check, out int position)) + return $"VOB ProtectCD/DVD {GetOldVersion(fileContent, --position)} (Index {position})"; // TODO: Verify this subtract - if ((position = fileContent.IndexOf("DCP-BOV" + (char)0x00 + (char)0x00)) > -1) + // "DCP-BOV" + (char)0x00 + (char)0x00 + check = new byte[] { 0x44, 0x43, 0x50, 0x2D, 0x42, 0x4F, 0x56, 0x00, 0x00 }; + if (fileContent.Contains(check, out position)) { - string version = GetVersion(file, --position); // TODO: Verify this subtract + string version = GetVersion(fileContent, --position); // TODO: Verify this subtract if (version.Length > 0) - { - return "VOB ProtectCD/DVD " + version; - } + return $"VOB ProtectCD/DVD {version} (Index {position})"; - version = EVORE.SearchProtectDiscVersion(file); + version = EVORE.SearchProtectDiscVersion(file, fileContent); if (version.Length > 0) { if (version.StartsWith("2")) - { - version = "6" + version.Substring(1); - } - return "VOB ProtectCD/DVD " + version; + version = $"6{version.Substring(1)}"; + + return $"VOB ProtectCD/DVD {version} (Index {position})"; } - return "VOB ProtectCD/DVD 5.9-6.0" + GetBuild(file, position); + return $"VOB ProtectCD/DVD 5.9-6.0 {GetBuild(fileContent, position)} (Index {position})"; } - if (fileContent.Contains(".vob.pcd")) - return "VOB ProtectCD"; + // ".vob.pcd" + check = new byte[] { 0x2E, 0x76, 0x6F, 0x62, 0x2E, 0x70, 0x63, 0x64 }; + if (fileContent.Contains(check, out position)) + return $"VOB ProtectCD (Index {position})"; return null; } @@ -56,68 +58,36 @@ namespace BurnOutSharp.ProtectionType return null; } - private static string GetBuild(string file, int position) + private static string GetBuild(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + if (!char.IsNumber((char)fileContent[position - 13])) + return ""; //Build info removed - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - br.BaseStream.Seek(position - 13, SeekOrigin.Begin); - if (!char.IsNumber(br.ReadChar())) - return ""; //Build info removed - - br.BaseStream.Seek(position - 4, SeekOrigin.Begin); - int build = br.ReadInt16(); - return " (Build " + build + ")"; - } + int build = BitConverter.ToInt16(fileContent, position - 4); // Check if this is supposed to be a 4-byte read + return $" (Build {build})"; } - private static string GetOldVersion(string file, int position) + private static string GetOldVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; + char[] version = new ArraySegment(fileContent, position + 16, 4).Select(b => (char)b).ToArray(); // Begin reading after "VOB ProtectCD" + if (char.IsNumber(version[0]) && char.IsNumber(version[2]) && char.IsNumber(version[3])) + return $"{version[0]}.{version[2]}{version[3]}"; - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) - { - char[] version = new char[3]; - br.BaseStream.Seek(position + 16, SeekOrigin.Begin); // Begin reading after "VOB ProtectCD" - version[0] = br.ReadChar(); - br.ReadByte(); - version[1] = br.ReadChar(); - version[2] = br.ReadChar(); - - if (char.IsNumber(version[0]) && char.IsNumber(version[1]) && char.IsNumber(version[2])) - return version[0] + "." + version[1] + version[2]; - - return "old"; - } + return "old"; } - private static string GetVersion(string file, int position) + private static string GetVersion(byte[] fileContent, int position) { - if (file == null || !File.Exists(file)) - return string.Empty; - - using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - using (var br = new BinaryReader(fs)) + if (fileContent[position - 2] == 5) { - br.BaseStream.Seek(position - 2, SeekOrigin.Begin); - byte version = br.ReadByte(); - if (version == 5) - { - br.BaseStream.Seek(position - 4, SeekOrigin.Begin); - byte subsubVersion = (byte)((br.ReadByte() & 0xF0) >> 4); - byte subVersion = (byte)((br.ReadByte() & 0xF0) >> 4); - return version + "." + subVersion + "." + subsubVersion; - } - else - { - return ""; - } + int index = position - 4; + byte subsubVersion = (byte)((fileContent[index] & 0xF0) >> 4); + index++; + byte subVersion = (byte)((fileContent[index] & 0xF0) >> 4); + return $"5.{subVersion}.{subsubVersion}"; } + + return ""; } } } diff --git a/BurnOutSharp/ProtectionType/WTMCDProtect.cs b/BurnOutSharp/ProtectionType/WTMCDProtect.cs index 906b865e..9ce234ea 100644 --- a/BurnOutSharp/ProtectionType/WTMCDProtect.cs +++ b/BurnOutSharp/ProtectionType/WTMCDProtect.cs @@ -7,10 +7,12 @@ namespace BurnOutSharp.ProtectionType { public class WTMCDProtect { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("WTM76545")) - return "WTM CD Protect"; + // "WTM76545" + byte[] check = new byte[] { 0x57, 0x54, 0x4D, 0x37, 0x36, 0x35, 0x34, 0x35 }; + if (fileContent.Contains(check, out int position)) + return $"WTM CD Protect (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/WiseInstaller.cs b/BurnOutSharp/ProtectionType/WiseInstaller.cs new file mode 100644 index 00000000..7a2e0c02 --- /dev/null +++ b/BurnOutSharp/ProtectionType/WiseInstaller.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.IO; +using Wise = WiseUnpacker.WiseUnpacker; + +namespace BurnOutSharp.ProtectionType +{ + public class WiseInstaller + { + public static List CheckContents(string file, byte[] fileContent) + { + // "WiseMain" + byte[] check = new byte[] { 0x57, 0x69, 0x73, 0x65, 0x4D, 0x61, 0x69, 0x6E }; + if (fileContent.Contains(check, out int position)) + { + List protections = new List { $"Wise Installation Wizard Module (Index {position})" }; + + if (!File.Exists(file)) + return protections; + + protections.AddRange(WiseInstaller.Scan(file)); + + return protections; + } + + return null; + } + + public static List Scan(string file) + { + List protections = new List(); + + // If the installer file itself fails + try + { + string tempPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); + Directory.CreateDirectory(tempPath); + + Wise unpacker = new Wise(); + unpacker.ExtractTo(file, tempPath); + + foreach (string tempFile in Directory.EnumerateFiles(tempPath, "*", SearchOption.AllDirectories)) + { + string protection = ProtectionFind.ScanContent(tempFile); + + // If tempfile cleanup fails + try + { + File.Delete(tempFile); + } + catch { } + + if (!string.IsNullOrEmpty(protection)) + protections.Add($"\r\n{tempFile.Substring(tempPath.Length)} - {protection}"); + } + } + catch { } + + return protections; + } + + } +} diff --git a/BurnOutSharp/ProtectionType/XtremeProtector.cs b/BurnOutSharp/ProtectionType/XtremeProtector.cs index 03893d1b..56baf8e0 100644 --- a/BurnOutSharp/ProtectionType/XtremeProtector.cs +++ b/BurnOutSharp/ProtectionType/XtremeProtector.cs @@ -2,10 +2,12 @@ { public class XtremeProtector { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("XPROT ")) - return "Xtreme-Protector"; + // "XPROT " + byte[] check = new byte[] { 0x58, 0x50, 0x52, 0x4F, 0x54, 0x20, 0x20, 0x20 }; + if (fileContent.Contains(check, out int position)) + return $"Xtreme-Protector (Index {position})"; return null; } diff --git a/BurnOutSharp/ProtectionType/dotFuscator.cs b/BurnOutSharp/ProtectionType/dotFuscator.cs index c8ac53cd..0d5a4d84 100644 --- a/BurnOutSharp/ProtectionType/dotFuscator.cs +++ b/BurnOutSharp/ProtectionType/dotFuscator.cs @@ -2,10 +2,12 @@ { public class dotFuscator { - public static string CheckContents(string fileContent) + public static string CheckContents(byte[] fileContent) { - if (fileContent.Contains("DotfuscatorAttribute")) - return "dotFuscator"; + // "DotfuscatorAttribute" + byte[] check = new byte[] { 0x44, 0x6F, 0x74, 0x66, 0x75, 0x73, 0x63, 0x61, 0x74, 0x6F, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65 }; + if (fileContent.Contains(check, out int position)) + return $"dotFuscator (Index {position})"; return null; } diff --git a/BurnOutSharp/StormLib.dll b/BurnOutSharp/StormLib.dll new file mode 100644 index 0000000000000000000000000000000000000000..f877734134eca79bbfdb9ebf3b6651d318c8a579 GIT binary patch literal 1630720 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

    8*~+y1o$d0P=f0W6zFsW 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∋D7NeNeFL880v!x|2QqH{ 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

    kDhwGoV7{Ke$l&&)DVrzr*(*bSExI% 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

    j)V59{C`nq z1S)P`zGPuwcrn`+G?T>B$p~tKSp6^6ej$%Vhl>%&6bVod*Ak+64GVY_=Qty%`EuNK z38-p4?g~0Po1q&thXF1WIgh*U0m*|J>U$t=*wg8{rumIT_nGd{GoUr<7r@sVUjgmM zalO&$$OBqJ8Ylpo1#%SW^<5I!9V!s?A|HGRg#xVS7uW520X&Fd3mVBN^#@&t{E)H4 zy*u;*=)&v&^_`&?Kz1DI_B{i-H0MHR086*;70_PF&>NirJl(!`Iz0rsLmzYoi1fNH zf#f)DR6C-(LwUNHz*PeeXzz`E_9=^Q5!j`)pmn7Gx_x;dGa0@--JH!2?Xyq9mt?tc zX~0$i6o7|}SY9w1f&;w-bby=dk%0fAD&U>n2byaSFqGCnRCl`W==R+a_`(LFhf*hW zgY8k+AR*9PyMv*W`$eq*C>lX6%ojxlVCOsqZA_{?z*Ne^zt8tf^GSye-!rcTnrja* zmx7wOXPQrObcCJ(83gui(2G^_puEq)zt8nd^9jZdP%4Cmf-4W&d`?&BnGVo|4M+k! z+Q-w)1e(sdVA0J2Ubl73ML?4Q9C=J7x?s-+yhwo^F21F?b_+v^7}Q!b@K6X#x9gUd zpu3`uxt?a|bv+%>?JE)pis>ueu4h2)*9+kG>lJYO^#-{8dI#KoeE@2|f+95FMe%D; z)>P?q-OyaS0b#*a6Og}Hx?MNCya?L)iPO ?~%a&qM(!lRth?- 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

    U}n#sB}`|3mr~ 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

      ?fJ)yG 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 literal 0 HcmV?d00001 diff --git a/BurnOutSharp/Utilities.cs b/BurnOutSharp/Utilities.cs index e4e55fcb..035db71a 100644 --- a/BurnOutSharp/Utilities.cs +++ b/BurnOutSharp/Utilities.cs @@ -9,6 +9,66 @@ namespace BurnOutSharp { public static class Utilities { + /// + /// Search for a byte array in another array + /// + public static bool Contains(this byte[] stack, byte[] needle, out int position, int start = 0, int end = -1) + { + // Initialize the found position to -1 + position = -1; + + // If either array is null or empty, we can't do anything + if (stack == null || stack.Length == 0 || needle == null || needle.Length == 0) + return false; + + // If the needle array is larger than the stack array, it can't be contained within + if (needle.Length > stack.Length) + return false; + + // If start or end are not set properly, set them to defaults + if (start < 0) + start = 0; + if (end < 0) + end = stack.Length - needle.Length; + + for (int i = start; i < end; i++) + { + if (stack.EqualAt(needle, i)) + { + position = i; + return true; + } + } + + return false; + } + + /// + /// See if a byte array starts with another + /// + public static bool StartsWith(this byte[] stack, byte[] needle) + { + return stack.Contains(needle, out int _, start: 0, end: 1); + } + + /// + /// Get if a stack at a certain index is equal to a needle + /// + private static bool EqualAt(this byte[] stack, byte[] needle, int index) + { + // If we're too close to the end of the stack, return false + if (needle.Length >= stack.Length - index) + return false; + + for (int i = 0; i < needle.Length; i++) + { + if (stack[i + index] != needle[i]) + return false; + } + + return true; + } + /// /// Get the file version as reported by the filesystem /// diff --git a/LICENSE b/LICENSE index dbbe3558..e72bfdda 100644 --- a/LICENSE +++ b/LICENSE @@ -1,21 +1,23 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. + The GNU General Public License is a free, copyleft license for +software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to +the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free -software for all its users. +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you @@ -24,34 +26,44 @@ them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @@ -60,7 +72,7 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU Affero General Public License. + "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. @@ -537,45 +549,35 @@ to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. + 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single +under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General +Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published +GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's +versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. @@ -633,29 +635,40 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. + GNU General Public License for more details. - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . + You should have received a copy of the GNU General Public License + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. \ No newline at end of file diff --git a/README.md b/README.md index 41d93d48..6a0fdc56 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,16 @@ C# port of the protection scanning ability of [BurnOut](http://burnout.sourceforge.net/) plus numerous updates and additions. This currently compiles as a library so it can be used in any C# application. For an example of usage, see [DICUI](https://github.com/reignstumble/DICUI). -In addition to the original BurnOut code, this port adds the ability to scan inside of Microsoft CAB files (courtesy of [libmspack4n](https://github.com/activescott/libmspack4n)) and InstallShield CAB files (courtesy of [UnshieldSharp](https://github.com/mnadareski/UnshieldSharp)). +In addition to the original BurnOut code, the following libraries (or ports thereof) are used for file handling: + +- [HLExtract](https://github.com/Rupan/HLLib) - Various Valve archive format extraction +- [libmspack4n](https://github.com/activescott/libmspack4n) - Microsoft CAB extraction +- [psxt001z](https://github.com/Dremora/psxt001z) - PS1 LibCrypt detection +- [SharpCompress](https://github.com/adamhathcock/sharpcompress) - 7zip/GZip/RAR/PKZIP extraction +- [StormLib](https://github.com/ladislav-zezula/StormLib) - MPQ extraction +- [StormLibSharp](https://github.com/robpaveza/stormlibsharp) - MPQ extraction +- [UnshieldSharp](https://github.com/mnadareski/UnshieldSharp) - InstallShield CAB extraction +- [WiseUnpacker](https://github.com/mnadareski/WiseUnpacker) - Wise Installer extraction ## Protections Detected @@ -38,6 +47,7 @@ Below is a list of the protections that can be detected using this code: - Hexalock Autolock - Impulse Reactor - IndyVCD +- Inno Setup - JoWooD X-Prot (v1/v2) - Key2Audio XS - Key-Lock (Dongle) @@ -66,6 +76,7 @@ Below is a list of the protections that can be detected using this code: - Uplay (partial) - VOB ProtectCD/DVD - Winlock +- WISE Installer - WTM CD Protect - WTM Copy Protection - XCP diff --git a/Test/Program.cs b/Test/Program.cs index ea0f9f71..b0978055 100644 --- a/Test/Program.cs +++ b/Test/Program.cs @@ -1,4 +1,5 @@ using System; +using System.IO; using System.Linq; using BurnOutSharp; @@ -12,9 +13,15 @@ namespace Test p.ProgressChanged += Changed; foreach (string arg in args) { - Console.WriteLine(String.Join("\r\n", ProtectionFind.Scan(arg, p).Select(kvp => kvp.Key + ": " + kvp.Value))); + string protections = String.Join("\r\n", ProtectionFind.Scan(arg, p).Select(kvp => kvp.Key + ": " + kvp.Value.TrimEnd())); + Console.WriteLine(protections); + using (StreamWriter sw = new StreamWriter(File.OpenWrite($"{DateTime.Now:yyyy-MM-dd_HHmmss}.txt"))) + { + sw.WriteLine(protections); + } } + Console.WriteLine("Press any button to close..."); Console.ReadLine(); //ProtectionFind.ScanSectors('D', 2048);

    kodE_fL6e%`YU59L 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 z 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