返回上一层
幕后 · Behind the Scenes

Tons of reverse engineering.

海量、扎实的逆向工程

LyricsBlossom 的还原度并非靠肉眼比对或反复试错。它建立在对 iPadOS 16.4 Apple Music 的真实逆向工程之上 —— 反汇编、动态插桩、真机调试与运行时分析,把每一处动画曲线、间距、颜色与时序都从原生二进制里逐一还原出来。

IDA Pro 中对 Apple Music MusicApplication 二进制的反汇编分析
在 IDA Pro 中逐函数分析 MusicApplication 二进制 —— 定位同步歌词视图控制器的每一个符号与调用。

还原,是一项工程,而非临摹。 下面是这项工作的一部分真实记录。

01

数百个 dump 脚本与 Frida hook

从 dyld 共享缓存中抽取二进制,批量导出伪代码与方法签名,dump metallib 着色器,再用成组的 Python 脚本梳理符号、参数与调用关系。配合 Frida 脚本在运行时 hook 关键函数,把私有结构体与参数原样打印出来。

  • dyld 共享缓存抽取与伪代码批量导出
  • metallib 着色器 dump 与渲染管线还原
  • Frida hook:动画、间距、进度、模糊等关键路径
用于 dump 与 hook 的成组 Python 与 Frida 脚本
成组的 dump / hook 脚本:dump_metallib、export_rendering、frida-gaussian-blur-kill、hook_progress 等。
逆向整理后的工程目录与 Swift 译文
逆向整理后的工程结构:渲染、同步歌词视图、歌词数据等模块,逐一翻译为可读的 Swift。
02

真实 iPad 真机动态调试

在一台越狱的真机 iPad(iPadOS 16.4)上运行原生 Apple Music,进入歌词界面实时调试。直接在真实设备上选中、测量、对照每一行歌词的位置与状态 —— 这是任何静态截图都无法替代的第一手依据。

越狱 iPad 上运行的原生 Apple Music 歌词界面,叠加调试测量框
真机上的原生逐词歌词界面,叠加调试框实时测量选中行的坐标与边界。
03

运行时对象分析

借助 FLEX 在运行时深入视图层级,逐个查看 SyncedLyricsLineView 等私有视图的真实属性 —— frame、bounds、transform、背景色、图层结构。所见即所得的精确数值,直接成为还原的标准答案。

FLEX 检查 UIView 图层数组
FLEX 逐层展开视图层级,读取每一个图层的真实结构。
FLEX 检查 SyncedLyricsLineView FrameView 的属性
直接读取 SyncedLyricsLineView 的 frame、transform、backgroundColor 等真实属性值。

致谢工具链

这项工作离不开越狱、调试与动态分析社区的开源工具。

Dopamine 越狱工具界面

IDA Pro

静态反汇编与反编译 —— 逐函数分析二进制,还原符号、调用关系与伪代码。

Frida

动态插桩与 hook —— 在运行中捕获函数参数与私有结构。

FLEX

运行时视图与对象分析 —— 实时读取私有视图的真实属性。

Dopamine

提供 iOS 15.0 – 16.5.1 的越狱环境,让真机调试成为可能。

CLion

LyricsBlossom 的开发环境 —— 跨平台 C/C++ IDE,承载工程的构建与调试。

部分逆向成果,公开分享

下面是从 iPadOS 16.4 Apple Music 逆向得到的一部分真实代码:完整的同步歌词参数表,以及 Apple 自身的歌词解析逻辑。翻译整理为可读 Swift,供研究参考。

SyncedLyricsViewController.Specs

同步歌词 UI 的全部可配置参数:布局、字体、颜色、动画时序与弹簧物理 —— 含 iPhone / iPad / Stage Manager 三套预设的真实数值。这是「逐词歌词为何如此还原」的核心依据。

Lyrics — Apple 的歌词解析逻辑

Apple Music 解析其服务端下发的 TTML 格式歌词、构建内部歌词模型的完整流程:行字典构建、逐音节解析、背景和声处理、RTL 方向判定,以及底层的 COW 数组与哈希表实现。

以上代码的反编译、调试、翻译与著作编写权均归 Eplor 所有,为 LyricsBlossom 项目打造。仅供研究与参考,请勿用于商业用途。

附:MusicFreeBlur — 去除 Apple Music 背景模糊

由 Eplor 编写的运行时小工具,去除 macOS 26.4 及以上 Apple Music「正在播放」界面的背景模糊。它以注入 dylib 的方式工作,在运行时 hook Metal Performance Shaders 的高斯模糊(MPSImageGaussianBlur),把模糊半径 sigma 强制归零 —— 保留流动的动态背景,只去掉那层糊化,不修改应用本体。

patch 后的 Apple Music 正在播放界面,背景模糊已移除
patch 后的 Apple Music「正在播放」界面:动态背景清晰可见,模糊层已被移除。

使用方法

用 lldb 把 dylib 注入正在运行的 Apple Music 进程即可立即生效。注入后在 lldb 中输入 c(continue)让 Music 继续运行;如需让其继续运行并退出调试器,输入 detach。

lldb
# 1 · attach to Apple Music, then inject the patch
sudo lldb -p $(pgrep -x Music)
(lldb) expression --timeout 0 -- (void*)dlopen("/path/to/MusicFreeBlur.dylib", 2)

# 2 · resume — Apple Music keeps running, blur removed
(lldb) c
⬇ 下载 MusicFreeBlur.dylib(arm64e · 51 KB)

需要能够附加调试器(sudo)。从网络下载的 dylib 可能被 Gatekeeper 隔离,注入前可先执行 xattr -dr com.apple.quarantine /path/to/MusicFreeBlur.dylib。本工具由 Eplor 创建,仅供学习研究,使用风险自负。