-
-
[原创]发一个解密QQMusic中加密音乐文件的的工具(附源码)
-
发表于:
2010-1-27 23:20
26378
-
[原创]发一个解密QQMusic中加密音乐文件的的工具(附源码)
首先要感谢我的师哥 SIsIa同学 逆向的算法。
ps. 貌似俺俩还没师傅,此师哥是源于一次我让S大当师傅,他也非要拜师!然后就变成我师弟了,结果S大一直没出现!尴尬 
【起因】装系统后,装一些必备的软件(eg。输入法, 音乐播放器,视频播放器,下载工具等等)时,干脆就全套安装了腾讯公司的那一整套,之前用的音乐播放器是千千静听,换成QQ音乐后,发现他的音乐文件是被加密过的。本人虽然水平菜,但是共享的精神却一点不比大牛们差!简单看了一下他是每8字节作为一个单元来加密的,如果文件最后剩下不到8字节就不加密了,所以他处理过的音乐文件的大小是不会发生变化的。用OD跟了一下,无果!(本人的逆向水平=0)还好师弟帮忙跟出了算法,于是就写了这个工具来恢复他们加密过的音乐文件。
很容易发现
0000 0000 0000 0000 加密后是 9844 06EB F036 6D19 (16进制)
AAAA AAAA AAAA AAAA 加密后是 ED9F 1EC8 2036 9FAE (16进制)
ps. 他加密过的音乐文件是存放在 ..\\cache\\加密后的文件名, cache是一个隐藏文件夹,加密过的音乐文件是数字命名,而且没有扩展名。
下面是师弟逆向的加密算法,我看了看加密算法 马上就弄出解密算法了,因为在R大的板块刚看了这个TEA算法,太巧!
这是Delphi语言,甚至我转化成C后 还以为是javascript,
{
pData 待加密的数据
pEncData 加密后的数据
}
Function EncMusic(pData:PByte;pEncData:PChar;nLen:Integer=8):Integer;
const
Key1= $45AD9059;
FKey1= $F03E934F;
FKey2= $27BDB886;
LKey1= $D0AAE945;
LKey2= $993BA3AE;
var
FirstData,LastData,Count,Key:DWORD;
begin
Count:=32;
Key:=0;
FirstData:=PDWORD(pData)^;
LastData:=PDWORD(DWORD(pData)+$4)^;
if nLen>=8 then
begin
repeat
Key:= Key+Key1;
FirstData:=FirstData+ ((FKey2+LastData shl 4) xor (FKey1+ LastData shr 5) xor (Key+LastData));
LastData:=LastData+((LKey2 +FirstData shl 4) xor (LKey1+ FirstData shr 5) xor (Key+FirstData));
Dec(Count);
until (Count=0);
end;
PDWORD(pEncData)^:= FirstData;
PDWORD(DWORD(pEncData)+$4)^:= LastData;
end;
[培训]科锐逆向工程师培训第53期2025年7月8日开班!