news 2026/10/4 7:43:31

Natively如何做到“不可检测“?Stealth模式、进程伪装与屏幕共享保护的完整揭秘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Natively如何做到“不可检测“?Stealth模式、进程伪装与屏幕共享保护的完整揭秘

Natively如何做到"不可检测"?Stealth模式、进程伪装与屏幕共享保护的完整揭秘

【免费下载链接】natively-cluely-ai-assistantNatively — Free open-source AI meeting assistant, interview copilot, and note taker. The best alternative to Cluely, Otter, Granola, Final Round AI, Fireflies, and Interview Coder. Real-time transcription, AI meeting notes, lecture recording, local RAG, BYOK, and stealth mode. Runs locally. No subscriptions. No data breaches.项目地址: https://gitcode.com/gh_mirrors/na/natively-cluely-ai-assistant

Natively 是一款免费开源的AI 会议助手、面试副驾与会议记录工具(Cluely、Otter、Final Round AI 的替代方案),支持实时转录、本地 RAG 与自带密钥(BYOK),全部数据本地运行。而它最硬核的卖点,是这套经过五个大版本打磨的Stealth 隐身模式(Undetectable):隐藏 Dock 图标、伪装进程名、屏幕共享中"消失",让 AI 面试助手在标准在线笔试中不可被察觉。本文将带你完整拆解它的实现原理。🔍

一、为什么"不可检测"是面试 AI 的核心难题?

面试助手要在 Zoom、浏览器笔试平台上工作,同时不能:

  • ❌ 出现在对方的屏幕共享 / 屏幕录制里
  • ❌ 在 Dock、任务栏、活动监视器里留下可疑图标或进程名
  • ❌ 抢走前台应用的焦点,导致 Zoom 窗口被压暗(面试官一眼看穿)

Natively 的解法是一套"JS 主进程策略 + Rust 原生模块"的组合拳,核心代码都在仓库里,任何人都可以逐行审计。

二、进程伪装:把自己变成"系统工具"

2.1 静态伪装:换一个"合法"的名字

disguiseAppName.ts 定义了伪装表,进程名会按平台呈现为无害的系统工具:

伪装模式macOSWindows
terminalTerminalCommand Prompt
settingsSystem SettingsSettings
activityActivity MonitorTask Manager
noneNativelyNatively

也就是说,在任务管理器里,它可能只是一个"Command Prompt ",毫不起眼。

2.2 动态伪装:实时改写活动监视器显示名

静态重命名只影响ps层面的名字。更深层的实现在 process_name.rs:macOS 活动监视器的"进程名称"列来自 LaunchServices 的运行时可变记录(LSDisplayName),而非二进制文件名。Natively 通过私有 SPI_LSSetApplicationInformationItem在运行中改写自己的显示名——不修改任何磁盘文件、不重新签名,代码签名保持完整,伪装可以热切换。若某个 macOS 版本移除了该 API,会自动降级为静态伪装,优雅降级(graceful degradation)。

三、消失的 Dock 与任务栏

开启 Undetectable 后,macOS Dock 里一个 Natively 图标都不该留下。macDockPolicy.ts 记录了一段"血泪史":早期版本启动时 Dock 会闪现 2~4 个重复图标,根因是 Electron 的setVisibleOnAllWorkspaces会反复切换激活策略、process.title写入会重新注册前台应用。

最终方案:

  • ✅ 所有窗口族改用skipTransformProcessType,杜绝激活策略抖动
  • ✅ 主进程内建自验证强制循环(每 130ms 检查一次、最多 10 轮),对抗 Electron Dock 隐藏有 1 秒静默失效的怪癖
  • ✅ Windows 侧由 windowsFocusPolicy.ts 与任务栏策略同步隐藏任务栏按钮

四、屏幕共享保护:让对方录不到你

这是整个 Stealth 体系中工程含量最高的部分。

4.1 给窗口打上"私密"标记

capture_exclusion.rs 负责给窗口打上"请勿截屏"标记:

  • macOS:NSWindowSharingNone(setSharingType:),系统级截屏与共享都会跳过它
  • Windows:SetWindowDisplayAffinity的WDA_EXCLUDEFROMCAPTURE,Win10 2004+ 原生支持

Google Meet、Teams、QuickTime 会自动尊重这个标记,无需任何配置。

4.2 漏网之鱼:对话框、提示框、下拉菜单

原生弹窗(文件选择器、确认框、<select>弹出层)是独立的 OS 窗口,Electron 的内容保护管不到它们——实测中简历选择器曾直接出现在共享画面里。foreignWindowCaptureGuard.ts 的对策是高频"清扫"(sweep):

  • 打开对话框后每 16ms重扫一次,直到窗口消失
  • Undetectable 开启期间每 50ms全量巡检(覆盖 tooltip 等主进程不可见的窗口)
  • 应用激活瞬间立即重扫(macOS 会在激活变化时重置窗口共享状态)

4.3 源头封堵:隐身模式下直接拒绝弹出系统对话框

stealthPromptGate.ts 更直接:Undetectable 开启时,插件安装确认、局域网访问确认等系统级对话框干脆不弹,改为文字提示"请先关闭 Undetectable"。安全相关操作"宁缺毋漏"(fail closed),连检查本身抛异常都会按"开启"处理。

4.4 Zoom 的特殊设置

Zoom 是唯一例外——它是否尊重"私密窗口"标记取决于一个设置:进入Zoom → 设置 → 共享屏幕 → 高级 → 屏幕捕获模式,选择**"带窗口过滤的捕获"**(Advanced capture with window filtering)。若选了"不带窗口过滤",Zoom 会直接抓原始屏幕画面,Natively 就会暴露。⚠️

五、隐身键盘:不抢焦点也能打字

AI 面板悬浮在会议窗口上方时,最大的破绽是点击或打字会抢走 Zoom 的焦点。Natively 用双平台原生钩子解决:

  • macOS:stealth_window.rs 给面板设置becomesKeyOnlyIfNeeded,并用私有 API_setPreventsActivation:直接写 WindowServer 标记——点击面板按钮不会让 Zoom 失去键焦点,效果对标 Spotlight 级别的隐身
  • Windows:无面板概念,用WS_EX_NOACTIVATE扩展样式让窗口"永不激活";输入则靠 keyboard_hook_windows.rs 的WH_KEYBOARD_LL低级钩子截获按键,经 Rust 工作线程 → N-API → 覆盖层渲染进程注入字符,面板全程无需获得焦点

StealthKeyboardManager.ts 是这套机制的 JS 状态机,细节值得称道:

  • 快捷键(默认 Cmd/Ctrl+Shift+Space)在钩子之前被全局快捷键消费,天然互不干扰
  • Esc / 点击窗口外 / 切走应用都会毫秒级自动退出钩子,防止按键"消失"
  • macOS 10 秒、Windows 5 分钟空闲自动断开,是防止钩子卡死的最后防线
  • CJK 输入法(IME)激活时自动让位——钩子在输入法组词前截获按键会吞掉候选窗口,ImeDetector.ts 负责探测并回退到普通焦点输入

六、诚实的边界:它不是"绝对隐身"

README 的官方 FAQ 给出了清醒的定位(见 README.md):

  • 这是best-effort(尽力而为),不保证绝对不可检测——macOS 15.4+ 上 Apple 可能让新的捕获工具看到被标记的窗口,手机摄像头也永远拍得到
  • 它不设计用于绕过 Pearson VUE、ProctorU、Respondus 这类 OS 级专用监考软件
  • 适用于 LeetCode、HackerRank、CoderPad 等无专用监考的标准在线笔试

七、本地运行 = 没有服务器可泄露

Stealth 解决的是"在场隐身",而 Natively 的另一重安全是"数据不出本机":转录、会议纪要、RAG 向量库全部存在本地 SQLite,LLM 可走任意 BYOK 端点或本地 Ollama。对比 Cluely 曾曝出 8.3 万用户数据泄露事故,本地化架构意味着没有服务器可被攻破。

八、延伸阅读:源码导航清单

模块路径职责
进程名伪装表disguiseAppName.ts平台化伪装名定义
活动监视器实时改名process_name.rsLaunchServices SPI 改写
Dock 隐藏策略macDockPolicy.ts防重复图标 + 自验证循环
截屏排除capture_exclusion.rs原生窗口共享标记
外部窗口巡检foreignWindowCaptureGuard.ts16ms/50ms 清扫
系统弹窗封堵stealthPromptGate.tsUndetectable 下拒绝弹窗
macOS 窗口隐身stealth_window.rs不抢焦点的 NSPanel 属性
键盘钩子状态机StealthKeyboardManager.ts钩子生命周期与安全退出

结语

Natively 的"不可检测"不是一句口号,而是一套可审计的工程体系:进程伪装解决"你是谁",Dock 策略解决"你在不在",截屏排除解决"别人看不看得到",键盘钩子解决"你怎么输入"。四个维度全部开源可查——这本身就是它对"隐私优先"最有说服力的证明。🛡️ 如果你想深入了解各模式配置,可继续阅读 README.md 的 Stealth 章节与 CLAUDE.md 的架构说明。

【免费下载链接】natively-cluely-ai-assistantNatively — Free open-source AI meeting assistant, interview copilot, and note taker. The best alternative to Cluely, Otter, Granola, Final Round AI, Fireflies, and Interview Coder. Real-time transcription, AI meeting notes, lecture recording, local RAG, BYOK, and stealth mode. Runs locally. No subscriptions. No data breaches.项目地址: https://gitcode.com/gh_mirrors/na/natively-cluely-ai-assistant

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/4 7:42:00

MatCont非线性动力学分岔分析实操:从Brusselator模型到延续算法

1. 为什么非线性方程组分析绕不开MatCont&#xff1a;从手算极限到数值延续1.1 教科书方法在真实模型前的溃败刚接触非线性动力学的人&#xff0c;几乎都是从Lorenz系统、Duffing方程或者Van der Pol振子入门的。教科书里教的套路也很清晰&#xff1a;先求平衡点&#xff0c;再…

作者头像 李华
网站建设 2026/10/4 7:41:08

麒麟服务器v10常见问题排查与修复实践:网络、时间、软件生态全覆盖

简介&#xff1a;面向服务器运维与系统管理员&#xff0c;围绕银河麒麟高级服务器操作系统 V10 的日常维护场景&#xff0c;整理成册的常见问题速查手册。文档以解决方案和问题处理两大模块组织&#xff0c;涵盖本地 yum 源搭建、ftp/nfs/iscsi 服务配置、时间同步、kvm 安装、…

作者头像 李华
网站建设 2026/10/4 7:39:35

GFPGAN人脸修复实战:从环境配置到视频批量增强

简介&#xff1a;这是一套基于Python实现的GFPGAN人脸美颜与清晰度增强开源项目&#xff0c;面向图像/视频处理开发者、AI视觉方向学习者及内容创作者&#xff0c;解决人脸图像与短视频的自动化美化与画质提升需求。资源共60个文件&#xff0c;含29个核心Python脚本&#xff08…

作者头像 李华
网站建设 2026/10/4 7:39:28

GPT Images 2.5 热门玩法大全:Sketch、GIF、游戏立绘提示词与实操指南

1. 先搞清楚 GPT Images 2.5 到底强在哪GPT Images 2.5 这波更新&#xff0c;我第一时间就上手试了。说实话&#xff0c;从 2.0 到 2.5 的跨度比很多人想象的要大——它不只是“画得更精细”这么简单&#xff0c;而是在语义理解深度、风格一致性、多轮编辑能力这三个维度上有了…

作者头像 李华
网站建设 2026/10/4 7:38:49

基于Python与HTML的主机安全态势感知系统实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华