[PC] 喜马拉雅 xm 格式支援 #41

Open
opened 2023-05-07 01:10:37 +00:00 by jixunmoe · 5 comments
Owner

相关 issue:

  • #26 - 希望支持喜马拉雅FMWindows端的xm文件和QQ音乐臻品母带mflac2的解密支持
  • #37 - 请求添加对喜马拉雅加密格式.xm的支持

参考资料:

缺少的算法内容:

  • awesome (go native) (现 rust/wasm) 的解密实现。
相关 issue: - #26 - 希望支持喜马拉雅FMWindows端的xm文件和QQ音乐臻品母带mflac2的解密支持 - #37 - 请求添加对喜马拉雅加密格式.xm的支持 参考资料: - [喜马拉雅 xm 文件解密逆向分析 [Electron]](https://www.aynakeya.com/2023/03/15/ctf/xi-ma-la-ya-xm-wen-jian-jie-mi-ni-xiang-fen-xi/) ([存档](https://web.archive.org/web/20230507011337/https://www.aynakeya.com/2023/03/16/ctf/xi-ma-la-ya-xm-wen-jian-jie-mi-ni-xiang-fen-xi/)) 缺少的算法内容: - `awesome (go native)` (现 `rust/wasm`) 的解密实现。
jixunmoe added the
enhancement
label 2023-05-07 01:10:37 +00:00
jixunmoe changed title from 喜马拉雅 PC 端支援 to [PC] 喜马拉雅 xm 格式支援 2023-05-07 01:19:33 +00:00
jixunmoe added
crypto
platform-win
and removed
enhancement
labels 2023-05-07 01:53:59 +00:00

讲道理wasm那部分加密我好像之前逆向出来了,一直没来的及写博客...被实习压胯了

等会看看之前的repo

讲道理wasm那部分加密我好像之前逆向出来了,一直没来的及写博客...被实习压胯了 等会看看之前的repo

follow up 一下。没有完全逆向出来。

现在是搞明白xm_encrypt了,传入的trackId是key。然后数据就是数据,用aes-192-cbc加密。返回base64的数据。这串数据的前16byte就是加密用的iv。

解密也是一样,传入一个base64的数据,前16byte是iv,后面都是数据。 但是问题在于,用aes-192-cbc解密加密的数据之后,加密前数据的前16byte消失了。但这个16byte不重要,因为是m4a的header固定值可以手动补齐。

目前最严重的问题就是作为key传入的trackId不到24byte。那缺的那些值怎么补齐的我还搞不明白。

follow up 一下。没有完全逆向出来。 现在是搞明白xm_encrypt了,传入的trackId是key。然后数据就是数据,用aes-192-cbc加密。返回base64的数据。这串数据的前16byte就是加密用的iv。 解密也是一样,传入一个base64的数据,前16byte是iv,后面都是数据。 但是问题在于,用aes-192-cbc解密加密的数据之后,加密前数据的前16byte消失了。但这个16byte不重要,因为是m4a的header固定值可以手动补齐。 目前最严重的问题就是作为key传入的trackId不到24byte。那缺的那些值怎么补齐的我还搞不明白。
Author
Owner

follow up 一下。没有完全逆向出来。

现在是搞明白xm_encrypt了,传入的trackId是key。然后数据就是数据,用aes-192-cbc加密。返回base64的数据。这串数据的前16byte就是加密用的iv。

解密也是一样,传入一个base64的数据,前16byte是iv,后面都是数据。 但是问题在于,用aes-192-cbc解密加密的数据之后,加密前数据的前16byte消失了。但这个16byte不重要,因为是m4a的header固定值可以手动补齐。

不是固定值,不过你的博客不是已经分析出来了吗。只是变量名称是奇怪的 encoding_technology 而不是 m4a_header

目前最严重的问题就是作为key传入的trackId不到24byte。那缺的那些值怎么补齐的我还搞不明白。

固定内容填充,你可以跟踪内存。

Hint:

你可以找旧 xmly pc 版本,有原生 awesome.dll / awesome.dylib 可以写 ffi 调用来调试。

> follow up 一下。没有完全逆向出来。 > > 现在是搞明白xm_encrypt了,传入的trackId是key。然后数据就是数据,用aes-192-cbc加密。返回base64的数据。这串数据的前16byte就是加密用的iv。 > > 解密也是一样,传入一个base64的数据,前16byte是iv,后面都是数据。 但是问题在于,用aes-192-cbc解密加密的数据之后,加密前数据的前16byte消失了。但这个16byte不重要,因为是m4a的header固定值可以手动补齐。 不是固定值,不过你的博客不是已经分析出来了吗。只是变量名称是奇怪的 `encoding_technology` 而不是 `m4a_header`。 > 目前最严重的问题就是作为key传入的trackId不到24byte。那缺的那些值怎么补齐的我还搞不明白。 固定内容填充,你可以跟踪内存。 Hint: 你可以找旧 xmly pc 版本,有原生 `awesome.dll` / `awesome.dylib` 可以写 ffi 调用来调试。

follow up 一下。没有完全逆向出来。

现在是搞明白xm_encrypt了,传入的trackId是key。然后数据就是数据,用aes-192-cbc加密。返回base64的数据。这串数据的前16byte就是加密用的iv。

解密也是一样,传入一个base64的数据,前16byte是iv,后面都是数据。 但是问题在于,用aes-192-cbc解密加密的数据之后,加密前数据的前16byte消失了。但这个16byte不重要,因为是m4a的header固定值可以手动补齐。

不是固定值,不过你的博客不是已经分析出来了吗。只是变量名称是奇怪的 encoding_technology 而不是 m4a_header

目前最严重的问题就是作为key传入的trackId不到24byte。那缺的那些值怎么补齐的我还搞不明白。

固定内容填充,你可以跟踪内存。

Hint:

你可以找旧 xmly pc 版本,有原生 awesome.dll / awesome.dylib 可以写 ffi 调用来调试。

不是那个encoding_technology.。一共有三次解密,这个是第三次的了。我这边指的是第二步web assembly里的解密。

> > follow up 一下。没有完全逆向出来。 > > > > 现在是搞明白xm_encrypt了,传入的trackId是key。然后数据就是数据,用aes-192-cbc加密。返回base64的数据。这串数据的前16byte就是加密用的iv。 > > > > 解密也是一样,传入一个base64的数据,前16byte是iv,后面都是数据。 但是问题在于,用aes-192-cbc解密加密的数据之后,加密前数据的前16byte消失了。但这个16byte不重要,因为是m4a的header固定值可以手动补齐。 > > 不是固定值,不过你的博客不是已经分析出来了吗。只是变量名称是奇怪的 `encoding_technology` 而不是 `m4a_header`。 > > > 目前最严重的问题就是作为key传入的trackId不到24byte。那缺的那些值怎么补齐的我还搞不明白。 > > 固定内容填充,你可以跟踪内存。 > > Hint: > > 你可以找旧 xmly pc 版本,有原生 `awesome.dll` / `awesome.dylib` 可以写 ffi 调用来调试。 > 不是那个encoding_technology.。一共有三次解密,这个是第三次的了。我这边指的是第二步web assembly里的解密。

逆向好了,忘记cbc第一个block就是下一个iv了。脑子抽了。不过好歹对了。

逆向好了,忘记cbc第一个block就是下一个iv了。脑子抽了。不过好歹对了。
Sign in to join this conversation.
No Milestone
No project
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.

Dependencies

No dependencies set.

Reference: um/web#41
No description provided.