允许用户指定密钥数据 #42

Open
opened 2023-05-07 01:23:02 +00:00 by lsr · 6 comments
Owner

文档更新:

  • 导出密钥数据库或到 JSON 文件的方法/过程

实现:

  • 设定允许用户导入 JSON 文件,或原始数据库文件(可能比较麻烦)

注意:

  • PC 端可能会容易一些
  • QQ 音乐的 Mac 端使用的是 mmkv 数据库,解析相对比较简单。
  • 安卓客户端应该需要用户取得 root 权限。文档应警告可能的后果(如失去保修)。
文档更新: - 导出密钥数据库或到 JSON 文件的方法/过程 实现: - 设定允许用户导入 JSON 文件,或原始数据库文件(可能比较麻烦) 注意: - PC 端可能会容易一些 - QQ 音乐的 Mac 端使用的是 `mmkv` 数据库,解析相对比较简单。 - 安卓客户端应该需要用户取得 root 权限。文档应警告可能的后果(如失去保修)。
lsr added the
enhancement
label 2023-05-07 01:23:02 +00:00
lsr added a new dependency 2023-05-09 00:26:32 +00:00
lsr removed a dependency 2023-05-09 00:26:37 +00:00
lsr added a new dependency 2023-05-09 00:26:51 +00:00
lsr added a new dependency 2023-05-09 00:26:55 +00:00
lsr added a new dependency 2023-05-09 00:27:00 +00:00

酷我音乐mflac:database目录里kwplayer.db里的6字节密钥应该是解密密钥,如果真是这样,该如何操作进行解密?我如何指定密钥数据?
另外最新版mg3d文件解密失效,提示文件中没有key。

酷我音乐mflac:database目录里kwplayer.db里的6字节密钥应该是解密密钥,如果真是这样,该如何操作进行解密?我如何指定密钥数据? 另外最新版mg3d文件解密失效,提示文件中没有key。
Author
Owner

酷我音乐mflac:database目录里kwplayer.db里的6字节密钥应该是解密密钥,如果真是这样,该如何操作进行解密?我如何指定密钥数据?
另外最新版mg3d文件解密失效,提示文件中没有key。

应该有上百个字符。db 文件请使用 sqlite 浏览器打开,移动端不清楚有没有工具可以浏览。

mg3d 无密钥解密其实是取巧,只有原文件是 wav 的情况下有一定概率能猜出来。别的格式应该都不行。

> 酷我音乐mflac:database目录里kwplayer.db里的6字节密钥应该是解密密钥,如果真是这样,该如何操作进行解密?我如何指定密钥数据? > 另外最新版mg3d文件解密失效,提示文件中没有key。 应该有上百个字符。db 文件请使用 sqlite 浏览器打开,移动端不清楚有没有工具可以浏览。 mg3d 无密钥解密其实是取巧,只有原文件是 wav 的情况下有一定概率能猜出来。别的格式应该都不行。

那么mg3d不是咪咕音乐更新了算法,而是秘钥猜不出来了吗?

可以提供密钥示例吗?我看QQ音乐的密钥就是六字节的

那么mg3d不是咪咕音乐更新了算法,而是秘钥猜不出来了吗? 可以提供密钥示例吗?我看QQ音乐的密钥就是六字节的
Author
Owner

那么mg3d不是咪咕音乐更新了算法,而是秘钥猜不出来了吗?

可以提供密钥示例吗?我看QQ音乐的密钥就是六字节的

mg3d 的密钥是 32 字节。是 md5 一串数据后的结果。这个过程是通过逆向其他人的闭源解密工具后得到的。

下面是当时研究的细节:

$ migu3d-decrypt-window-amd64-0.0.2.exe -d 3403 -i dump.mg3d
歌曲名字: 勇气(电视剧《侠女闯天关》片尾曲)
get fileKey FEEEDC32DA903CEE83D9C8CC8EBCBBCB
success
直接请求 migu api:
$ curl -s 'https://app.c.nf.migu.cn/MIGUM2.0/v2.0/content/querySongBySongId.do?songId=3403&contentId=0' | jq | grep -i filekey
"androidFileKey": "FEEEDC32DA903CEE83D9C8CC8EBCBBCB",
"iosFileKey": "7D097211CA8B8BB002B8BC4AFB29DA89",
真就是直接拿 androidFileKey 的值啊。

这里的解密实现利用了 wav 文件头会有很多 00 字节的特性,配合 mg3d 使用的加密特性(每 32 字节一组来处理,每组使用相同密钥)来猜测对应密钥。因此如果阶级后的文件不是 wav 格式,那就猜不到了。


qq 音乐的密钥有 500+ 字节,去除密钥的混淆后,实际有效密钥也有 300+ 字节。你用 pc 客户端随便下一个文件看文件末尾的可读字符长度就是例子了。

你截图里的可能只是某一行数据的序列化后的结果。你应该使用 SQLite 数据库浏览器查看数据而不是十六进制编辑器。

> 那么mg3d不是咪咕音乐更新了算法,而是秘钥猜不出来了吗? > > 可以提供密钥示例吗?我看QQ音乐的密钥就是六字节的 mg3d 的密钥是 32 字节。是 md5 一串数据后的结果。这个过程是通过逆向其他人的闭源解密工具后得到的。 下面是当时研究的细节: > ![]( https://git.unlock-music.dev/attachments/65737f7b-df8a-458b-9b65-401e81a0a89d) > > $ migu3d-decrypt-window-amd64-0.0.2.exe -d 3403 -i dump.mg3d > 歌曲名字: 勇气(电视剧《侠女闯天关》片尾曲) > get fileKey FEEEDC32DA903CEE83D9C8CC8EBCBBCB > success > 直接请求 migu api: > $ curl -s 'https://app.c.nf.migu.cn/MIGUM2.0/v2.0/content/querySongBySongId.do?songId=3403&contentId=0' | jq | grep -i filekey > "androidFileKey": "FEEEDC32DA903CEE83D9C8CC8EBCBBCB", > "iosFileKey": "7D097211CA8B8BB002B8BC4AFB29DA89", > 真就是直接拿 androidFileKey 的值啊。 这里的解密实现利用了 wav 文件头会有很多 00 字节的特性,配合 mg3d 使用的加密特性(每 32 字节一组来处理,每组使用相同密钥)来猜测对应密钥。因此如果阶级后的文件不是 wav 格式,那就猜不到了。 --- qq 音乐的密钥有 500+ 字节,去除密钥的混淆后,实际有效密钥也有 300+ 字节。你用 pc 客户端随便下一个文件看文件末尾的可读字符长度就是例子了。 你截图里的可能只是某一行数据的序列化后的结果。你应该使用 SQLite 数据库浏览器查看数据而不是十六进制编辑器。

该功能期待已久,现在进度如何

该功能期待已久,现在进度如何
Author
Owner

该功能期待已久,现在进度如何

没有进展,在另一个仓库实现了。

um/um-react#20

> 该功能期待已久,现在进度如何 没有进展,在另一个仓库实现了。 https://git.unlock-music.dev/um/um-react/issues/20
Sign in to join this conversation.
No Milestone
No Assignees
2 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Reference: um/web#42
No description provided.