一个无损音乐下载软件的逆向


吾爱上面发现个音乐软件,可以下载好多无损歌曲,正好也想下几首歌,于是反编译过来玩玩软件界面

查了壳是.net写的,好办多了

查壳

用dnSpy反编译之后发现有些地方被加密了,试着用魔改的de4dot脱一下壳,没想到成功了

魔改的de4dot

再放到dnspy里面,发现原来加密的函数已经被解开

解密之后的模块

调试了不少时间都没有找到获取链接的点,一开始是一直在纠结wymusic函数里面的内容,一直在下断点结果没有停下来,一直以为是这里,之前开发python网易云api用的就是这个链接,所以没多想

就...很坑

上了wireshark没有抓到包,推测是https发送的,于是打算从下载的函数入手

从Form1里面找到了CommonHelper.GetAnyUrl,在进去之后发现了DES加密
des函数

再由DES函数找到了KEY和IV

key和iv

直接下断点,经过调试拿到了url的格式,用python写一个解密程序成功获取无损音乐的地址

调试太好用了(笑)

def getFLAC(mid):
    import requests
    from base64 import b64encode
    from Cryptodome.Cipher import DES
    headers = {
        "User-Agent":"Mozill/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36"
    }
    data = "wy_999_" + mid + ".flac"
    key = bytes([36, 32, 93, 156, 78, 112, 218, 32])
    iv = bytes([55, 183, 236, 79, 36, 99, 167, 56])
    generator = DES.new(key, DES.MODE_CBC, iv)
    pad = 8 - len(data) % 8
    pad_str = ""
    for _ in range(pad):
        pad_str = pad_str + chr(pad)
    result = b64encode(generator.encrypt((data + pad_str).encode()))
    return requests.get("https://114.67.65.49/api/?uid=42a8d585757a79984ad9bdc6e5d62a9b&uin=&type=url&key=" + b64encode(result).decode(),headers=headers,verify=False).text

print(getFLAC("493735012"))

文章作者: Kevin。
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kevin。 !
评论
 上一篇
使用vue搭建一个electron程序 使用vue搭建一个electron程序
折腾了两天,尝试了electron-vue和electron-forge,效果都不怎么理想,electron-vue的electron版本太老,升级坑实在是太多,electron-forge版本不知道怎么更新,最后还是选择原生的vue框架来
2020-06-12
下一篇 
算法之枚举(尺取法、前缀和、差分等) 算法之枚举(尺取法、前缀和、差分等)
时间复杂度T(n)表示法 时间复杂度是衡量程序的运行速度的量度,它在衡量的时候忽略了硬件的差异 它是一个定性描述程序运行时间的数据规模n的关系的函数,这个函数即程序执行基本操作(加减寻址赋值简单的数学函数等)的次数,记做T(n) for(
2020-05-24
  目录