You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下跨应用操纵运行中程序UI元素的技术方案问询

macOS 跨应用修改其他运行中应用UI的实现方案

在接受关闭系统完整性保护(SIP)的前提下,macOS 存在成熟的技术路径实现你提到的三类操作,覆盖公开API与私有API范围,具体方案按能力边界分类如下:

基础UI属性修改(无需关闭SIP,需辅助功能权限)

使用系统公开的无障碍(Accessibility)框架即可完成只读文本修改、禁用按钮强制启用的需求,不需要注入目标进程:

  • 核心接口为 HIServices 子框架下的 AXUIElement 系列函数,调用前需要用户在系统隐私设置中为你的应用开启辅助功能权限
  • 遍历目标应用的进程、窗口、UI元素树拿到对应元素的 AXUIElementRef 后,调用 AXUIElementSetAttributeValue 即可修改元素属性:
    • 对只读文本字段,设置 kAXValueAttribute 为目标字符串即可替换显示内容
    • 对禁用按钮,设置 kAXEnabledAttribute 为 true 即可强制解除禁用状态
  • 该方案的局限是无法向目标窗口新增原生控件,只能操作目标应用已存在的UI元素。

全能力UI修改(需关闭SIP,支持新增控件)

要实现向目标窗口新增控件的需求,必须通过代码注入让你的逻辑运行在目标进程的地址空间内,成熟路径如下:

  • 注入手段:关闭SIP后可以绕过系统对task_for_pid接口的权限限制、代码签名校验,通过mach端口注入的方式,让目标进程加载你自行编译的动态库(dylib)插件,是类SIMBL插件加载框架的通用实现逻辑
  • 进程内操作能力:注入完成后你的代码和目标应用运行在同一地址空间,可以直接调用AppKit全量接口:
    • 直接获取目标窗口的NSWindow实例、遍历整个NSView层级,无视业务侧的只读、禁用逻辑,直接修改NSTextField的stringValue属性、设置NSButton的enabled属性为YES
    • 可以直接初始化自定义的NSButton、NSTextField等控件,调用addSubview:接口挂载到目标窗口的视图层级上,完全实现新增控件的需求
  • 针对开启了强硬化运行时(Hardened Runtime)、自带反注入/反调试保护的应用,还需要额外绕过签名校验、反调试检测才能正常注入。

私有API补充方案

如果不想做代码注入,还可以使用CoreGraphics框架的未公开私有接口(CGSPrivate系列),实现跨进程的窗口覆盖绘制、UI元素劫持,但稳定性远低于进程内注入方案,仅适合做轻量的UI层叠加,不适合深度修改原生控件的交互逻辑。

提醒:关闭SIP会显著降低系统安全防护等级,这类操作仅建议在专门用于技术研究、调试的隔离环境下进行,不要在日常工作、存储敏感数据的主力系统上长期关闭SIP执行这类操作。

内容的提问来源于stack exchange,提问作者Sparkette

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 21:54:29