酷狗歌曲缓存kgtemp转mp3工具
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工具的更多相关文章
- Python 应用爬虫下载酷狗音乐
应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...
- 开源小工具 酷狗、网易音乐缓存文件转mp3工具
发布一个开源小工具,支持将酷狗和网易云音乐的缓存文件转码为MP3文件. 以前写过kgtemp文件转mp3工具,正好当前又有网易云音乐缓存文件需求,因此就在原来小工具的基础上做了一点修改,增加了对网易云 ...
- 酷狗.kgtemp文件加密算法逆向
该帖转载于孤心浪子--http://www.cnblogs.com/KMBlog/p/6877752.html 酷狗音乐上的一些歌曲是不能免费下载的,然而用户仍然可以离线试听,这说明有缓存文件,并且极 ...
- Java爬虫系列之实战:爬取酷狗音乐网 TOP500 的歌曲(附源码)
在前面分享的两篇随笔中分别介绍了HttpClient和Jsoup以及简单的代码案例: Java爬虫系列二:使用HttpClient抓取页面HTML Java爬虫系列三:使用Jsoup解析HTML 今天 ...
- 闲来无事研究一下酷狗缓存文件kgtemp的加密方式
此贴为本人原创,转载请注明出处 序 前几天更新了被打入冷宫很久的酷狗,等进入之后就感觉菊花一紧----试 听 居 然 都 要 开 通 音 乐 包(高品和无损)才行了,WTF! 这意味着以前缓存的都听不 ...
- java爬取并下载酷狗TOP500歌曲
是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...
- 【Python3爬虫】下载酷狗音乐上的歌曲
经过测试,可以下载要付费下载的歌曲(n_n) 准备工作:Python3.5+Pycharm 使用到的库:requests,re,json,time,fakeuseragent 步骤: 打开酷狗音乐的官 ...
- kgtemp文件转mp3工具
kgtemp文件是酷我音乐软件的缓存文件,本文从技术层面探讨如何解密该文件为mp3文件,并通过读取ID3信息来重命名. kgtemp解密 kgtemp文件前1024个字节是固定的包头信息,解密方案详细 ...
- 使用Xpath爬取酷狗TOP500的歌曲信息
使用xpath爬取酷狗TOP500的歌曲信息, 将排名.歌手名.歌曲名.歌曲时长,提取的结果以文件形式保存下来.参考网址:http://www.kugou.com/yy/rank/home/1-888 ...
随机推荐
- C++编程求数组中重复的数字
题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复的数字. 例如,如果输入长度为7的 ...
- javabean 和 xml 互转
1.场景描述 将javabean对象转换为xml字符串,将xml字符串转换为javabean对象. 2.maven依赖 <dependency> <groupId>jdom&l ...
- 玩玩Qt(一)
最近在看一些关于游戏引擎的东西,本来是有几个游戏的小点子,其实实现起来还挺麻烦的,想找个游戏引擎看看能不能码起来.辗转之后发现了很多2D引擎,其中国产的要数cocos2dx用的好像是比较广泛,但是好多 ...
- Android 开发笔记___复选框__checkbox
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout ...
- Javascript数组求和的方法总结 以及由斐波那契数列得到的启发
一次面试中,面试官要求用三种不同的Javascript方法进行一个数字数组的求和,当时思来想去只想到了使用循环这一种笨方法,因此面试比较失败,在这里总结了六种Javascript进行数组求和的方法,以 ...
- 如何用 Graylog 管理日志?- 每天5分钟玩转 Docker 容器技术(93)
上一节已经部署好了 Graylog,现在学习如何用它来管理日志. 首先启动测试容器. docker run -d \ --log-driver=gelf \ --log-opt gelf-addres ...
- Vue Elementui 如何让输入框每次自动聚焦
在项目优化中碰到一个小问题,在每次提示框显示的时候让提示框中的输入框聚焦.如下图.一般情况下提示框是隐藏的.点击了编辑才会弹出. 那么原生属性autofocus 只在模板加载完成时起作用,也就是说只有 ...
- 走进Spark生态圈:环境的安装与配置
什么是Spark? Apache Spark 是一种大规模数据处理的快速通用引擎,使用基于内存的处理方式,较与MapReduce而言,解决了其shuffle多次IO操作带来的效率低问题,从而达到快速的 ...
- 《天书夜读:从汇编语言到windows内核编程》二 C语言的流程与处理
1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下fo ...
- [转载] 网络IO模型
转载自http://blog.csdn.net/zhoudaxia/article/details/8974779 同步(synchronous) IO和异步(asynchronous) IO,阻塞( ...