2025 年 5 月 23 日,作者是手机灰度模式的粉丝,此模式能减少屏幕使用时间并降低亮红色应用徽章的吸引力,但不想所有应用都灰度,曾用 Cydia 插件实现,如今越狱已基本消失。现用 Shortcuts 来设置,朋友询问如何在其手机上设置,发现 Shortcuts 没有更好的导入或编程创建自动化的方式,只能通过深度链接。
strings
工具:通过strings
命令可从编译后的应用代码中提取字符串,运行ps -axo pid,command | grep Shortcuts
找到 Shortcuts 的进程路径,再运行strings
提取可执行二进制文件中的可打印字符串,通过过滤://
可查看应用明确引用的深度链接快捷方式,如shortcuts://create-workflow?source=3d_touch
和shortcuts://gallery
。lldb
调试器:连接lldb
调试器到运行的 Shortcuts 应用,可添加断点进行调试。通过breakpoint set -n "-[NSURL scheme]"
设置断点,触发深度链接处理代码时会停在断点处,使用thread backtrace
查看堆栈。在调试过程中发现处理深度链接的代码主要在Shortcuts
和WorkflowKit
中,如-[ICManager handleIncomingRequest]
和-[_ICURLRequest parseActions]
等函数。Hopper
反汇编器:Hopper
是一款反汇编器,可将二进制代码转换为更接近源代码的形式。使用Hopper
处理 ASLR 偏移问题,通过image list -o -f | grep Shortcuts
获取应用在内存中的偏移量,在 Hopper 中修改文件基地址,可直接跳转到指定地址查看代码。在Hopper
中还可对ICManager
和WorkflowKit
进行反向工程,查看相关函数的代码和处理逻辑。- 检查块信息和设置初始化断点:通过
po
命令打印块信息,可查看块的签名和调用地址等。使用lldb
的--waitfor
参数设置初始化断点,可在应用启动时自动附加并设置断点,通过bt
命令查看堆栈跟踪,找到负责的代码。 - 结论:通过深度链接无法导入或编程创建自动化,Shortcuts 中一些与快捷方式相关的操作有一定处理逻辑,但对于创建自动化的相关操作,如
create-automation
,最终未能找到有效的处理方式。唯一的线索是在设备上的 SQLite 数据库中存储了自动化信息,对于非越狱设备,只能手动创建自动化。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。