于是我来证实我的说法了
去下了这个播放器,点开运行,每首网络歌曲播放之前抓包,可以看到
很明显,其他的都是获得歌词封面之类无用的东西,我们需要的是media文件夹下的东西,点开这个包
00000000 47 45 54 20 2F 6D 65 64 69 61 2F 64 30 30 61 37 GET /media/d00a7
00000010 63 63 38 36 36 38 33 31 31 65 30 61 34 35 32 31 cc8668311e0a4521
00000020 37 64 39 66 61 35 39 63 66 30 32 2E 70 75 72 20 7d9fa59cf02.pur
00000030 48 54 54 50 2F 31 2E 31 0D 0A 55 73 65 72 2D 41 HTTP/1.1..User-A
00000040 67 65 6E 74 3A 20 4D 6F 7A 69 6C 6C 61 2F 34 2E gent: Mozilla/4.
00000050 30 20 28 63 6F 6D 70 61 74 69 62 6C 65 3B 20 57 0 (compatible; W
00000060 69 6E 64 6F 77 73 3B 20 49 49 45 50 29 0D 0A 48 indows; IIEP)..H
00000070 6F 73 74 3A 20 6D 65 64 69 61 2E 70 2E 73 74 61 ost: media.p.sta
00000080 74 69 63 2E 61 69 72 70 6C 61 79 6D 65 2E 63 6F tic.airplayme.co
00000090 6D 0D 0A 41 63 63 65 70 74 3A 20 2A 2F 2A 0D 0A m..Accept: */*..
000000A0 0D 0A ..
从这个包中我们获得了我们需要的文件很显然是ht t p://media.p.static.airplayme.com/media/d00a7cc8668311e0a45217d9fa59cf02.pur
于是很自然的我们下载这个文件,相当顺利,大小也正确,那么我们开打开它试试
打不开,无论是后缀改成mp3,还是wma还是flv,我们观察到它的后缀是pur,试试在百度中查找pur后缀是什么文件,也没有结果。
于是我是仔细看了airplayer的介绍:
自主开发Pure Music 纯音还原技术,精准还原音乐现场,丝毫毕现,从此告别数码音;更有人声增强技术,将在线音乐播放品质推向新的高度。
很显然这个pur后缀的文件就是官网上所说的pure music技术,我们用winhex打开这个pur文件能在开头看到PURE的字样,看来是没错了。那么这个所谓的pure music技术,到底是真正的独家编码,还是说对传统的编码做了一些小修改来防止别人离线播放呢?
为了证实这个想法,我们去找到了大小与这个pur文件相同,同一首歌的mp3版本,同时用winhex打开,可以发现文件头是完全不一样的,那么中间的编码呢?在mp3版本中任意选择一段特征码,在pur版本中搜索,发现搜不到,也就是说是真正的独家编码的可能性非常大。
可是仔细想想,这是个绿色播放器,是不可能在系统中安装解码器的,内置解码吗,总之先试试用airplay来播放试试。结果是可以播放,也就是可以大致猜测出airplay通过读图pur文件头的标志PURE来确定是pur格式,然后调用解码器来解码的
于是,我用od载入播放器,UPX壳,直接带壳调试,在内存中搜索50555245(PURE ascii)得到3处断点,下断,用AIRPLAY播放PUR文件,断在了这里
005056D5 3D 7FFE8001 cmp eax,180FE7F
005056DA 74 3C je short AIRPLAY.00505718
005056DC 3D 50555245 cmp eax,[COLOR="Red"]45525550[/COLOR]
005056E1 74 2C je short AIRPLAY.0050570F
005056E3 3D 3026B275 cmp eax,75B22630
005056E8 75 36 jnz short AIRPLAY.00505720
005056EA 8B8B 4C010000 mov ecx,dword ptr ds:[ebx+14C]
005056F0 85C9 test ecx,ecx
005056F2 74 29 je short AIRPLAY.0050571D
005056F4 B8 D08D5800 mov eax,AIRPLAY.00588DD0 ; UNICODE "WMA"
005056F9 8BF1 mov esi,ecx
005056FB E8 2FBAEFFF call AIRPLAY.0040112F
00505700 8B83 4C010000 mov eax,dword ptr ds:[ebx+14C]
00505706 C740 1C 0E00000>mov dword ptr ds:[eax+1C],0E
0050570D ^ EB B3 jmp short AIRPLAY.005056C2
0050570F C745 0C 0900000>mov dword ptr ss:[ebp+C],9
00505716 EB 08 jmp short AIRPLAY.00505720
00505718 897D 0C mov dword ptr ss:[ebp+C],edi
0050571B EB 03 jmp short AIRPLAY.00505720
红色这句就是在判断是不是pur文件,可以看到其他转跳是判断mp3,wma的特征码的
之后我花了将近3个小时的时间去逆向跟了下,发现确实无法通过简单的修改就转化成普遍能播放格式
到这里我们来总结一下,airplayer向服务器发包,下载pur文件,然后内置解码播放。并且我们不可能去逆向出这个pure music的算法,至少对我来说就不行,那么剩下的只有放弃了吗?
呵呵。有时候成功就像哥伦布所说的那样,谁能把鸡蛋立起来?没人能想得到,虽然只是那么简单的事情。让我们冷静下来好好想一想,这个算法既然是airplay公司开发的,也就是开发方应该拥有puremusic算法的编码器,换句话说公司方一定是从网上下载了音乐后,运用他们的编码器转换成pur格式的,也只能他们自己能转换出这种格式,那么~你认为他们会把原版的mp3删除吗?我认为不会,如此庞大的歌曲库,只保留一种不通用的格式是不明智的,那么你认为他们会把mp3格式的对应歌曲放哪里呢?很直接的我们想到了ht t p://media.p.static.airplayme.com/media/d00a7cc8668311e0a45217d9fa59cf02.mp3
是的,成功了,这就是我们想要的东西!