private Pack1Unarchiver(string packagePath, Pack1Meta metaData, string destinationDirPath, byte[] key, string suffix, BytesRange range) { Checks.ArgumentFileExists(packagePath, "packagePath"); Checks.ArgumentDirectoryExists(destinationDirPath, "destinationDirPath"); Checks.ArgumentNotNull(suffix, "suffix"); if (range.Start == 0) { Assert.AreEqual(MagicBytes.Pack1, MagicBytes.ReadFileType(packagePath), "Is not Pack1 format"); } DebugLogger.LogConstructor(); DebugLogger.LogVariable(packagePath, "packagePath"); DebugLogger.LogVariable(destinationDirPath, "destinationDirPath"); DebugLogger.LogVariable(suffix, "suffix"); _packagePath = packagePath; _metaData = metaData; _destinationDirPath = destinationDirPath; _suffix = suffix; _range = range; using (var sha256 = SHA256.Create()) { _key = sha256.ComputeHash(key); } _iv = Convert.FromBase64String(_metaData.Iv); }
public static bool IsExecutable(string filePath, PlatformType platformType) { switch (platformType) { case PlatformType.Windows: return(filePath.EndsWith(".exe")); case PlatformType.OSX: return(MagicBytes.IsMacExecutable(filePath)); case PlatformType.Linux: return(MagicBytes.IsLinuxExecutable(filePath)); default: throw new ArgumentOutOfRangeException("platformType", platformType, null); } }
private bool IsExecutable(string filePath, PlatformType platformType) { switch (platformType) { case PlatformType.Unknown: throw new ArgumentException("Unknown"); case PlatformType.Windows: throw new ArgumentException("Unsupported"); case PlatformType.OSX: return(MagicBytes.IsMacExecutable(filePath)); case PlatformType.Linux: return(MagicBytes.IsLinuxExecutable(filePath)); default: throw new ArgumentOutOfRangeException("platformType", platformType, null); } }
public Pack1Unarchiver(string packagePath, Pack1Meta metaData, string destinationDirPath, byte[] key) { Checks.ArgumentFileExists(packagePath, "packagePath"); Checks.ArgumentDirectoryExists(destinationDirPath, "destinationDirPath"); Assert.AreEqual(MagicBytes.Pack1, MagicBytes.ReadFileType(packagePath), "Is not Pack1 format"); DebugLogger.LogConstructor(); DebugLogger.LogVariable(packagePath, "packagePath"); DebugLogger.LogVariable(destinationDirPath, "destinationDirPath"); _packagePath = packagePath; _metaData = metaData; _destinationDirPath = destinationDirPath; using (var sha256 = SHA256.Create()) { _key = sha256.ComputeHash(key); } _iv = Convert.FromBase64String(_metaData.Iv); }
public void IsLinuxExecutable_ForLinuxApp_ReturnsTrue() { Assert.IsTrue(MagicBytes.IsLinuxExecutable(_linuxApp)); }
public void IsLinuxExecutable_ForWindowsApp_ReturnsFalse() { Assert.IsFalse(MagicBytes.IsLinuxExecutable(_windowsApp)); }
public void IsLinuxExecutable_ForMacApp_ReturnsFalse() { Assert.IsFalse(MagicBytes.IsLinuxExecutable(_macApp)); }
public void IsMacExecutable_ForLinuxApp_ReturnsFalse() { Assert.IsFalse(MagicBytes.IsMacExecutable(_linuxApp)); }
public void IsMacExecutable_ForMacApp_ReturnsTrue() { Assert.IsTrue(MagicBytes.IsMacExecutable(_macApp)); }
private void InitGetHeader(bool onlyHeader = false) { var stream = GetReadStream(onlyHeader); if (stream == null) { return; } using (stream) { if (FileLength < 32) { return; } try { using (var reader = new EndiannessAwareBinaryReader(stream, Endianness)) { MagicBytes = reader.ReadBytes(4, ByteOrder.LittleEndian); if (MagicBytes.SequenceEqual(new byte[] { 0x42, 0x43, 0x53, 0x4D })) { reader.BaseStream.Seek(12, SeekOrigin.Current); Offset += 16; } else { reader.BaseStream.Seek(-4, SeekOrigin.Current); } if (Endianness == ByteOrder.LittleEndian && !endiannessChecked) { reader.BaseStream.Seek(4, SeekOrigin.Current); var headersize = reader.ReadUInt32(); reader.BaseStream.Seek(4, SeekOrigin.Current); var filecount = reader.ReadUInt32(); reader.BaseStream.Seek(4, SeekOrigin.Current); var fileentrysize = reader.ReadUInt32() + 12; var remainder = fileentrysize % 16; fileentrysize = fileentrysize + (remainder == 0 ? remainder : 16 - remainder); var calcheadersize = fileentrysize * filecount + 0x20; var calcheadersize2 = (fileentrysize + 16) * filecount + 0x20; if (calcheadersize != headersize && calcheadersize2 != headersize) { Endianness = ByteOrder.BigEndian; reader.ChangeEndianness(Endianness); } stream.Seek(-24, SeekOrigin.Current); endiannessChecked = true; } ReadHeaderInfo(reader); } } catch { } } }