zoukankan      html  css  js  c++  java
  • 酷狗.kgtemp文件加密算法逆向

    该帖转载于孤心浪子--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:KuGouTemp***.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;

  • 相关阅读:
    Cf序列化器-Serializer解析
    yield和return
    pymongo的使用
    Homebrew介绍和使用
    TypeError: expected string or bytes-like object
    JavaScript读取文本,并渲染在html
    反序相等
    打印邮票的组合
    打印对称平方数
    字符串按照原意输出
  • 原文地址:https://www.cnblogs.com/develon/p/7001154.html
Copyright © 2011-2022 走看看