1. 程式人生 > >酷狗.kgtemp文件加密算法逆向

酷狗.kgtemp文件加密算法逆向

using 變量 可能 inpu 技術分享 ram out pen 然而

該帖轉載於孤心浪子--http://www.cnblogs.com/KMBlog/p/6877752.html

酷狗音樂上的一些歌曲是不能免費下載的,然而用戶仍然可以離線試聽,這說明有緩存文件,並且極有可能被加密了.

技術分享

解密算法:

class Program
{
  static void Main(string[] args)
  {

    byte[] key={0xAC,0xEC,0xDF,0x57};
    using (var input = new FileStream(@"E:\KuGou\Temp\***.kgtemp", FileMode.Open, FileAccess.Read))
    {
      var output = File.OpenWrite(@"E:\KuGou\***.mp3");//輸出文件
      input.Seek(1024, SeekOrigin.Begin);//跳過1024字節的包頭
      byte[] buffer = new byte[key.Length];
      int length;
      while((length=input.Read(buffer,0,buffer.Length))>0)
      {
        for(int i=0;i<length;i++)
        {
          var k = key[i];
          var kh = k >> 4;
          var kl = k & 0xf;
          var b = buffer[i];
          var low = b & 0xf ^ kl;//解密後的低4位
          var high = (b >> 4) ^ kh ^ low & 0xf;//解密後的高4位
          buffer[i] = (byte)(high << 4 | low);
        }
        output.Write(buffer, 0, length);
      }
      output.Close();
    }
    Console.WriteLine("按任意鍵退出...");
    Console.ReadKey();
  }
}

結果:輸出文件的MD5與緩存文件名相同,大功告成

總結

固定要異或的key={0xAC,0xEC,0xDF,0x57}

加密方式如下:

1.設輸入的數為x,輸出結果為y,循環變量為i;

2.分別取x的高4位和低4位h,l; h=x >> 4 ; l=x & 0xf;

3.分別取key[i]的高4位和低4位kh,kl;kh=key[i] >> 4;kl=key[i] & 0xf;

4.y=h ^ l ^ kh;

5.y=y<< 4 | (l ^ kl);

解密方式如下:

1.設輸入的數為x,輸出結果為y,循環變量為i;

2.分別取x的高4位和低4位h,l;h=x >> 4 ; l=x & 0xf;

3.分別取key[i]的高4位和低4位kh,kl;kh=key[i] >> 4;kl=key[i] & 0xf;

4.y=l ^ kl;

5.y=(h ^ kh ^ y)<<4 | y;

酷狗.kgtemp文件加密算法逆向