コード例 #1
0
ファイル: QQWryIpSearch.cs プロジェクト: 19900623/IP_qqwry
        /// <summary>
        /// 解压并写入文件
        /// </summary>
        /// <param name="copyWrite"></param>
        /// <param name="qqwry"></param>
        /// <param name="path"></param>
        private static void ExtractWriteDbFile(QQWryCopyWrite copyWrite, byte[] qqwry, string path)
        {
            //extract information from copywrite.rar
            if (qqwry.Length <= 24 || copyWrite.Sign != "CZIP")
            {
                throw new Exception("-2 sign error");
            }

            if (qqwry.Length != copyWrite.Size)
            {
                throw new Exception("-4 size error");
            }
            //decrypt
            var head = new byte[0x200];
            var key  = copyWrite.Key;

            for (var i = 0; i < 0x200; i++)
            {
                key     = (key * 0x805 + 1) & 0xff;
                head[i] = (byte)(qqwry[i] ^ key);
            }
            Array.Copy(head, 0, qqwry, 0, head.Length);
            var dataBuffer = new byte[4096];

            //decompress
            using (var inflaterInputStream = new InflaterInputStream(new MemoryStream(qqwry)))
            {
                //write file
                using (var fsOut = File.Create(path))
                {
                    //inflaterInputStream.CopyTo(fsOut);
                    StreamUtils.Copy(inflaterInputStream, fsOut, dataBuffer);
                }
            }
        }
コード例 #2
0
ファイル: QQWryIpSearch.cs プロジェクト: 19900623/IP_qqwry
        private static QQWryCopyWrite ReadFromStream(Stream copywriteStream)
        {
            var binaryReader = new BinaryReader(copywriteStream);
            var copyWrite    = new QQWryCopyWrite()
            {
                Sign     = Encoding.GetEncoding("gb2312").GetString(binaryReader.ReadBytesLE(4).Where(x => x != 0x00).ToArray()),
                Version  = binaryReader.ReadUInt32LE(),
                Unknown1 = binaryReader.ReadUInt32LE(),
                Size     = binaryReader.ReadUInt32LE(),
                Unknown2 = binaryReader.ReadUInt32LE(),
                Key      = binaryReader.ReadUInt32LE(),
                Text     = Encoding.GetEncoding("gb2312").GetString(binaryReader.ReadBytesLE(128).Where(x => x != 0x00).ToArray()),
                Link     = Encoding.GetEncoding("gb2312").GetString(binaryReader.ReadBytesLE(128).Where(x => x != 0x00).ToArray())
            };

            return(copyWrite);
        }