0 加密格式
Jixun Wu edited this page 2021-12-22 16:20:40 +00:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

文件格式

文件名的格式为 曲目ID [格式].ofl曲目ID [格式].ofl_en

其中:

  • .ofl 后缀名表示未加密,.ofl_en 表示已加密。
    • 智能设备上储存的 .ofl 是一个空文件,有可能在解密时临时写出到此处。
  • 曲目 ID 与 QQ 音乐(国内版)是相同的。

加密种类

有四种,可以通过文件头判定:

  • E!01 生成 AES Key 进行解密。一次性解密,即 init() → 多次 update(data)final()
  • E!02 在 v1 基础上,更改为每 x 字节重置一次 AES 加密状态,即多次 [init()update(data)final()] 循环。
    • 感觉强度反而变弱了?但对流媒体来说更为友好,如跳转到最后一秒时不需要解密前面的数据。
    • 每次解密会处理 0x100000 (加密数据) + 0x10 AES 的 PKCS5 Padding字节的数据。
  • E!03 在 v2 基础上,在 MAGIC 后增加了一个 original size (8 bytes; big-endian) 的数据。
  • E!04 在 v3 基础上AES Key 的生成方式更改。

※ 实际上代码没有执行 update,都是简单粗暴的 init()final(data)

加密 key 可以通过一个初次启动应用时生成的 uuid 来派生出加密用的 aes key。这个值储存在应用私有目录下因此需要 root 权限来获取。

但这也同时意味着,歌曲文件很大概率是下载后本地加密的。 不排除 joox 在未来会将服务器下载的文件更改为“预”加密的状态,从而产生一个通用 key。

获取设备 UUID

请参考主条目:获取设备 UUID