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); }
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); }