简单逆向一款网易云音乐歌词下载器

发表于 计算机安全, 软件安全 2017-05-17 阅读数: 107

先简单介绍这个下载器的功能,首先得到某首歌曲的ID,然后输入ID,即可得到歌词然后可以进行保存操作能够显示歌曲名和歌手信息。保存文件时默认保存文件名为“歌曲名 - 歌手”的格式。并且为外文歌词增加了双语歌词。

逆向 网易云音乐下载器 逆向 网易云音乐下载器

那么怎么获取歌曲ID呢?右键你的歌曲,复制链接到任意一个地方就可以看到有id = xxx 这样的后缀了,这个后缀就是ID。如图:

逆向 网易云音乐下载器

粘贴后是:http://music.163.com/#/m/song?id=717724717724就是这首歌曲的ID

我比较好奇的是它调用了什么API可以实现这样的功能,于是进行一下逆向。首先查壳。

逆向 网易云音乐下载器

没有壳,但是很可能是.net程序,用OD载入,程序自动运行,由此可知其一定是.net程序。

.net程序是有神器可以反汇编的,接下来我们就用dnSpy对其进行反汇编。

逆向 网易云音乐下载器

打开程序的APP资源后整个程序代码一览无余。很容易就发现URL的位置。

显然它调用了这个API:http://music.163.com/api/song/lyric?os=pc&id=“歌曲ID”&lv=-1&kv=-1&tv=-1得到了大部分歌曲的信息,如图:

逆向 网易云音乐下载器

我们还可以注意到下面有个url2: http://music.163.com/api/song/detail/?id=歌曲ID&ids=歌曲ID , 这个API是干嘛的呢?他将url2给了httpHelper()这个函数然后又将函数返回的值给了getInfo(),那这两个函数的功能是什么?

逆向 网易云音乐下载器

看起来是得到了这个接口的response,我们看看接下来它传入的函数:

逆向 网易云音乐下载器

这是个void函数,进行了两个关键操作:

this.song = array2[0];

this.singer = array2[1];

看来作者调用这个接口只是为了得到歌曲名字和歌手。这张图下面的函数sortLyric,是作者为了格式化歌词所写的代码。

代码思路很清晰,学习完后或许以后我有时间可以利用它做一个下载歌词的网站。若您需要这款软件,稍后我会把它放到极致分享上(alltoshare.com).感谢原作者,本教程仅供学习。

欢迎关注微信公众号:幻象客https://www.huanxiangke.com

欢迎进入极致分享:https://alltoshare.com

幻象客 二维码

Add comment