Binance 63 亿美元被盗:20 分钟清空钱包
提前 36 小时彩排
10 月 29 日下午 4 点左右(美东时间),黑客开始从 Binance 钱包转走约 63 亿美元加密货币。链上追踪公司 TRM Labs 的分析显示,大部分盗取发生在约 20 分钟内,钱包被清空后转入攻击者控制的多个地址。资金分布在至少十条区块链上,包括 Ethereum、Bitcoin、Tron 和 Solana。
TRM Labs 说准备至少提前 36 小时开始。攻击者先在两个钱包上测试第一段代码,当天晚些时候在第三个钱包彩排最终版本,把测试资金转回自己,四小时后再把同一套代码装到 Binance 的热钱包(联网处理客户提款的钱包)上。Binance 几乎立即暂停所有存取款,承诺覆盖全部损失,并称这是一次复杂攻击。
朝鲜嫌疑人,44% 被冻结
三家链上分析公司很快把矛头指向朝鲜黑客组织 TraderTraitor。Elliptic 联合创始人 Tom Robinson 说:“我们认为朝鲜很可能负责。如果真是朝鲜,这一次盗窃几乎会让该政权迄今盗取的所有加密货币翻倍。”Chainalysis 提到最强证据是调查人员看到 Binance 被盗资金与上月 Bitget 漏洞中归因于朝鲜行为者的资金混在一起。
Elliptic 估计约 28 亿美元、占总被盗金额约 44% 已被冻结,几乎全是稳定币(价格锚定美元等法币的加密货币)。剩下的约 33 亿美元主要是比特币、以太坊和 XRP,“没人能冻结”,只能在资金进入交易所时拦截。Chainalysis 说看到“以前没见过的洗钱模式”,数千笔交易快速处理,像是自动化在模糊资金轨迹。
评论区的老问题
HN 上的讨论从事件本身迅速转向加密货币的价值争议。一位自称 17 年加密货币支持者的用户 jjallen 说,是时候认真讨论这件事了。它让一些人把储蓄放在独裁国家够不到的地方,也资助了对自己人民做坏事的独裁者。
反对的声音更直接。codegeek 说除了诈骗和暴富项目,他一直没看懂加密货币的意义。fabioborellini 认为去中心化模式从未吸引大众,实际确立的用途就是洗钱和投资诈骗。支持者 EGreg 辩解说重点是不让任何单一地方掌握所有钱和投票权,智能合约(自动执行的链上代码)的意义是代码可信。ebertucc 反问:这次事件不正好说明不可变的智能合约恰恰是可信金融系统不想要的东西吗?
关于 20 分钟这个数字,评论区的判断比较一致:执行快不代表准备少。dboreham 认为这几乎肯定是内部作案,因为需要非常了解 Binance 系统。安全工程方面,toomuchtodo 说如果攻击者准备充分且能在几分钟内得手,防守方需要临时打补丁时已经输了。saalweachter 认为良好的工程实践仍有机会:减少攻击面、限制访问、取消超级用户。
Scribd 确认数据泄露:邮箱、卡后四位与支付历史
第三方代发的通知
Scribd 正在向用户发送安全事件通知。母公司 Scribd, Inc. 旗下有 Scribd、Slideshare、Everand 和 Fable,通知由第三方 Epiq 代为发送。邮件称,未经授权的第三方可能访问了用户数据,包括邮箱地址、信用卡后四位、国家、发卡机构、信用卡有效期和支付历史,但不包含完整卡号。
Scribd 表示没有证据表明数据已被滥用,通知是出于谨慎。公司已保护受影响系统、终止未授权访问,通知了执法部门和数据保护机构,并聘请第三方安全公司加强访问控制和监控。
13 年后的同一条旧闻
HN 用户 x______________ 发帖说,周一收到邮件时没看到任何地方有相关报道。评论区有人翻出 2013 年的旧事:Scribd 当年也发生过入侵,泄露了用户名、邮箱和加密密码,官方声明称支付和销售数据未受影响,并承诺实施多项额外防护措施。
通知的发送节奏也受到批评。有用户 10 月 30 日才收到邮件,而 Scribd 博客 10 月 1 日就发布了安全事件说明。官方 FAQ 的解释是“分阶段向受影响个人发送通知”,但没有说明为什么分批。用户想注销受影响的信用卡时,仍然只能拨打通知里的热线。
技术讨论与疲惫情绪
社区对 Scribd 本身普遍没有好感。多位用户提到它的商业模式:抓取公开的 PDF,等原始链接失效后再向访问者收费;上传者得不到报酬;有人被“上传一份 PDF 才能下载”的承诺吸引,上传后却发现想下载的文件不符合条件。用户 jacquesm 说,他为信息被窃取的人感到难过,但对 Scribd 本身不同情。
技术讨论集中在两个方向。一是加密存储的边界:静态加密只能防止磁盘被拔走后直接读取;如果应用在线服务且被攻破,应用服务器必须能读到明文。二是虚拟卡:用 Privacy.com 之类服务生成一次性或锁定商户的卡号,可以避免真实卡号泄露,但这条建议对美国用户更可行。
AI 在漏洞发现中的角色引发争论。一种观点认为 AI 没有制造漏洞,只是发现漏洞的工具。另一种观点认为过去一年半漏洞增多与 AI 生成代码有关,开发者不再熟悉自己的代码库。用户 lelanthran 引用了 Kernighan 定律,认为人类作者加 AI 审查、完全不写 AI 代码的组合 bug 率最低。
一个分享链接就能接管 ChatGPT 账户
两个正常功能拼出的链路
安全研究团队 Parameter 在 2026 年 10 月找到了一种接管任意 ChatGPT 账户的方法:把恶意内容放进一个普通的公开分享对话,把链接发给目标用户,等对方打开链接,代码就以 chatgpt.com 的身份在受害者的登录会话里运行。
整条链路从两个单独看都没问题的功能开始。ChatGPT 的 Preview 会把 HTML 代码块渲染成一个能跑 JavaScript 的小网页,但放在独立域名的沙箱 iframe 里,读不到主页面。对话里的交互图表会在后台加载 MathLive 数学公式库,加载过程也会在主 ChatGPT 页面注册一个监听器,用来接收屏幕键盘相关的 postMessage。
问题出在 MathLive 的监听器:它的 origin policy 设为 none,不检查消息来源。沙箱里的 Preview 正好可以当发送方,它没法直接进入主页面,但可以往信箱里投递。Preview 发出两条消息:先替换虚拟键盘布局,把攻击者提供的 HTML 塞进去;再让键盘显示,触发渲染。MathLive 把布局拼成 HTML 字符串,直接赋给主页面里的 innerHTML。
从 HTML 注入到代码执行
中间有一个叫 createHTML 的辅助函数,看上去像消毒,其实只是把字符串标记成可信的 Trusted Types 包装,内容原样通过。到这一步还没有执行 JavaScript,因为通过 innerHTML 插入的 script 不会跑。研究人员用一个不带 sandbox 属性的 iframe srcdoc,让浏览器重新解析一份文档;这份文档继承了 chatgpt.com 的源身份,因此能访问父页面。
CSP 原本拦住了内联脚本,但 ChatGPT 允许加载 YouTube 的脚本。YouTube 的 oEmbed 端点接受 JSONP 回调参数,并在返回错误时把回调拼接进响应。研究者利用这条放行规则让任意代码以 chatgpt.com 身份运行。
JavaScript 跑起来后,从页面的 #client-bootstrap 读出会话访问令牌和账户 ID,调用后端接口枚举最近对话、读取某条从未分享给攻击者的私密对话内容,再用一个普通的图片请求把数据发到外部服务器。
5,000 美元赏金与讨论
OpenAI 在 10 月 26 日修复问题,将其定为 P1,支付了总共 5,000 美元赏金。HN 上讨论最多的是这个金额。不少评论认为对一个能直接接管账户的 P1 漏洞来说太低。Catloafdev 形容这是礼貌地说“谢谢你,滚吧”。也有人认为赏金金额本来就该按影响半径而不是研究者的投入来算。
文章的写法也受到批评。zahlman 说读起来很难跟,特别是一开始那一环没讲清楚:在一个普通的公开分享对话里,研究者到底是怎么控制 Preview 内容的?0c3ca83 认为这是写给机器人的营销文。6thbit 则喜欢这种逐步扩大证明范围的写法,整条链用的都是经典手法:postMessage、JSONP、iframe、img 标签。
Molly(Signal 分支)停更三个月,漏洞未修
停更与暴露的漏洞
Molly(Signal 的 Android 分支)自 7 月 31 日发布 v8.19.2-4 后没有再更新。主线 Signal 已经修掉的漏洞,它至今仍然暴露着。10 月披露的一个漏洞允许用户在挂断后音频、可能还有视频继续传输,Signal 8.27 已修复,Molly 没有。发帖人的建议很直接:在 Molly 恢复及时更新之前,用官方 Signal,删掉 Molly。
官方正在填上的功能
Molly 存在的原因不止一个。有人为了去谷歌化:它不依赖 Google Play Services,支持 UnifiedPush,通知可以走 Conversations、ntfy 这类分发器。有人在 F-Droid 上安装和更新,不想手动下载 APK。有人需要两台设备登录同一个 Signal 账号。还有数据库密码加密、内存清理这些官方客户端没有的功能。
这些理由正在被官方逐个填上。Signal 现在支持一个账号连接两台 Android 设备,最近还扩展到 iPhone 作为辅助设备。官方 APK 的更新体验常被误解:signal.org/android/apk 提供的安装包会提示有新版本,点通知就能装,有时比 Play Store 还早,只是不会在后台自动更新。
不想碰 Google 组件的人还有 Signal-FOSS(twinhelix 维护)。它去掉了 Firebase 消息和 Maps 等 blob,通知只走 WebSocket,更新完全自动化。代价是不支持 UnifiedPush、不加密数据库、不支持多手机配对。
UnifiedPush 的收益被高估
评论里有人用 Pixel 8a 跑 GrapheneOS、开飞行模式、Wi-Fi 空闲 12 小时做对比:WebSocket 只用了 3% 的电量。省电效果只对极少打开 Signal 的人有意义。更麻烦的是,MollySocket 在 Signal 服务器上注册成另一台设备,等于多了一个受信任设备、多了一层攻击面,只为换回很有限的收益。
HN 上另一条线索在争论 Signal 该不该支持第三方客户端。批评者认为 Signal 一边声称开源,一边用服务条款把用户锁在官方客户端和 Google 生态里。支持者说这是有意的取舍:统一客户端才能保证协议更新及时、安全修复不被旧分支拖住,Molly 停更本身就是例证。
GCC 如何编译 switch 语句
跳转表、位集测试与比较树
GCC 编译 switch 语句时会在几种策略之间做选择:跳转表、位集测试(bitset test)、二叉决策树。文章用一组 C 函数和对应的汇编输出拆开了这套机制,也把相关启发式追溯到了 GCC 源码里的 pass_lower_switch。
第一个例子是 5 个连续 case 调用 f0 到 f4。GCC 生成跳转表,用 cmp 检查上界后执行 jmp [.L4 + rax*8]。稀疏程度影响选择:case 值间隔 7 时仍是跳转表,间隔 8 就退化成比较树。文章测出的经验阈值大约是每个 case 标签对应 8 个跳转表条目。
GCC 能识别密集子集。一个 case 1..5 加一个 case 100 的 switch,会先为 100 单独发一个分支,再为 1 到 5 生成跳转表。多个 case 指向同一代码块时,启发式统计的是比较次数而不是 case 标签数。
位集与动态规划
不连续的 case 会触发位集优化。字符 '0' '2' '4' '5' '7' '9' 'A' 'C' 'E' 被归约成从 48 开始的偏移,GCC 发射 bt rdx, rax,其中常数 2753205 的二进制位正好对应这些 case。bt 是 x86 的位测试指令,把位串里的某一位读进 CF 标志。
源码层面,analyze_switch_statement 先把相邻 case 合并成 simple_cluster,记录值域、目标边和概率。接着 bit_test_cluster::find_bit_tests 用动态规划求最少位集数量:can_be_handled 要求合并后的值域小于寄存器宽度(现代机器上是 64),且最多 3 个不同出边。is_beneficial 的门槛是:1 个出边至少 3 个 case,2 个出边至少 5 个,3 个出边至少 6 个。
跳转表转换用同样的动态规划结构。max_ratio 在优化速度时取 8,优化大小时取 2。case_values_threshold 默认是 5,有 casesi 指令的架构上是 4。
完美哈希与 LLVM 的积压
HN 讨论里,rurban 认为 clang 和 GCC 都该为大型稀疏 switch 实现完美哈希(perfect hash),他在自己的 rcc C 编译器里花一天做完,LLVM 的补丁十年前被拒。jcranmer 回应说编译器优化是编译时间、运行时和代码大小之间的权衡,完美哈希主要对大型稀疏 switch 有用,但热的大型稀疏 switch 很少见,最接近的例子是解析表,而解析表通常由其他工具生成。
nh2 把话题引向 LLVM 的 issue 积压:3 万个开放 issue 里有错误编译,他报告 #pragma omp parallel for 中循环越过上界,3 年没人处理。rurban 说 restrict 也还有问题。
文章里 sparse_8 那个例子说 GCC 没找到“除以 8 再查表”的简化。LarsKrimi 指出直接除不行:0/8 是 0,3/8 也是 0,原本落到 default 的值会被错误地送进函数调用。rep_lodsb 给出可行版本:先检查上界,再确认低三位为零,然后查表。LarsKrimi 实测这个版本对不可预测输入快近两倍。
Lean 创始人谈 AI 如何改变形式验证
从测试到证明
在 The Data Exchange 播客中,Lean 创建者 Leo de Moura 与 Ben Lorica 讨论了 AI 如何把形式验证推入软件工程流程。de Moura 是 AWS 自动化推理组的副总裁兼杰出科学家,也是 Lean 聚焦研究组织的首席架构师。Lean 既是编程语言,也是定理证明器(proof assistant):你可以写代码,也可以写下代码应满足的性质,再给出机器检查的证明。
de Moura 说,过去一年前沿模型获得了自动形式化(autoformalization)能力:把数学论文或任意语言的程序翻译成 Lean。Kim Morrison 把 zlib 移植到 Lean,并证明“压缩后再解压能还原数据”对任意压缩级别成立;微软 SymCrypt 团队用 Aeneas 把 Rust 代码转成 Lean 模型,用来验证密码库。Mathlib 由人类写了 10 年,有 250 万行;现在 AI 写出的 Lean 证明已有 5000 万行,Anthropic 的费马大定理证明有 1300 万行。
测试能说明 bug 存在,不能说明 bug 不存在;形式验证证明对所有输入成立。AI 降低验证成本后,证明可以当护栏:让 AI 做激进优化,只要证明仍表明计算结果不变。Claude Code 的主要开发者 Boris 让 Claude 用 Lean 检查 Claude Code 的 bug,Claude 建模型、找 bug、提 PR,Boris 合并了真实 bug,而他本人不会 Lean。
已验证的软件栈
de Moura 认为软件工程的重心会移向规约和需求:过去用 Word 写设计文档,代码和文档靠人保持同步;以后文档、设计、实现都能被工具检查是否一致。验证声明要经得起追问:给我看规约、看验证了哪些性质、用了哪个内核、可信代码基有多大。“代码已验证”没有说明这些,等于没有说清楚。
他提出“已验证的软件栈”:操作系统、编译器、TCP/IP 等关键组件都应有规约和机器检查的证明。对代理,先要有可靠沙箱,以及用经验证的代码执行行为策略。AWS 的 AgentCore、Dogwood 已经在用 Lean。HN 上有人对 de Moura 与 AWS 的关联感到失望,希望 Lean 由非营利组织维护。
代理跑偏的问题
HN 讨论里一位用户说,把想法写成形式规约很难;让 AI 代理做形式验证时,代理会不断展开子目标。他举了“想吃鸡肉”的例子:代理去查酱汁起源、鸡的品种,最后没做出晚饭,却积累了鸡的起源知识。代理把“学习”也算作进展,形式验证的活性(liveness,任务必须向前推进)没有阻止它跑偏。
另一个人指出这是非标准用法,标准形式验证可以把 condition_1 AND condition_2 作为复合命题一起验证。提问者进一步说明,他遇到的是代理在 UML 骨架做到一半时去优化局部算法,或者证明“鸡肉安全”和“酱汁来源可信”,但合起来不是一道鸡肉菜:证明逻辑成立,实际任务没完成。
cfsolve:不用无头浏览器破解 Cloudflare Turnstile
靠浏览器配置文件工作
cfsolve 是 Rust 库和命令行工具,用来解决 Cloudflare Turnstile(人机验证组件)和挑战页,不需要无头浏览器(headless browser)。它通过模拟特定浏览器完成挑战,返回 Turnstile token 或挑战页的 cf_clearance cookie。
工具依靠浏览器配置文件工作。仓库自带 profiles/safari-26-ios.json,模拟 iPhone 上的 Safari。配置文件引用一组 JSON 记录,内容是挑战过程中浏览器检查的响应。制作这些记录需要手动或借助 AI,也可以在真实浏览器里把代理指向运行中的 capture-proxy,由它记录发往 Cloudflare 的解码载荷。目前支持 Safari 和 Chrome/Chromium 两类配置。
构建需要 rust-toolchain.toml 指定的 Rust 版本,以及 CMake、C/C++ 编译器、libclang 和 Git,因为要打补丁并构建 BoringSSL。命令行工具必须传 --fingerprint 指定配置文件;--sitekey 选择页面上的多个组件;--proxy 支持 HTTP、HTTPS、SOCKS5。解决挑战页时,browser.clear 返回 cf_clearance、页面所有 cookie 和受保护页面,这个 cookie 必须和配置文件的 IP、User-Agent 一致,否则 Cloudflare 会拒绝。
与 Cloudflare 的持续赛跑
作者 costco 在讨论里说,有用户报告欧洲代理下失效、美国代理可用,可能 Cloudflare 按区域提供不同版本,他准备修复。Cloudflare 经常改动。他提到最近几个版本基本是告诉 agent“他们改了,请修”,等几小时拿到修复;长期保持代码整洁更难。他会更新几周,但不会永远。
社区把这类工具比作 yt-dlp:和 Cloudflare 持续赛跑,因此不可靠;也有人认为对低频用户足够可靠,大流量会被识别。一位自己做过类似工具的人说,单次绕过不难,规模化很难,因为 Cloudflare 会在整个网络里分析行为模式。有人指出,这类项目真正的价值在于一套自动跟踪 Cloudflare、拉取最新混淆代码、逆向并更新求解器的 LLM 流水线。
Safari 的 PAT 不是万能
关于 Safari 的 PAT(Private Access Token,苹果的隐私认证令牌),有评论说在真实 Mac 上用暖 Safari 配置就能把问题变成 Apple 的问题;作者回应 PAT 按 Apple ID 有限流,规模化到每天百万级不现实。也有评论指出 Cloudflare 明确说 PAT 只是挑战决策中的一个信号,不是自动绕过。
作者确认主要用 Claude 和 Muse Spark,让模型相信自己控制着带测试验证码的网站后,它愿意帮忙。
塞尔维亚选出“最聪明的议会”:141 名学者进入国会
从火车站事故到选举胜利
塞尔维亚 10 月 25 日的议会选举中,一个名为“学生名单——学生正在获胜”的运动在 250 个席位里拿下 141 个,将负责组建政府。名单上有研究星系演化的天体物理学家、参与设计机器人的电气工程师、疫情期间研发新冠药物的有机化学家,还有教育研究者、社会学家、几位政治学家、经济学家、医生和医学研究人员。几十人来自学术界,超过一半拥有博士或医学博士学位。《科学》称这可能是世界上“最聪明的议会”。
这场运动源于 2024 年 11 月的一场事故:诺维萨德火车站顶棚坍塌,16 人死亡。学生将事故归因于公共部门的腐败,要求透明与追责。诉求没有得到回应,抗议反而扩大,教师、学者和市民陆续加入。到 2025 年 5 月,他们要求提前选举,并开始拟定候选人名单。学生没有自己参选,而是推举了一批他们信任的人,学者之外还有农民、律师、艺术家、教师和一名前篮球运动员。
学者治国的优势与疑问
武契奇(Aleksandar Vučić)执政 13 年,留下的是被侵蚀的学术自由、高度政治化的大学和被边缘化的批评者。贝尔格莱德大学生物考古学家 Sofija Stefanović 说,这场胜利“立即停止了前政权对高等教育的主动拆解”,但新政府得先恢复法治、打击腐败。诺维萨德大学化学家 Marija Lesjak 刚当选议员,她说大学必须能自由思考、做研究、提出批评,不必担心政治后果。她点出一个具体的压力来源:集中式财务管理把所有交易走国库,“显著限制了院系管理自有资金、规划自身发展的能力”。
Hacker News 的讨论集中在两个方向。duke_sam 好奇没有领袖的政府组建会怎么走。akie 半开玩笑地问“你见过 80 个学者组成的工作组吗”。fsloth 认为轮替的派系和内斗本来就是民主的运作方式。关于学者能不能治国,michaelt 把两套技能摆在一起:智力、解决问题、看懂统计,两边都用得上;竞选、跟不喜欢的同僚共事、面对恨自己的选民,这些是政治家要过的关。palata 说得更直接:政治技能的核心是被选上,不是解决问题。
历史案例与本地视角
历史案例被反复提起,也被反复反驳。rayiner 举出孟加拉由经济学家尤努斯领衔的政府,以及阿富汗最后一任总统加尼,问学生主导的革命有没有正面结局。atombender 列出天鹅绒革命、韩国 1987 年六月民主抗争,以及塞尔维亚 2000 年把米洛舍维奇赶下台的 Otpor。vmsp 提到葡萄牙自 1926 年起基本由博士治理,结果并不理想。
来自塞尔维亚本地的评论更贴近操作层面。DrProtic 说学生筛选了 250 人,到目前为止没犯过错,这也是他们拿下 53% 选票的原因,而且是在几乎全面的媒体封锁中竞选。学生 el_psy_congroo 担心“领袖”会从名单里冒出来、名单随后解体、这些人各自组党。techcode 说情况糟到什么都不做都可能更好。andyvesel 提到新议会的第一项决定是吊销 Alta 银行牌照,这家银行是俄罗斯移居者转账的主要通道,他认为“最聪明的议会”一上来就做了一个民粹决定。
分子生物学家 Željko Popović 警告说,改造塞尔维亚的科研部门“不会轻松快速”。他希望学者这两年对运动的支持改变了公众对科学家的看法:“我们表明自己是这个社会的一部分,准备好为共同的价值和自由做任何事。”
Vitalik 的数字极简主义:离开 X 界面,100 天飞行模式
离开 X 界面,而不是离开 X
以太坊联合创始人 Vitalik Buterin 在他的博客上描述了自己实践“数字极简主义”的几个实验。第一个实验针对社交媒体:他并没有离开 X 这个平台,而是离开了 X 这个界面。他通过 Firefly 发推,这是一个把 X、BlueSky、Farcaster 和 Lens 聚合在一起的多客户端。
这样做的主要目的是支持去中心化社交,但他用下来发现自己的感受好了很多。原因在于 Firefly 缺少 X 界面里的算法:在 X 上,他看到一条支持希特勒的推文,点进去看评论,就像路过车祸现场一样忍不住盯着看,算法把这记为他的兴趣,接着推来更多类似内容。他现在偶尔回到 X 界面,还是会马上退出。他建议大家探索各种大幅减少或限定社交媒体使用范围的办法,比如只用 Firefly、只在周二上 X,既拿到信息收益,又不被卷入算法。
100 天飞行模式
第二个实验持续了 100 天:手机始终开飞行模式,只用 WiFi,不用蜂窝数据。目标有两个。一是隐私,连着蜂窝网络的手机是全天候追踪设备,运营商在保护这些数据方面名声很差。匿名 SIM 卡不够用,因为手机的 IMEI 号可以在整个使用周期内把它关联起来。二是心理健康,长时间离线能重建没有网络也能生存的习惯。
这 100 天里他只违规过一次:短暂开启网络接收维持套餐所需的验证码。最大的不便是在新加坡,收不到短信验证码让他无法登录 Grab,吃饭选择变少。导航上他用 CoMaps,一个下载 OpenStreetMap 数据、在本地显示地图和路线的应用。他的评价是:在人类世界(餐馆、商店、营业时间)里不如谷歌地图,但在自然世界更好,知道很多谷歌地图没有的步道。
他还按亲身体验给各地公共 WiFi 排了名。台湾最好,走在路上有超过 25% 的概率附近有可连的热点。乌克兰、美国、加拿大、新加坡次之。瑞士尽管以隐私著称,却排在最末:几乎所有公共热点都要短信验证码,他在市中心走了 1.5 公里只找到两个不要的。
命令行与本地 AI
第三个实验是网络极简主义:尽量不依赖网站里的用户界面。他最近几次更新 ENS 上的 IPFS 哈希,用的是 AI 帮他写的命令行工具;很多通过隐私协议完成的支付,现在用 kohaku-cli 工具。他认为网页应用有几个危险。每次访问网页应用,你都在从服务器重新下载这个应用,几千次访问里每一次都完全信任服务器。网页默认对隐私很差:浏览器、版本号、操作系统、屏幕尺寸,以及鼠标移动、点击模式等几百个数据点都能很快识别你。
替代方案是带回 Unix 哲学,但用本地 AI 让它更好用:用英语告诉电脑做什么,而不是写 Bash。Unix 哲学的核心是简单、模块化的工具,每个只把一件事做好,通过文本接口互相交流。有了大模型,可以回到这个思路,把细粒度决策权还给用户,又不必让每个人都变成程序员。
HN 讨论里,不少评论者认为这更像“数字策展”而不是极简主义,有人指出他没有提到 Cal Newport 2019 年那本同名著作。一位用户做得更彻底:大约十年前开始开飞行模式、删应用,八年前取消了手机套餐,此后根本不带手机。另一位用户反驳说这样会错过很多:地图、播客应用、家庭自动化、随时能识别植物的 AI,这些都不持续抢注意力。关于 AI,有人说如果你减少社交媒体上的人际互动、却用与 AI 的“社交”互动替代,那不是极简,是把一种恶习换成更糟的。
为纪念 Patrick Stewart,有人做了 TNG 剧集猜谜游戏
玩法像 Wordle
为纪念 Patrick Stewart 爵士,有人做了一个《星际迷航:下一代》(Star Trek: The Next Generation,简称 TNG)的剧集猜谜游戏。每局先给一张剧集截图,玩家最多猜六次剧集名称;每多猜一次,下一张截图就更直白。猜错但选对季数也会收到提示。每天有场次限制,成绩存在浏览器本地。
游戏的关键设计是搜索框。它不只匹配剧集标题,还覆盖剧情描述。Arainach 说这很关键:他完整看过好几遍 TNG,却想不起“外星人装傻绑架 Geordi 的那集”叫什么,靠搜索能找到,又不至于太明显。
难度争议
难度是评论区最集中的话题。joeguilmette 从小看 TNG,自称现实中没人比他更爱这部剧,结果“一个都没猜对”。ctolsen 说他知道每张截图出自哪集,但记不住名字。vunderba 说“这游戏离‘第四季第三集 Data 锁定 Enterprise 用的确切代码是什么’只差一步”。有人立刻接上了那段代码:173467321476Charlie32789777643Tango732Victor731。
另一些玩家走向另一个极端。drhagen 成年后看了大约五遍 TNG,最近一次是去年,20 局全对,平均 1.5 次猜中。tarvaina 第一次没读规则,没意识到所有截图来自同一集;明白之后 34 局全对,平均 2.68 次。rsyring 一开始觉得太难,后来收回评价:他没意识到每轮都围绕同一集,也没发现可以搜剧情关键词,之后一局没漏。
Pakleds 支线
Pakleds 成了讨论里跑得最远的支线。Arainach 用“外星人装傻绑架 Geordi”指代的那集是 “Samaritan Snare”,dmead 补充说它也是 Picard 修心脏的那集。latexr 说 Pakleds 是真的傻,不是装的:“Big Strong City”是他们的首都,“Red Alert”被他们说成 “Red Alarm”。hnlmorg 认为他们没那么傻,装傻是为了让人放松警惕,这是一种社会工程。
Arainach 给 Pakleds 补了一个 HN 式注解:他们把一堆不是自己发明的技术拼成强大飞船,还社会工程了 Enterprise,让对方交出更多有价值的东西。“把 Pakleds 换成创业公司创始人,只要赚钱,这就叫聪明和创新。”
Darmok 是另一条高频梗。“Shaka, when the walls fell.” “Sokath, his eyes uncovered!” 有人顺势造了 “Claude, when the machines broke.” Der_Einzige 则提出一个更认真的观察:Darmok 在当下的生成式 AI 和自然语言处理社区似乎没什么影响力,他希望有人能证明他错了。
评论里也散落着对 Stewart 其他作品的回忆:smolder 推荐他在《Extras》里的客串,认为那证明他能演喜剧;somenameforme 提到他在《我,克劳迪斯》里演 Sejanus,演得极好,而且那时候还有头发;karim79 说起《上古卷轴 4:湮没》里他演的 Uriel 皇帝出场太短。
播客全文
女:Hello 大家好,欢迎收听 Agili 的 Hacker Podcast,我是莓莓。 男:大家好,我是阿迪。 女:今天咱们从一场选举聊起。塞尔维亚十月底的议会选举,出现了一个挺特别的结果。阿迪,你先说说? 男:塞尔维亚 10 月 25 日选议会,250 个席位,一个叫“学生名单——学生正在获胜”的运动拿了 141 个,直接负责组阁。名单上的人挺特别:研究星系演化的天体物理学家、设计机器人的电气工程师、疫情期间研发新冠药物的有机化学家,还有教育研究者、社会学家、政治学家、经济学家、医生。几十人来自学术界,超过一半有博士或医学博士学位。《科学》杂志说这可能是世界上最聪明的议会。 女:这名字听着像学生运动,怎么走到选举这一步的? 男:起点是 2024 年 11 月诺维萨德火车站顶棚坍塌,16 个人死了。学生把事故归因于公共部门的腐败,要求透明和追责。诉求没得到回应,抗议反而扩大,教师、学者、市民陆续加入。到 2025 年 5 月,他们要求提前选举,开始拟定候选人名单。学生自己没参选,推举的是他们信任的人,除了学者还有农民、律师、艺术家、教师和一名前篮球运动员。名单排第一的是心脏病医生 Ilija Srdanović,但他不是组织的正式领袖。 女:学界怎么看这次胜利? 男:贝尔格莱德大学生物考古学家 Sofija Stefanović 说,这场胜利“立即停止了前政权对高等教育的主动拆解”。但新政府得先恢复法治、打击腐败,科研部门的完全恢复需要时间。诺维萨德大学化学家 Marija Lesjak 刚当选议员,她说大学必须能自由思考、做研究、提出批评,不必担心政治后果。她点出一个具体的压力来源:集中式财务管理把所有交易走国库,显著限制了院系管理自有资金、规划自身发展的能力。同校物理学家 Miodrag Krmar 说,经费常常按政治或个人关系分配,而不是按能力。 女:HN 上大家讨论什么?学者从政这件事本身就有争议吧。 男:两个方向。一个是没有领袖的政府怎么组建。多数议会制民主国家默认党魁最终坐上主位,日常运作的权力也高度集中在那个人手里。有人半开玩笑问“你见过 80 个学者组成的工作组吗”,觉得失败概率不小。另一个方向更根本:学者能不能治国。有人把两套技能摆在一起,智力、解决问题、看懂统计、在满屋子人面前讲话、把复杂概念讲清楚,两边都用得上;但竞选、跟不喜欢的同僚共事、面对恨自己的选民、每四五年被解雇一次再重新应聘,这些是政治家要过的关。 女:本地人的视角可能更具体。 男:对。一位叫 DrProtic 的评论者说,体制没变,这些人仍要组阁、选出总理,然后按常规运作。学生筛选了 250 人,到目前为止没犯过错,这也是他们拿下 53% 选票的原因,而且是在几乎全面的媒体封锁和赤裸裸的谎言中竞选,有媒体甚至说学生在打女人。他认为眼下大家最关心的是把人送进监狱。也有学生从运动一开始就支持,但担心“领袖”会从名单里冒出来、名单随后解体、这些人各自组党,最后又选出一个激进的人。 女:这话题挺沉重的。咱们换个方向,聊一个更技术、但也跟信任有关的事。币安被盗,63 亿美元,这个数字太吓人了。 男:10 月 29 日下午 4 点左右,美东时间,黑客开始从 Binance 钱包转走约 63 亿美元加密货币。资金分布在至少十条区块链上,包括 Ethereum、Bitcoin、Tron 和 Solana。链上追踪公司 TRM Labs 的分析显示,大部分盗取发生在约 20 分钟内,钱包被清空后转入同一个攻击者控制的多个地址。 女:20 分钟?这准备得多充分? 男:TRM Labs 说准备至少提前 36 小时开始。攻击者先在两个钱包上测试第一段代码,当天晚些时候在第三个钱包彩排最终版本,把测试资金转回自己,四小时后再把同一套代码装到 Binance 的热钱包上。热钱包是联网的钱包,交易所用它处理客户提款。Binance 几乎立即暂停所有存取款,表示正在确认攻击者身份,并承诺覆盖全部损失。 女:谁干的?钱追回来多少? 男:三家链上分析公司很快把矛头指向朝鲜黑客组织 TraderTraitor。Elliptic 联合创始人 Tom Robinson 说,如果真是朝鲜,这一次盗窃几乎会让该政权迄今盗取的所有加密货币翻倍。FBI 去年曾指认 TraderTraitor 对 Bybit 的 15 亿美元黑客事件负责。冻结进展有限,Elliptic 估计约 28 亿美元、占总被盗金额约 44% 已被冻结,几乎全是稳定币。剩下约 33 亿美元主要是比特币、以太坊和 XRP,Robinson 说“没人能冻结”,只能在资金进入交易所或其他服务时拦截。 女:HN 上的讨论好像不只是这件事本身? 男:对,很快转向一个更老的问题:加密货币到底带来了什么价值。一位自称 17 年加密货币支持者的用户说,是时候认真讨论这件事了。它让一些人把储蓄放在独裁国家够不到的地方,但也资助了对自己人民做坏事的独裁者。反对的声音更直接:除了诈骗和暴富项目,一直没看懂加密货币的意义,而且它仍然和美元挂钩,这本身就违背了独立货币的说法。支持者则强调不让任何单一地方掌握所有钱和投票权,智能合约的规则写在链上,没人能单方面改。但立刻有人反问:这次事件不正好说明不可变的智能合约恰恰是可信金融系统不想要的东西吗? 女:说到数据安全,最近 ChatGPT 有一个账户接管漏洞,链路挺复杂,但每一步单看都挺正常的。 男:安全研究团队 Parameter,评论里也叫 Hex,找到了一种接管任意 ChatGPT 账户的方法。把恶意内容放进一个普通的公开分享对话,把链接发给目标用户,等对方打开链接,代码就以 chatgpt.com 的身份在受害者的登录会话里运行。链路从两个单独看都没问题的功能开始。ChatGPT 的 Preview 会把 HTML 代码块渲染成一个能跑 JavaScript 的小网页,但放在独立域名的沙箱 iframe 里,读不到主页面。对话里的交互图表会在后台加载 MathLive 数学公式库,加载过程也会在主 ChatGPT 页面注册一个监听器,用来接收屏幕键盘相关的 postMessage,也就是浏览器里不同窗口之间发消息的 API。 女:问题出在 MathLive 的监听器? 男:对。MathLive 的监听器 origin policy 设为 none,不检查消息来源。沙箱里的 Preview 正好可以当发送方,它没法直接进入主页面,但可以往信箱里投递。Preview 发出两条消息:先替换虚拟键盘布局,把攻击者提供的 HTML 塞进去;再让键盘显示,触发渲染。MathLive 把布局拼成 HTML 字符串,直接赋给主页面里的 innerHTML。中间有一个叫 createHTML 的辅助函数,看上去像消毒,其实只是把字符串标记成可信的 Trusted Types 包装,内容原样通过。到这一步还没有执行 JavaScript,因为通过 innerHTML 插入的 script 不会跑。研究人员用一个不带 sandbox 属性的 iframe srcdoc,让浏览器重新解析一份文档;这份文档继承了 chatgpt.com 的源身份,因此能访问父页面。 女:CSP 没拦住吗? 男:CSP 原本拦住了内联脚本,但 ChatGPT 允许加载 YouTube 的脚本。YouTube 的 oEmbed 端点接受 JSONP 回调参数,并在返回错误时把回调拼接进响应。JSONP 是一种老式的跨域取数据方法,靠 script 标签加载。研究者利用这条放行规则让任意代码以 chatgpt.com 身份运行。最终载荷被装进一个普通的公开分享对话,受害者打开链接后还需要点一次 Preview;后来研究人员把 HTML 块标记成可自动预览,打开链接就是全部所需的动作,提示框大约 4.5 秒后出现。JavaScript 跑起来后,从页面的 #client-bootstrap 读出会话访问令牌和账户 ID,调用 ChatGPT 的后端接口枚举最近对话、读取某条从未分享给攻击者的私密对话内容,再用一个普通的图片请求把数据发到外部服务器。 女:OpenAI 怎么处理的? 男:10 月 26 日修复,定为 P1,支付了总共 5000 美元赏金。HN 上讨论最多的是这个金额,不少人觉得对一个能直接接管账户的 P1 漏洞来说太低了。也有人认为赏金金额本来就该按影响半径而不是研究者的投入来算。还有评论猜测压低赏金是有意为之,避免催生一个专靠赏金吃饭的行业。 女:说到技术对人的影响,Vitalik 那篇数字极简主义的文章挺有意思。他做了几个实验,跟咱们日常用手机的方式差别很大。 男:对,他把极简主义从物理世界延伸到数字领域。物理极简主义在 2000 到 2010 年代流行,一台电脑可以取代几十件实物,让他能背着 40 升的包生活。现在他觉得需要一种新的极简主义,核心是对数字技术的每一次使用都做出有意识的选择,而不是被默认机制吸进去。 女:第一个实验是社交媒体?他没离开 X,但离开了 X 的界面? 男:他通过 Firefly 发推,这是一个把 X、BlueSky、Farcaster 和 Lens 聚合在一起的多客户端。主要目的是支持去中心化社交、分散网络效应,但他用下来发现自己的感受好了很多。原因在于 Firefly 缺少 X 界面里的算法。在 X 上,他看到一条支持希特勒的推文,点进去看评论,就像路过车祸现场一样忍不住盯着看,算法把这记为他的兴趣,接着推来十条、一百条类似内容。他现在偶尔回到 X 界面,还是会马上退出。 女:第二个实验更极端,100 天飞行模式? 男:手机始终开飞行模式,只用 WiFi,不用蜂窝数据。目标有两个。一是隐私,连着蜂窝网络的手机是全天候追踪设备,运营商在保护这些数据方面名声很差,有时还会出售数据。匿名 SIM 卡不够用,因为手机的 IMEI 号可以在整个使用周期内把它关联起来,而且细粒度的移动模式、上网模式等数据在现代 AI 面前很容易还原出你是谁。二是心理健康,长时间离线能重建没有网络也能生存的习惯,换来更多平静和思考空间。最大的不便是在新加坡,收不到短信验证码让他无法登录 Grab,吃饭选择变少,有时不得不在很不方便的情况下改坐地铁。 女:公共 WiFi 那段挺好玩的,他给各地排了名? 男:台湾,至少台北地区,最好。走在路上甚至坐在 Uber 里,打开手机有超过 25% 的概率附近有可连的热点,通常是市政府或连锁便利店提供的。乌克兰、美国、加拿大、新加坡次之,乌克兰最让他意外,多个城市有大量开放热点,有些甚至不需要点击同意。奥地利和匈牙利类似,热点很多但绝大多数公共热点要短信验证码。瑞士尽管以隐私著称,却排在最末:几乎所有公共热点都要短信验证码,他在市中心走了 1.5 公里只找到两个不要的,一个随机鞋店和星巴克,星巴克给 10 分钟,输入邮件收到的验证码可以延长。 女:聊了几个偏社会和技术交叉的话题,咱们再往底层走一走。GCC 编译 switch 语句那篇文章,听起来挺硬核的,但里面有些很巧妙的启发式。 男:对,GCC 编译 switch 语句时会在几种策略之间做选择:跳转表、位集测试、二叉决策树。跳转表就是直接根据值跳到对应地址。文章用一组 C 函数和对应的汇编输出拆开了这套机制,也把相关启发式追溯到了 GCC 源码里的 pass_lower_switch。第一个例子是 5 个连续 case 调用 f0 到 f4。GCC 生成跳转表,用 cmp 检查上界后执行 jmp。case 值整体偏移 97 时,它先用 lea eax, [rdi-97] 归一化再查表。稀疏程度影响选择:case 值间隔 7 时仍是跳转表,间隔 8 就退化成比较树。文章测出的经验阈值大约是每个 case 标签对应 8 个跳转表条目。 女:位集测试是什么? 男:不连续的 case 会触发位集优化,把一组值编码成二进制位。字符 '0' '2' '4' '5' '7' '9' 'A' 'C' 'E' 被归约成从 48 开始的偏移,GCC 发射 bt rdx, rax,其中常数 2753205 的二进制位正好对应这些 case。bt 是 x86 的位测试指令,把位串里的某一位读进 CF 标志。 女:GCC 怎么决定用哪种?源码里有一套动态规划? 男:analyze_switch_statement 先把相邻 case 合并成 simple_cluster,记录值域、目标边和概率。接着 bit_test_cluster::find_bit_tests 用动态规划求最少位集数量:can_be_handled 要求合并后的值域小于寄存器宽度,现代机器上是 64,且最多 3 个不同出边。is_beneficial 的门槛是:1 个出边至少 3 个 case,2 个出边至少 5 个,3 个出边至少 6 个。跳转表转换用同样的动态规划结构,额外跟踪无法进跳转表的 case 数作为平局裁决。max_ratio 在优化速度时取 8,优化大小时取 2。case_values_threshold 默认是 5,有 casesi 指令的架构上是 4,用来剪掉太小的跳转表。 女:HN 上有人提到完美哈希? 男:对,有人觉得 clang 和 GCC 都该为大型稀疏 switch 实现完美哈希,他在自己的 rcc C 编译器里花一天做完,LLVM 的补丁十年前被拒。但也有人说编译器优化是编译时间、运行时和代码大小之间的权衡,还受开发者时间约束;完美哈希主要对大型稀疏 switch 有用,但热的大型稀疏 switch 很少见,最接近的例子是解析表,而解析表通常由其他工具生成,改生成器比改编译器更直接。 女:最后咱们聊点轻松的。那个星际迷航剧集猜谜游戏,是纪念 Patrick Stewart 的? 男:对,玩法像 Wordle:每局先给一张剧集截图,玩家最多猜六次剧集名称;每多猜一次,下一张截图就更直白。猜错但选对季数也会收到提示。游戏的关键设计是搜索框,它不只匹配剧集标题,还覆盖剧情描述。有人完整看过好几遍 TNG,却想不起“外星人装傻绑架 Geordi 的那集”叫什么,靠搜索能找到,又不至于太明显。 女:难度好像很两极分化? 男:对,有人从小看 TNG,之后几乎每两年重看一遍,自称现实中没人比他更爱这部剧,结果一个都没猜对。另一个人成年后看了大约五遍,最近一次是去年,20 局全对,平均 1.5 次猜中。游戏给他看桌上一个扫描仪,他立刻想起“那是 Data 扫描 Geordi 和 Ro 相位偏移时用的扫描仪”,搜 geordi romulans 一次命中。他感慨大脑为什么把 TNG 存到这种粒度,却不记量子力学或教堂里人的名字。 女:评论区还有 Pakleds 的支线? 男:对,Pakleds 成了讨论里跑得最远的支线。有人用“外星人装傻绑架 Geordi”指代的那集是 Samaritan Snare,也是 Picard 修心脏的那集。有人指出 Pakleds 是真的傻,不是装的:Big Strong City 是他们的首都,Red Alert 被他们说成 Red Alarm,他们还反复把 Carol Freeman 舰长认成 Kathryn Janeway 舰长。也有人认为他们没那么傻,装傻是为了让人放松警惕,这是一种社会工程。有人给 Pakleds 补了一个 HN 式注解:他们把一堆不是自己发明的技术拼成强大飞船,还社会工程了 Enterprise,让对方交出更多有价值的东西。把 Pakleds 换成创业公司创始人,只要赚钱,这就叫聪明和创新。 女:Darmok 那个梗也出现了? 男:Shaka, when the walls fell. Sokath, his eyes uncovered! 有人顺势造了 Claude, when the machines broke. 还有个认真的观察:Darmok 在当下的生成式 AI 和自然语言处理社区似乎没什么影响力,有人希望看到反例。 女:这期聊了不少话题,从塞尔维亚的学者议会到币安被盗,再到 ChatGPT 的漏洞、Vitalik 的数字极简、GCC 的 switch 启发式,最后用星际迷航游戏收尾。阿迪,你还有什么想补充的? 男:其实还有几个话题没展开,比如 Signal 的第三方分支 Molly 停更、Lean 创建者谈 AI 和形式验证,都挺值得聊,但时间有限。今天就到这儿吧。 女:好,感谢大家收听。如果你喜欢这期节目,记得用泛用型播客客户端订阅我们,下次见。 男:下次见。
参考链接
- Serbia just elected the world's brainiest parliament
- Cloudflare Turnstile solver library (no headless browser required)
- Show HN: To Honor Sir Patrick Stewart, Enjoy the TNG Episode Guessing Game
- The $6.3B Binance hack was pulled off in just 20 minutes
- Tell HN: Scribd Breached
- Digital minimalism
- Switch Lowering in GCC
- Molly (Signal fork) has not been updated since 3 months and is vulnerable
- AI, Lean, and the Future of Formal Verification, with Lean Creator Leo de Moura
- Do the math: How we took over ChatGPT accounts
