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);
            }
        }
Exemple #3
0
        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);
            }
        }
Exemple #4
0
        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));
 }
Exemple #10
0
        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
                {
                }
            }
        }