Exemple #1
0
        public void Run(string output, string[] args)
        {
            var input = args[0];

            if (output == null)
            {
                output = Path.ChangeExtension(input, "dec");
            }

            _log.Basic("Decrypting {0}...", input);

            using var aes = new RijndaelManaged
                  {
                      Mode    = CipherMode.CFB,
                      Key     = ReadKey(args[1]),
                      IV      = ReadKey(args[2]),
                      Padding = PaddingMode.Zeros,
                  };

            using var transform = new PaddingCryptoTransform(aes.CreateDecryptor());
            var stream = new CryptoStream(File.OpenRead(input), transform, CryptoStreamMode.Read);

            using var reader = new BinaryReader(stream, TeraBinaryReader.Encoding, true);

            reader.ReadUInt32();
            reader.ReadUInt16();

            using var stream2 = new DeflateStream(stream, CompressionMode.Decompress);
            using var stream3 = File.Open(output, FileMode.Create, FileAccess.Write);

            stream2.CopyTo(stream3);

            _log.Basic("Decrypted data center to {0}", output);
        }
        protected override int Invoke(string[] args)
        {
            if (args.Length != 3)
            {
                Console.Error.WriteLine("Expected exactly 3 arguments");
                return(1);
            }

            var input = args[0];

            if (_output == null)
            {
                _output = Path.ChangeExtension(input, DataCenter.UnpackedExtension);
            }

            _log.Basic("Decrypting {0}...", input);

            using var aes = new RijndaelManaged
                  {
                      Mode    = CipherMode.CFB,
                      Key     = ReadKey(args[1]),
                      IV      = ReadKey(args[2]),
                      Padding = PaddingMode.Zeros,
                  };

            using var transform = new PaddingCryptoTransform(aes.CreateDecryptor());
            var decrypt = new CryptoStream(File.OpenRead(input), transform, CryptoStreamMode.Read);

            using var reader = new BinaryReader(decrypt, GameBinaryReader.Encoding, true);

            reader.ReadUInt32(); // Decompressed size.

            if (reader.ReadUInt16() is var hdr && hdr != 0x9c78)
            {
                throw new InvalidDataException($"Invalid zlib header value {hdr}.");
            }

            using var decompress = new FastDeflateStream(decrypt, CompressionMode.Decompress);
            using var result     = File.Open(_output, FileMode.Create, FileAccess.Write);

            decompress.CopyTo(result);

            _log.Basic("Decrypted data center to {0}", _output);

            return(0);
        }
Exemple #3
0
        protected override int Invoke(string[] args)
        {
            if (args.Length != 3)
            {
                Console.Error.WriteLine("Expected exactly 3 arguments");
                return(1);
            }

            var input = args[0];

            if (_output == null)
            {
                _output = Path.ChangeExtension(input, DecryptedExtension);
            }

            _log.Basic("Decrypting {0}...", input);

            using var aes = new RijndaelManaged
                  {
                      Mode    = CipherMode.CFB,
                      Key     = ReadKey(args[1]),
                      IV      = ReadKey(args[2]),
                      Padding = PaddingMode.Zeros,
                  };

            using var transform = new PaddingCryptoTransform(aes.CreateDecryptor());
            var stream = new CryptoStream(File.OpenRead(input), transform, CryptoStreamMode.Read);

            using var reader = new BinaryReader(stream, GameBinaryReader.Encoding, true);

            reader.ReadUInt32();
            reader.ReadUInt16();

            using var stream2 = new DeflateStream(stream, CompressionMode.Decompress);
            using var stream3 = File.Open(_output, FileMode.Create, FileAccess.Write);

            stream2.CopyTo(stream3);

            _log.Basic("Decrypted data center to {0}", _output);

            return(0);
        }