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