public byte Decrypt(IFileDataWrapper data) { int baseByteOffset = _encrypterData.BaseByteOffset < 0 ? data.Size + _encrypterData.BaseByteOffset : _encrypterData.BaseByteOffset; byte xorByte = data.GetByte(baseByteOffset); if (_encrypterData.BaseByteXOR.HasValue) { xorByte = (byte)(xorByte ^ _encrypterData.BaseByteXOR.Value); } if (_encrypterData.FixFirstByte) { byte firstByte; if (_encrypterData.FirstByteXOR.HasValue) { firstByte = (byte)(xorByte ^ _encrypterData.FirstByteXOR.Value); } else { firstByte = xorByte; } data.PutByte(0, firstByte); } data.XOR(0, data.Size, xorByte); return(xorByte); }
public void Unpack() { if (Directory.Exists(_baseDirectory)) { Directory.Delete(_baseDirectory, true); } _data.GoTo(0x20); int offset = _data.GetInt(); _data.GoTo(offset); byte zip = _data.GetByte(); int zSize = _data.GetLong(); int size = _data.GetLong(); offset = _data.Location; using (IFileDataWrapper archive = zip != 0 ? _data.GetCompressedData(offset, zSize, size) : _data.GetData(offset, zSize)) Extract(archive, archive.Size, string.Empty); }