闲来无事研究一下酷狗缓存文件kgtemp的加密方式

此贴为本人原创,转载请注明出处

前几天更新了被打入冷宫很久的酷狗,等进入之后就感觉菊花一紧————试 听 居 然 都 要 开 通 音 乐 包(高品和无损)才行了,WTF!

这意味着以前缓存的都听不了了,本着好马不吃回头草的原则,不打算去降级了,下载PJ版的又担心被植入恶意代码,心好累╮(╯▽╰)╭

作为一个程序猿,岂能被你这小阴招就击败,定要给你点颜色看看!

探索

首先对比了一下缓存文件和下载好的mp3文件,发现缓存文件多了1024个字节,而且对比了几个缓存文件,前1024个字节都一样,看来使了个障眼法,去掉这1024个字节应该就是原版的音频数据了。

然后下图是加密前后的对比:

会发现加密前的一堆0x55 加密后变成 0xA9 0xE9 0xDA 0x52循环了,说明是用了4字节的循环加密,然后切换成2进制研究

加密前 0x55 0x55 0x55 0x55   01010101 01010101 01010101 01010101

加密后 0xA9 0xE9 0xDA 0x52   10101001 11101001 11011010 01010010

对称逐字节加密的运算也就循环移位或者异或固定的数或者取反,但上面的几组数循环移位和取反都不太像,就先假设是异或固定的数A B C D,接下来做填空题:

0x55 0x55 0x55 0x55   01010101 01010101 01010101 01010101

A       B      C      D        11111100 10111100 10001111 00000111

0xA9 0xE9 0xDA 0x52   10101001 11101001 11011010 01010010

得出:A B C D分别为0xFC 0xBC 0x8F 0x07 ,然后取开头的数据验证:

加密前 0x49 0x44 0x33 0x03   01001001 01000100 00110011 00000011

xor     0x3C 0xAC 0xEF 0x67   00111100 10101100 11101111 01100111

加密后 0x75 0xE8 0xDC 0x64   01110101 11101000 11011100 01100100

这次的A B C D分别为0x3C 0xAC 0xEF 0x67

纳尼?不是固定的?WTF!

两组A B C D低4位的数字都是 C A F 7

看来最终结果确实是xor计算来的,只是高4位的数值要复杂一些。

根据0 xor X =X的性质,我找了一组全0的加密前后的对比,

加密前 0x00 0x00 0x00 0x00   00000000 00000000 00000000 00000000

加密后 0xAC 0xEC 0xDF 0x57   10101100 11101100 11011111 01010111

那A B C D高4位就对应 0xA 0xE 0xD 0x5

再用开头的数据验证:

加密前 0x49 0x44 0x33 0x03   01001001 01000100 00110011 00000011

xor     0xAC 0xEC 0xDF 0x57  10101100 11101100 11011111 01010111

加密后 0xE5 0xA8 0xEC 0x54 11100101 10101000 11101100 01010100

还是不对,而且发现一点:只要加密前的数的高4位=低4位,加密后的高4位都固定为0xA 0xE 0xD 0x5

这不就是xor 中的4个数的高4位吗,由(0 xor X=X)和(X xor X=0)可知,高4位的算法应该是这样的:

取分别取输入数的高4位和低4位H,L, 然后取xor的高4位I 结果Y= H xor L xor I

带入前面的3组数据验算,都对了^_^

撸码

既然加密算法已经猜出来了,就撸码验证一下,看解密后的文件的MD5与缓存文件名是否相等:

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

            byte[] key={0xC,0xC,0xF,0x7};
            byte[] xor = { 0xA, 0xE, 0xD, 0x5 };
            using (var input = new FileStream(@"E:\KuGou\Temp\236909b6016c6e98365e5225f488dd7a.kgtemp", FileMode.Open, FileAccess.Read))
            {
                var output = File.OpenWrite(@"d:\test.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 b = buffer[i];
                        var low = b & 0xf ^ key[i];//解密后的低4位
                        var high = (b >> 4) ^ xor[i] ^ low & 0xf;//解密后的高4位
                        buffer[i] = (byte)(high << 4 | low);
                    }
                    output.Write(buffer, 0, length);
                }
                output.Close();
            }
            Console.WriteLine("按任意键退出...");
            Console.ReadKey();
        }
    }

结果:输出文件的MD5与缓存文件名相同,大功告成

时间: 2024-10-29 19:12:26

闲来无事研究一下酷狗缓存文件kgtemp的加密方式的相关文章

仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源代码)

转载请说明原出处,谢谢~~ 上一篇仿酷狗日志结束后,整个换肤功能就仅仅剩下调色板功能没有做了.我本以为会非常easy.可是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemh1aG9uZ3NodQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > waterm

酷狗.Krc加密歌词解析

1 function KrcToLrc(filename: string): string; 2 function ZDecompressStr2(const S: TBytes): UTF8String; 3 var 4 BIn, BOut: TBytes; 5 begin 6 BIn := S; 7 ZDecompress(BIn, BOut); 8 Result := TEncoding.UTF8.GetString(BOut); 9 end; 10 11 const 12 miarry:

酷狗.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:\KuGou\Temp\*

酷狗音乐盒缓存文件夹KuGouCache的设置方法

1.每次一打开酷狗总能在E盘里找到这个 KuGouCache 文件夹 ,是自动生成的MV缓存文件 .按照常规 ,可以修改这个文件的办法是 找到C盘里的:用户\administrator\AppDate\Roamine\KuGou8\kugou.ini 文件,将 MVCacheFolder=E:\KuGouCache 后面的路径修改到别的地方就好了. 2.在修改过程中确保酷狗客户端是关闭的状态. 3.在再次打开酷狗前记得将KuGouCache文件夹从E盘下剪切到你指定的位置上去,不然酷狗在重启时如

Redrain仿酷狗音乐播放器开发完毕,发布测试程序

转载请说明原出处,谢谢~~ 从暑假到现在中秋刚过,我用duilib开发仿酷狗播放器大概经历了50天.做仿酷狗的意图只是看原酷狗的界面比较漂亮,想做个完整一些的工程来练习一下duilib.今天把写好的程序代码综合一下,发布测试版,现在一共写了10355行c++代码和大约2000行xml代码.测试版的程序肯定会有不少bug,而我自己也没有精心去测试程序,希望发现问题的朋友联系我一下,我去修正.程序在win8下运行会有问题,请在兼容性里调整一下!整个软件的开发过程可以看前面发布的博客! 软件界面上绝大

用vuejs写了一个酷狗的webApp

这几天在学习vueJS,学了半个月,觉得是不是该写点什么呢?于是 .脑子一抽,仿了一个酷狗的webapp. 项目截图: 由于是单页应用,切换路由时音乐不会停止,算是一个小亮点吧. 技术栈: vuejs2.0 vue-router vuex vue-router mint-ui 演示地址和项目地址 github.com/lavyun/vue-kugouMusic 如果有刚刚开始学习vuejs的同学可以把项目clone下来 可以看看vue单页应用的构建方式,或者怎么写路由...这个项目根据本人深入程

Chisel辅助iOS 应用程序调试,MusicApp模仿酷狗4.0 UI框架

本文转载至 http://www.cocoachina.com/ios/20140825/9446.html Chisel Chisel集合了大量的LLDB 命令来辅助iOS 应用程序调试,并支持添加本地和自定义的命令.以下是其中所包含的一些命令,并对其适用于iOS还是OS X进行了区分: M13ProgressSuite 该项目包含了多种不同的风格的进程指示图,比如普通圆环形.分段圆形加载.圆形饼图加载以及条形加载等等,比如其中UINavigationBar的进程动画非常像苹果的Messag

从百度音乐和酷狗音乐的分类想到的

夜也深了,看了一天的书,泪眼夜泪心了,程序员有时真的难免会逼格,不能太任性了,也不能蛮拼了,心里想着有着看书时适合听的歌曲就好了,度娘了一下音乐,知我心者度娘啊,请看下图,这就是百度音乐的首界面,工作.学习.寂寞...是不是还会有失恋.分手之类的?很随心地选择了学习,里边的歌曲编排地很不错,的确适合学习的味道. 又看了看酷狗的首页,是按照音乐专业的角度进行分类的,太专业了,还是敬而远之了. 从百度和酷狗的产品经理来看,应该酷狗的更专业,百度的更生活化,普通用户追求的不是要自己能变成音乐人,只是希

仿酷狗音乐播放器开发日志二十四 选项设置窗体的实现(附328行xml布局源码)

转载请说明原出处,谢谢~~ 花了两天时间把仿酷狗的选项设置窗体做出来了,当然了只是做了外观.现在开学了,写代码的时间减少,所以整个仿酷狗的工程开发速度减慢了.今天把仿酷狗的选项设置窗体的布局代码分享出来,给学习duilib布局的朋友做个demo.现在编写的仿酷狗选项设置窗体和原酷狗的窗体不细看几乎看不出差别,控件的布局位置和原酷狗最多只有几个像素的位置差别. 先来看一下原酷狗的选项设置窗体的其中一个页面: 如果还不太会布局的朋友可以先看我前些日子写的关于duilib布局的博客<duilib各种布