Esempio n. 1
0
 public void Dispose() //Faily attempt to reduce memory usage. :[
 {
     if (_fileBytes != null)
     {
         _fileBytes = null;
     }
     if (_fileExtension != null)
     {
         _fileExtension = null;
     }
     if (_fileName != null)
     {
         _fileName = null;
     }
     if (_filePath != null)
     {
         _filePath = null;
     }
     if (_compressedFile != null)
     {
         _compressedFile = null;
     }
     if (_decompressedFile != null)
     {
         _decompressedFile = null;
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Compresses the LZB file.
        /// </summary>
        /// <param name="clean">True for cleaning up the remains of the decompression.</param>
        /// <returns></returns>
        public bool Compress(bool clean = true)
        {
            if (DecompressedFile == null || HeaderFile == null)
            {
                return(false);
            }
            if (!DecompressedFile.Exists() || !HeaderFile.Exists())
            {
                return(false);
            }

            byte[] buffer;

            using (BinaryReader reader = new BinaryReader(new FileStream(HeaderFile.FilePath, FileMode.Open)))
            {
                buffer = new byte[16];
                reader.Read(buffer, 0, 16);
                LZSSHeader.Load(buffer);
            }

            using (BinaryReader reader = new BinaryReader(new FileStream(DecompressedFile.FilePath, FileMode.Open)))
            {
                int bufferLength = (int)reader.BaseStream.Length;
                buffer = new byte[bufferLength];
                reader.Read(buffer, 0, bufferLength);
                LZSSHeader.UncompressedSize = (uint)bufferLength;
            }
            byte mode = LZSSHeader.Mode;

            if (clean)
            {
                DecompressedFile.Delete();
                DecompressedFile = null;
                HeaderFile.Delete();
                HeaderFile = null;
            }

            switch (mode)
            {
            default:
                MessageBox.Show("Not a valid LZSS-bu2 mode number!\nOnly possible modes are 0, 1 and 2.", "Sorry!");
                return(false);

            case 0:
                compress_Mode0(buffer);
                break;

            case 1:
                compress_Mode(buffer, 1, 256);
                break;

            case 2:
                compress_Mode(buffer, 2, 4096);
                break;
            }
            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// Disassemble the .unity3d file.
        /// </summary>
        public void Disassemble()
        {
            _compressedFile.ReadFile();
            _compressedFile.FileReader.BaseStream.Position = _compressedFile.Header.CompressedFileHeaderSize;
            byte[] compressed_file_body = _compressedFile.FileReader.ReadByteArray(_compressedFile.Header.CompressedFileSizeWithoutHeader); //Get the body of the compressed file

            ConsoleIO.Log("Decompressing the .unity3d with Lzma...");
            _decompressedFile = new DecompressedFile(LzmaUtils.Decompress(compressed_file_body));
            _decompressedFile.ReadFile();
        }
        /// <summary>
        /// Start assembling the files into a .unity3d webarchive.
        /// </summary>
        public void Assemble()
        {
            DecompressedFile.WriteFile();
            byte[] compressedbody = Compression.LZMA.LzmaUtils.Compress(((MemoryStream)DecompressedFile.FileWriter.BaseStream).ToArray());
            CompressedFile.Header.BuildVerison                    = 3;
            CompressedFile.Header.WebPlayerVersion                = "3.x.x";
            CompressedFile.Header.UnityEngineVersion              = "4.5.1f3";
            CompressedFile.Header.CompressedFileSize              = compressedbody.Length;
            CompressedFile.Header.CompressedFileHeaderSize        = 60;
            CompressedFile.Header.CompressedFileSizeWithoutHeader = compressedbody.Length - CompressedFile.Header.CompressedFileHeaderSize;
            CompressedFile.Header.DecompressedFileSize            = ((MemoryStream)DecompressedFile.FileWriter.BaseStream).ToArray().Length;
            CompressedFile.Header.CompressedFileSize2             = compressedbody.Length;
            CompressedFile.Header.DecompressedFileHeaderSize      = DecompressedFile.Header.Files[0].Offset;

            CompressedFile.WriteFile(compressedbody);
        }
Esempio n. 5
0
        /// <summary>
        /// Try to disassemble the .unity3d file.
        /// </summary>
        /// <param name="timesToTry">Times to try</param>
        public void BurteForceDisassemble(int timesToTry)
        {
            ConsoleIO.WriteLine("Brute force disassembling file.");
            byte[] buf = null;
            for (int i = 0; i < timesToTry; i++)
            {
                try
                {
                    buf = new byte[_compressedFile.Bytes.Length - i];
                    Buffer.BlockCopy(_compressedFile.Bytes, i, buf, 0, buf.Length);

                    LzmaUtils.Decompress(buf);
                    ConsoleIO.WriteLine("Was able to decompress file at offset: " + i.ToString("X"));
                    _decompressedFile = new DecompressedFile(LzmaUtils.Decompress(buf));
                    break;
                }
                catch { }
                ConsoleIO.WriteLine("Failed to brute force unpack file. Tried: " + i.ToString(), ConsoleIO.LogType.Error);
            }
        }