酷狗音乐盒 krc 格式文件 解包

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.IO.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression;
using ICSharpCode.SharpZipLib.Zip.Compression.Streams;

namespace krcdec
{
	class KRC : IDisposable
	{

		//异或加密 密钥
		public static char[] EncKey = { '@', 'G', 'a', 'w', '^', '2', 't', 'G', 'Q', '6', '1', '-', 'Î', 'Ò', 'n', 'i' };


		FileStream fs = null;

		//头部4字节
		byte[] HeadBytes;

		//异或加密内容
		byte[] EncodedBytes;

		//解异或加密后ZIP数据
		byte[] ZipBytes;

		//UNZIP后数据
		byte[] UnzipBytes;


		public KRC()
		{
			
		}

		public string Decode(string FilePath)
		{

			fs = new FileStream(FilePath, FileMode.Open);

			HeadBytes = new byte[4];
			EncodedBytes = new byte[fs.Length];
			ZipBytes = new byte[fs.Length];

			fs.Read(HeadBytes, 0, 4);

			fs.Read(EncodedBytes, 0, (int)(fs.Length));

			int EncodedBytesLength = EncodedBytes.Length;

			for (int i = 0; i < EncodedBytesLength; i++)
			{
				int l = i % 16;

				ZipBytes[i] = (byte)(EncodedBytes[i] ^ EncKey[l]);
			}
			UnzipBytes = unzipFileStream(ZipBytes);
			string s = Encoding.UTF8.GetString(UnzipBytes);
			return s;
		}


		byte[] unzipFileStream(byte[] data)
		{
			Inflater inf = new Inflater(false);
			Deflater def = new Deflater();




			MemoryStream memoryStream = new MemoryStream();
			byte[] buffer = new byte[1024];
			int buffer_len = 0;
			using (InflaterInputStream input = new InflaterInputStream(new MemoryStream(data), inf))
			{
				do
				{
					buffer_len = input.Read(buffer, 0, buffer.Length);
					memoryStream.Write(buffer, 0, buffer_len);
					input.Flush();
				}
				while (buffer_len > 0);

				input.Close();
			}

			memoryStream.Close();
			buffer = null;
			return memoryStream.ToArray();
		}



		public void Dispose()
		{
			fs.Close();
		}

		public void GetDateTime()
		{
		}


	}
}


项目文件 https://files.cnblogs.com/binsys/110801krcdec.rar

posted @ 2011-08-01 18:13  BinSys  阅读(2532)  评论(6编辑  收藏  举报