酷狗.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\***.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;
酷狗.kgtemp文件加密算法逆向