华为音乐的歌曲无法解密 #48
Labels
No Label
bug
component-crypto
component-ui
docs
duplicate
enhancement
help wanted
invalid
misc
platform-android
platform-mac
platform-win
question
test
wontfix
No Milestone
No project
No Assignees
3 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: um/um-react#48
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
该APP下载的歌曲无法在工单里上传,麻烦您访问onedrive:https://1drv.ms/f/s!AoIYwZ1ut_KhiHwhJc4faKije8_i?e=jwH2tT
客户端为PC端,Windows11
请提供app下载地址或一并上传到网盘
华为音乐的歌曲无法破解to 华为音乐的歌曲无法解密com.android.mediacenter.playback.player类的downLoadSource(PathBean pathBean, String str)方法看,貌似分两种加密格式(AES/OFB 和 HW)
OFB的解密逻辑貌似由 Lcom/android/common/components/security/FileMediaDataSource;类下的构造方法、readAt和d方法完成,
按照ai分析的结果用py实现了一个解密脚本,但输出文件无法正常播放,但HEX看到输出文件的文件头似乎正确? 播放器可以正确获取时长,孩子太菜了实在干不动了
附件,包含使用的华为音乐app本体、HMS、测试脚本、一个加密文件
调试过程偶然发现某一方法会获取到CDN未加密文件的直链,附件对应未加密歌曲文件
能否换成不需要登录就可以下载的网盘?
例如微软的 OneDrive、Google Drive、mega.nz 等。
或直接到 tg 讨论群组上传也可。
https://1drv.ms/u/c/d979081d97ec3bf9/EUucOJn2elhAuqgmrvG7VRQBUef9Dvcn3hQNUoK1AeaFaw?e=btAGji
因为 OFB 不适合流媒体(随机快进),对比两个文件发现在 0x800 处开始不一致。盲猜是每 0x800 为一段。
试了下果然如此,每处理 0x800 字节的时候重置 AES 实例(主要是 IV)即可。
目前不清楚的是,Key/IV 是固定的,还是不同的(下载的时候预先加密,或是下载后利用用户信息的一部分加密)。
跟了大半天的 setSecretKey / getSecretKey,终于看到它会从 SQLite 数据库拿数据。
如果你不介意的话,可以将应用私有目录的这些数据库上传(不推荐,因为可能含有私人数据),或动手能力强的话,可以手动翻翻这些数据库看看哪些文件/表有这个
encrypt_iv
和secretKey
。项目需要的内容:
没有的话我应该也能从 APK 里面找到。
乐:华为把其中一个表叫做 “在线播放拉屎缓存” 💩
挨个看过没有,不过有几个打不开,貌似用了 sqlcipher 加密数据库¿databases
hook getWritableDatabase 方法发现两行神秘密钥(均为base64编码)但是电脑环境炸了没法验证((((
oVrICAyCV0hcCRAIr6WIh4yQeJEA8UxbIaa4s+l3V3U=
b1ZySUNBeUNWMGhjQ1JBSXI2V0loNHlRZUpFQThVeGJJYWE0cytsM1YzVT0K