示例#1
0
        public override ArcFile TryOpen(ArcView file)
        {
            if (file.MaxOffset <= 0x10)
            {
                return(null);
            }
            var header = new byte[0x10];

            foreach (var scheme in KnownSchemes.Values)
            {
                var decryptor = scheme.CreateDecryptor();
                ReadEncrypted(file.View, decryptor, 0, header, 0, 0x10);
                ILibIndexReader reader;
                if (Binary.AsciiEqual(header, 0, "LIBP"))
                {
                    reader = new LibPReader(file, decryptor, header, scheme);
                }
                else if (Binary.AsciiEqual(header, 0, "LIBU"))
                {
                    reader = LibUReader.Create(file, decryptor);
                }
                else
                {
                    continue;
                }
                using (reader)
                {
                    if (reader.ReadIndex())
                    {
                        return(new MalieArchive(file, this, reader.Dir, decryptor));
                    }
                }
            }
            return(null);
        }
示例#2
0
        public override ArcFile TryOpen(ArcView file)
        {
            if (file.MaxOffset <= 0x10)
            {
                return(null);
            }
            var header = new byte[0x10];

            foreach (var key in KnownKeys.Values)
            {
                var encryption = new Camellia(key);
                ReadEncrypted(file.View, encryption, 0, header, 0, 0x10);
                LibIndexReader reader;
                if (Binary.AsciiEqual(header, 0, "LIBP"))
                {
                    reader = new LibPReader(file, encryption, header);
                }
                else if (Binary.AsciiEqual(header, 0, "LIBU"))
                {
                    reader = new LibUReader(file, encryption, header);
                }
                else
                {
                    continue;
                }
                using (reader)
                {
                    var dir = reader.ReadIndex();
                    if (dir != null)
                    {
                        return(new MalieArchive(file, this, dir, encryption));
                    }
                }
            }
            return(null);
        }
示例#3
0
文件: ArcLIB.cs 项目: Casidi/GARbro
 public override ArcFile TryOpen(ArcView file)
 {
     if (file.MaxOffset <= 0x10)
         return null;
     var header = new byte[0x10];
     foreach (var key in KnownKeys.Values)
     {
         var encryption = new Camellia (key);
         ReadEncrypted (file.View, encryption, 0, header, 0, 0x10);
         LibIndexReader reader;
         if (Binary.AsciiEqual (header, 0, "LIBP"))
             reader = new LibPReader (file, encryption, header);
         else if (Binary.AsciiEqual (header, 0, "LIBU"))
             reader = new LibUReader (file, encryption, header);
         else
             continue;
         using (reader)
         {
             var dir = reader.ReadIndex();
             if (dir != null)
                 return new MalieArchive (file, this, dir, encryption);
         }
     }
     return null;
 }