diff --git a/加密格式.md b/加密格式.md new file mode 100644 index 0000000..c0500a3 --- /dev/null +++ b/加密格式.md @@ -0,0 +1,31 @@ +有四种,可以通过文件头判定: + +- `E!01` 生成 AES Key 进行解密。一次性解密,即 init → 多次 update → final。 +- `E!02` 在 v1 基础上,更改为每 x 字节重置一次 AES 加密状态,即多次 [init → update → final] 循环。 + 感觉强度反而变弱了?但对流媒体来说更为友好,如跳转到最后一秒时不需要解密前面的数据。 +- `E!03` 在 v2 基础上,在 MAGIC 后增加了一个 original size (8 bytes; big-endian) 的数据。 +- `E!04` 在 v3 基础上,AES Key 的生成方式更改。 + +※ 实际上代码没有执行 `update`,都是简单粗暴的 init → final。 + +加密 key 可以通过一个初次启动应用时生成的 uuid 来派生出加密用的 aes key。这个值储存在应用私有目录下,因此需要 root 权限来获取。 + +但这也同时意味着,歌曲文件很大概率是下载后本地加密的。 +不排除 joox 在未来会将服务器下载的文件更改为“预”加密的状态,从而产生一个通用 key。 + +--- + +在 root 后的设备进入终端,可以键入下述内容获得设备 uuid: + +``` +grep -aoE "OPENUDID2[^0-9a-f]*([0-9a-f]{32})" /data/data/com.tencent.ibg.joox/files/mmkv/globalconfig | tail -c 32 +``` + +会得到一个 32 位字符的设备 uuid。 + +![image](https://user-images.githubusercontent.com/5713045/146625124-47bd63ec-9c23-494d-aca9-0adeed53cb73.png) + +※ 注意事项 + +- 请不要公开设备 uuid,因为 joox 会上报当前设备信息。 +- root 设备有一定概率产生不可预知的问题(如应用不兼容、失去厂家保修)。建议使用已淘汰的设备进行操作。