• Carolus

    以Claude Desktop 2.19675.0.0为例

    一.a出什么时候会扒一遍你的数据

    主要入口是一个```
    logEvent(事件名, 事件专属字段, 可选参数)

    
    包括但不限于:
    
    类型 |
    触发条件或实例 |
    
    启动和登录 |
    初始激活、启动时登录状态检查、登录回调、登录失败、账号切换 |
    
    窗口和页面 |
    主界面加载失败、HTTP 错误、失败后恢复、重试耗尽、无响应、渲染进程退出 |
    
    用户操作 |
    打开快捷输入、提交快捷输入、点击启动按钮、通知交互、部分预览和文件操作 |
    
    更新 |
    开始检查、发现更新、下载完成、安装、更新错误、回滚 |
    
    Code/Cowork |
    CLI 安装和准备、会话相关操作、工具或插件状态、VM 状态 |
    
    SSH |
    连接成功或失败、跳过后台连接、断开、重连尝试、重连成功、需要用户认证、唤醒探测 |
    
    性能和后台诊断 |
    内存采样、内存越过阈值、事件循环卡顿、GPU 状态或进程退出 |
    
    配置和策略 |
    管理配置检测、配置读取失败、权限或策略决策 |
    
    功能实验 |
    使用某项功能开关、命中实验及其分组 |
    
    退出 |
    退出清理超时、看门狗触发,以及下次启动时报告上次退出清理摘要 |
    
    **二. 具体会采集你的哪些信息**
    
    一个事件的大致结构如下:```
    {
      "events": [
        {
          "event_type": "TelemetryEvent",
          "event_data": {
            "event_name": "desktop_ssh_connected",
            "timestamp": "事件构建时的 UTC 时间",
            "user_properties": {
              "user_id": "账号 UUID,无法取得时为 anonymous"
            },
            "metadata": "经过过滤后的元数据 JSON 字符串",
            "auth": {
              "organization_uuid": "组织 UUID,存在才加入",
              "account_uuid": "账号 UUID,存在才加入"
            }
          }
        }
      ]
    }
    ```以及在每个普通事件中都会尝试采集以下公共字段(仅列出可能被a出用于构建用户画像的信息,除此之外还有很多通用信息),受过滤和序列化影响,不一定每次都全部上传
    
    **1.你的项目目录、Git 仓库、SSH 主机**
    
    字段 |
    本地读取的原始信息 |
    进入事件的形式 |
    
    folder_hash |
    规范化后的工作目录;远程场景包含远程主机键与目录 |
    哈希 |
    
    host_hash |
    SSH 主机与端口组成的键,或 WSL 发行版标识 |
    哈希 |
    
    repo_hash |
    Git origin 解析出的主机、owner、仓库名 |
    哈希 |
    
    is_git_repo |
    工作目录是否处于 Git 仓库中 |
    布尔值 |
    
    实际算法是:```
    SHA-256(
     本地随机盐 + NUL +
     身份字符串 + NUL +
     待标识对象
    )
    //取十六进制结果前 16 位
    ```**2.GPU、显示器和运行环境**
    
    信息 |
    普通事件里的形式 |
    
    GPU 厂商 |
    已知厂商类别,无法识别时归为 other/unknown |
    
    GPU 数量 |
    有上限的数量 |
    
    硬件加速设置 |
    设置状态 |
    
    GPU 合成/光栅化 |
    功能状态 |
    
    GPU 重启 |
    次数、距上次重启时间 |
    
    显示器数量 |
    有上限的数量 |
    
    刷新率 |
    le60、61_100、101_144、gt144 等档位 |
    
    多显示器刷新率是否不同 |
    布尔值 |
    
    缩放比例 |
    1、1_to_2、2、gt2 等档位 |
    
    **3.IP、MAC、网卡与 VPN**
    
    信息 |
    读取与用途 |
    目前找到的去向 |
    
    网卡名称、地址族、本地 IP、MAC |
    SSH 控制器通过 networkInterfaces() 读取,检测网络接口变化 |
    本地比较、触发 SSH 探测/重连;未在该路径证明原始地址上传 |
    
    VPN 接口名 |
    macOS 调用 ifconfig,匹配 utun、ppp、ipsec、tun |
    VM 启动失败诊断 |
    
    已连接 VPN 的名称 |
    macOS 调用 scutil --nc list |
    本地诊断日志;也进入失败事件的过滤流程 |
    
    网桥/虚拟网卡名 |
    macOS 调用 ifconfig -a |
    同上 |
    
    VPN 是否处于连接状态 |
    根据诊断结果计算 |
    vpn_active |
    
    可用磁盘空间 |
    VM 故障诊断辅助函数 |
    available_disk_space_bytes |
    
    **4.设备注册、公钥、硬件保护状态:**
    
    发现了独立的 `DeviceRegistry`:
    
    - 以账号上下文获取设备密钥后端。
    
    - 读取/导出公钥 `publicKeySpkiB64`。
    
    - 返回 `isHardwareBacked`,表示是否由硬件保护。
    
    - 调用原生模块对认证数据签名。
    
    - 支持会话、对话、项目等绑定相关签名接口。
    
    - 本地 `ant-device-registry.json` 缓存注册记录的标识。
    
    - 签名数据包含注册记录标识、时间以及相应绑定上下文。
    
    5.使用行为
    
    包括:
    
    - 何时启动、登录、切换账号、退出。
    
    - 何时初始化会话,使用哪个模型、权限模式、推理设置。
    
    - 使用本地、SSH、WSL 等哪一种后端。
    
    - 是否使用 Git、worktree、临时工作目录。
    
    - MCP 服务器数量、插件与工具相关状态。
    
    - 是否使用计划任务、远程控制、预热、侧边会话等功能。
    
    - SSH 连接次数、持续时间、重连、失败、等待用户认证等状态。
    
    - 某些审批或提示的允许、拒绝、取消结果。
    
    - 崩溃、卡顿和内存压力。
    
    例如 `desktop_ccd_session_initialized` 将会话 ID、消息 UUID、模型、权限模式、后端、MCP 数量及上述目录/仓库哈希放入同一事件
    
    6.系统用户名、邮箱、语言与时区
    
    信息 |
    确认的路径 |
    限制 |
    
    系统用户名 |
    os.userInfo().username;可用于 OTLP 的 process.owner |
    可选 OTLP 路径,不能说默认发给 Anthropic |
    
    邮箱/UPN/名称 |
    部署身份对象;可用于 OTLP 的 enduser.id |
    取决于身份与导出配置 |
    
    系统语言 |
    Electron 语言 API |
    用于界面语言选择,也进入支持诊断信息 |
    
    时区、locale |
    Sentry 上下文采集代码 |
    最终报告还要经过过滤与发送条件 |
    
    用户主目录、Windows 用户资料路径 |
    路径处理与脱敏代码也会读取 |
    读取用户名可能正是为了在日志里替换它,不能反推为上传 |
    
    **三.扒完你之后什么时候上传**
    
    启动 Claude时以及在桌面 Code 页面启动一个会话时,会触发一次
    
    其余主要依赖事件队列机制,每次刷新就上传:
    
    条件 |
    何时发生 |
    
    定时器到期 |
    有事件入队且尚无计时器时,安排一次延迟刷新 |
    
    队列达到 50 条 |
    提前刷新,不再等当前延迟结束 |
    
    正常退出 |
    退出清理处理器尝试刷新剩余队列 |
    
    特定诊断代码主动刷新 |
    例如主界面无响应或渲染进程退出后的处理 |
    
    定时等待算法是:```
    等待时间 = 基准(默认60s)间隔 ×(0.5 + 随机数)
    ```发送到```
    https://claude.ai/api/event_logging/v2/batch
    ```**综上,我觉得对于被封过号然后用同一台机器换号使用的用户,a出是很容易把你和之前的账号关联起来的,封不封你纯看心情以及你的数据对a出的价值**
    
    **ps:其实上文中很多东西codex也采集,希望奥特曼叔叔当个好人**
    主楼
  • Carolus

    可以让别的agent根据信息帮忙伪造一下相关字段 ^-^大概率需要破甲

    #1
  • taohe

    这些是怎么判定出来的佬?

    #2
  • Carolus

    让astra扒claude的代码

    btw,居然不用破甲就能干,只能说天下苦a出久矣

    #3
  • hero

    被连带也是看概率的,我朋友在他们工作室是专门负责开通Claude的,他跟我说他们工作室十来个人,有的人账号是一直被连带,有的人怎么都没事,好玄学。

    #4
  • Carolus

    不知道后端怎么写的,我猜可能你的数据比较有价值(比如前沿研究或者小众领域)a出的容忍度就会高一些

    #5

发表回复

登录后回复