Esempio n. 1
0
 public void Read(AssetsFileReader reader)
 {
     reader.bigEndian           = false;
     magic                      = reader.ReadStringLength(4);
     fileVersion                = reader.ReadByte();
     compressionType            = reader.ReadByte();
     stringTableOffset          = reader.ReadUInt32();
     stringTableLenUncompressed = reader.ReadUInt32();
     stringTableLenCompressed   = reader.ReadUInt32();
     if (fileVersion == 1) //is this even right?
     {
         fileBlockSize = reader.ReadUInt32();
     }
     else
     {
         fileBlockSize = 0;
     }
     fileCount = reader.ReadUInt32();
     files     = new List <ClassDatabaseFileRef>();
     for (int i = 0; i < fileCount; i++)
     {
         files.Add(new ClassDatabaseFileRef()
         {
             offset = reader.ReadUInt32(),
             length = reader.ReadUInt32(),
             name   = reader.ReadStringLength(15)
         });
     }
 }
        ///public bool Pack(AssetsFileReader reader, LPARAM lPar, AssetsFileWriter writer, LPARAM writerPar);
        public bool IsAssetsFile(AssetsFileReader reader, AssetBundleDirectoryInfo06 entry)
        {
            //todo - not fully implemented
            long offset = bundleHeader6.GetFileDataOffset() + entry.offset;

            if (entry.decompressedSize < 0x20)
            {
                return(false);
            }

            reader.Position = offset;
            string possibleBundleHeader = reader.ReadStringLength(7);

            if (possibleBundleHeader == "UnityFS")
            {
                return(false);
            }

            reader.Position = offset + 0x08;
            int possibleFormat = reader.ReadInt32();

            if (possibleFormat > 99)
            {
                return(false);
            }

            reader.Position = offset + 0x14;
            string possibleVersion = reader.ReadNullTerminated();
            string emptyVersion    = Regex.Replace(possibleVersion, "[a-zA-Z0-9\\.]", "");
            string fullVersion     = Regex.Replace(possibleVersion, "[^a-zA-Z0-9\\.]", "");

            return(emptyVersion == "" && fullVersion.Length > 0);
        }
Esempio n. 3
0
        public bool IsAssetsFile(AssetsFileReader reader, AssetBundleDirectoryInfo06 entry)
        {
            //todo - not fully implemented
            long offset = bundleHeader6.GetFileDataOffset() + entry.offset;

            if (entry.decompressedSize < 0x30)
            {
                return(false);
            }

            reader.Position = offset;
            string possibleBundleHeader = reader.ReadStringLength(7);

            if (possibleBundleHeader == "UnityFS")
            {
                return(false);
            }

            reader.Position = offset + 0x08;
            int possibleFormat = reader.ReadInt32();

            if (possibleFormat > 99)
            {
                return(false);
            }

            reader.Position = offset + 0x14;

            if (possibleFormat >= 0x16)
            {
                reader.Position += 0x1c;
            }

            string possibleVersion = "";
            char   curChar;

            while (reader.Position < reader.BaseStream.Length && (curChar = (char)reader.ReadByte()) != 0x00)
            {
                possibleVersion += curChar;
                if (possibleVersion.Length > 0xFF)
                {
                    return(false);
                }
            }

            string emptyVersion = Regex.Replace(possibleVersion, "[a-zA-Z0-9\\.]", "");
            string fullVersion  = Regex.Replace(possibleVersion, "[^a-zA-Z0-9\\.]", "");

            return(emptyVersion == "" && fullVersion.Length > 0);
        }
Esempio n. 4
0
        //recommend GetAssetNameFast if at possible
        public bool ReadName(AssetsFile file, out string str)
        {
            str = string.Empty;
            AssetsFileReader reader = file.reader;

            if (AssetsFileExtra.HasName(curFileType))
            {
                reader.Position = absoluteFilePos;
                int length = Math.Min(reader.ReadInt32(), 99);
                str = reader.ReadStringLength(length);
                return(true);
            }
            return(false);
        }
Esempio n. 5
0
        public static bool IsAssetsFile(AssetsFileReader reader, long offset, long length)
        {
            //todo - not fully implemented
            if (length < 0x30)
            {
                return(false);
            }

            reader.Position = offset;
            string possibleBundleHeader = reader.ReadStringLength(5);

            if (possibleBundleHeader == "Unity")
            {
                return(false);
            }

            reader.Position = offset + 0x08;
            int possibleFormat = reader.ReadInt32();

            if (possibleFormat > 99)
            {
                return(false);
            }

            reader.Position = offset + 0x14;

            if (possibleFormat >= 0x16)
            {
                reader.Position += 0x1c;
            }

            string possibleVersion = "";
            char   curChar;

            while (reader.Position < reader.BaseStream.Length && (curChar = (char)reader.ReadByte()) != 0x00)
            {
                possibleVersion += curChar;
                if (possibleVersion.Length > 0xFF)
                {
                    return(false);
                }
            }

            string emptyVersion = Regex.Replace(possibleVersion, "[a-zA-Z0-9\\.\\n]", "");
            string fullVersion  = Regex.Replace(possibleVersion, "[^a-zA-Z0-9\\.\\n]", "");

            return(emptyVersion == "" && fullVersion.Length > 0);
        }
        public void Read(AssetsFileReader reader)
        {
            reader.bigEndian = false;
            header           = reader.ReadStringLength(4);
            if (header != "cldb")
            {
                throw new Exception("header not detected. is this a cldb file?");
            }
            fileVersion = reader.ReadByte();
            flags       = 0;
            if (fileVersion == 4)
            {
                flags = reader.ReadByte();
            }
            switch (fileVersion)
            {
            case 1:
                compressionType = 0;
                break;

            case 2:
                compressionType = reader.ReadByte();
                break;

            case 3:
            case 4:
                compressionType  = reader.ReadByte();
                compressedSize   = reader.ReadUInt32();
                uncompressedSize = reader.ReadUInt32();
                break;

            default:
                return;
            }
            unityVersionCount = reader.ReadByte();
            unityVersions     = new string[unityVersionCount];
            for (int i = 0; i < unityVersionCount; i++)
            {
                unityVersions[i] = reader.ReadCountString();
            }
            stringTableLen = reader.ReadUInt32();
            stringTablePos = reader.ReadUInt32();
        }
        public ulong Read(AssetsFileReader reader, ulong filePos)
        {
            reader.bigEndian = false;
            header           = reader.ReadStringLength(4);
            if (header != "cldb")
            {
                return(reader.Position);
            }
            fileVersion = reader.ReadByte();
            switch (fileVersion)
            {
            case 1:
                break;

            case 3:
                compressionType = reader.ReadByte();
                if (compressionType != 0)
                {
                    return(reader.Position);
                }
                compressedSize   = reader.ReadUInt32();
                uncompressedSize = reader.ReadUInt32();
                break;

            default:
                return(reader.Position);
            }
            unityVersionCount = reader.ReadByte();
            pUnityVersions    = new string[unityVersionCount];
            for (int i = 0; i < unityVersionCount; i++)
            {
                pUnityVersions[i] = reader.ReadCountString();
            }
            stringTableLen = reader.ReadUInt32();
            stringTablePos = reader.ReadUInt32();
            return(reader.Position);
        }