kgtemp文件是酷我音乐软件的缓存文件,本文从技术层面探讨如何解密该文件为mp3文件,并通过读取ID3信息来重命名。

kgtemp解密

kgtemp文件前1024个字节是固定的包头信息,解密方案详细可以参见(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\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 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();
}
}

这样解密出来就是mp3文件了

读取ID3信息

解密出来的文件还需要手动命名,不是很方便,可以读取ID3V1信息重命名文件。

ID3V1比较简单,它是存放在MP3文件的末尾,用16进制的编辑器打开一个MP3文件,查看其末尾的128个顺序存放字节,数据结构定义如下:

char Header3; /标签头必须是"TAG"否则认为没有标签/

char Title[30]; /标题/

char Artist[30]; /作者/

char Album[30]; /专集/

char Year4; /出品年代/

char Comment[30]; /备注/

char Genre; /类型,流派/

解析代码比较简单,注意中文歌曲用GBK编码就可以了:

  private static Mp3Info FormatMp3Info(byte[] Info, System.Text.Encoding Encoding)
{
Mp3Info myMp3Info = new Mp3Info();
string str = null;
int i;
int position = 0主要代码jia,; //循环的起始值
int currentIndex = 0; //Info的当前索引值 //获取TAG标识
for (i = currentIndex; i < currentIndex + 3; i++)
{
str = str + (char)Info[i];
position++;
}
currentIndex = position;
myMp3Info.identify = str; //获取歌名
str = null;
byte[] bytTitle = new byte[30]; //将歌名部分读到一个单独的数组中
int j = 0;
for (i = currentIndex; i < currentIndex + 30; i++)
{
bytTitle[j] = Info[i];
position++;
j++;
}
currentIndex = position;
myMp3Info.Title = ByteToString(bytTitle, Encoding); //获取歌手名
str = null;
j = 0;
byte[] bytArtist = new byte[30]; //将歌手名部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 30; i++)
{
bytArtist[j] = Info[i];
position++;
j++;
}
currentIndex = position;
myMp3Info.Artist = ByteToString(bytArtist, Encoding); //获取唱片名
str = null;
j = 0;
byte[] bytAlbum = new byte[30]; //将唱片名部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 30; i++)
{
bytAlbum[j] = Info[i];
position++;
j++;
}
currentIndex = position;
myMp3Info.Album = ByteToString(bytAlbum, Encoding); //获取年
str = null;
j = 0;
byte[] bytYear = new byte[4]; //将年部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 4; i++)
{
bytYear[j] = Info[i];
position++;
j++;
}
currentIndex = position;
myMp3Info.Year = ByteToString(bytYear, Encoding); //获取注释
str = null;
j = 0;
byte[] bytComment = new byte[28]; //将注释部分读到一个单独的数组中
for (i = currentIndex; i < currentIndex + 25; i++)
{
bytComment[j] = Info[i];
position++;
j++;
}
currentIndex = position;
myMp3Info.Comment = ByteToString(bytComment, Encoding); //以下获取保留位
myMp3Info.reserved1 = (char)Info[++position];
myMp3Info.reserved2 = (char)Info[++position];
myMp3Info.reserved3 = (char)Info[++position]; //
return myMp3Info;
}

转换小工具

写了一个小工具,来进行转换

下载地址:https://pan.baidu.com/s/1o7FIsPk

PS:上面只读取了IDV1,部分歌曲可能不存在

可以下载@缤纷 提供的程序,增加了ID3V2的支持:

https://files.cnblogs.com/files/gxlxzys/kgtemp文件转mp3工具.zip


作者:Jadepeng

出处:jqpeng的技术记事本--http://www.cnblogs.com/xiaoqi

您的支持是对博主最大的鼓励,感谢您的认真阅读。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

酷狗歌曲缓存kgtemp转mp3工具的更多相关文章

  1. Python 应用爬虫下载酷狗音乐

    应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...

  2. 开源小工具 酷狗、网易音乐缓存文件转mp3工具

    发布一个开源小工具,支持将酷狗和网易云音乐的缓存文件转码为MP3文件. 以前写过kgtemp文件转mp3工具,正好当前又有网易云音乐缓存文件需求,因此就在原来小工具的基础上做了一点修改,增加了对网易云 ...

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

    该帖转载于孤心浪子--http://www.cnblogs.com/KMBlog/p/6877752.html 酷狗音乐上的一些歌曲是不能免费下载的,然而用户仍然可以离线试听,这说明有缓存文件,并且极 ...

  4. Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)

    在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...

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

    此贴为本人原创,转载请注明出处 序 前几天更新了被打入冷宫很久的酷狗,等进入之后就感觉菊花一紧----试 听 居 然 都 要 开 通 音 乐 包(高品和无损)才行了,WTF! 这意味着以前缓存的都听不 ...

  6. java爬取并下载酷狗TOP500歌曲

    是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...

  7. 【Python3爬虫】下载酷狗音乐上的歌曲

    经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:Python3.5+Pycharm 使用到的库:requests,re,json,time,fakeuseragent 步骤: 打开酷狗音乐的官 ...

  8. kgtemp文件转mp3工具

    kgtemp文件是酷我音乐软件的缓存文件,本文从技术层面探讨如何解密该文件为mp3文件,并通过读取ID3信息来重命名. kgtemp解密 kgtemp文件前1024个字节是固定的包头信息,解密方案详细 ...

  9. 使用Xpath爬取酷狗TOP500的歌曲信息

    使用xpath爬取酷狗TOP500的歌曲信息, 将排名.歌手名.歌曲名.歌曲时长,提取的结果以文件形式保存下来.参考网址:http://www.kugou.com/yy/rank/home/1-888 ...

随机推荐

  1. easyui dialog 中嵌入html页面

    最近使用easyui比较多,这个插件确实很好用.在使用时也遇到了大大小小的问题,好在都一一解决了. 记录一下今天遇到的问题. 目的:用easyui的dialog嵌入一个html页面(html中仍有要执 ...

  2. empty()和remove()的区别

    这两个都是删除元素,但是两者还是有区别的. remove()这个方法呢是删除被选元素的所有文本和子元素,当然包括被选元素自己. 而empty()呢,被选元素自己是不会被删除的. 比如: <div ...

  3. sublime text全程指南【转载】

    前言(Prologue) Sublime Text是一款跨平台代码编辑器(Code Editor),从最初的Sublime Text 1.0,到现在的Sublime Text 3.0,Sublime ...

  4. chrome Web开放 字体格式不能显示问题

    /** * Chrome 32/33 webfont issue fix. * Requires jQuery. * More info: http://blog.cloudfour.com/chro ...

  5. mac中利用brew实现多版本php共存以及任意切换

    1.安装brew 参考链接:https://brew.sh/index_zh-cn.html 2.安装php56 brew install homebrew/php/php56 3.配置php56 因 ...

  6. 一起写框架-MVC框架-基础功能-Date类型数据绑定(七)

    实现功能 表单请求传递的数据,格式为以下格式的日期时间数据. (1):yyyy-MM-dd hh:mm:ss (2):yyyy-MM-dd 执行方法可以使用Date类型接收. 实现思路 1.获得表单字 ...

  7. 新的开始,hello world!

    开始使用博客一年多来,在各位大神的博客上找了很多学习需要的资料,受益匪浅.一直来自己也想过开始写自己的博客,但是一直没有开始.一来是懒,懒的整理,懒的打字排版,二来是那段时间加入实验室,自我感觉一直有 ...

  8. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

  9. 常见的Mysql数据库优化总结

    索引 1.主键索引 作用:唯一约束和提高查询速度 #建表时创建主键索引 create table `table_name`( `id` int unsigned not null auto_incre ...

  10. Android Testing Point

    The test application demonstrates these key points: An Android test is itself an Android application ...