技术 · 熟练
你不认识的程序,敢让 agent 拆吗?
不是它会不会看,是你划的边界够不够硬
「让 agent 逆向一个程序」这件事,今年第一次成本低到普通人也能试 —— 工具本身已经把反编译、追调用链、还原数据结构串成了一条流水线。真正卡住人的不是技术,是边界:它能看到什么、能碰什么、什么时候必须停下来问你。这一页给的是一条动作线 + 三条硬边界:先把目标圈成一个可枚举的范围(哪几个文件 / 哪个进程 / 哪段流量),再让它只读不写地产出「结构说明 + 调用链 + 待确认清单」,最后按「可核 / 不可核」把结论分成两栏 —— 凡是它说得出、但你不能独立复现的结论,一律不许进决策。关键动作只有一个:把「它能动手」与「它能下结论」两件事分开授权。
方法 · 一图看懂
1
先圈范围 — 三类落点各圈一个:静态产物(二进制 / 安装包 / 前端 bundle)· 运行时行为(进程、网络、文件落点)· 输入面(你这边的请求与配置),一次只开一个
2
只读优先 — 第一轮授权一律「可读不可写、可跑不可改」;需要执行时用一次性环境(容器 / 快照 / 单独账号),跑完即弃
3
要结构不要结论 — 让它交付「结构说明 + 调用链 + 待确认清单」三种可核产物,⛔ 不要它直接告诉你「这个程序在干什么坏事」
4
分两栏收口 — 每条结论标「我可独立复现」或「仅它自述」;后一栏只能挂待办,⛔ 不进任何决策与对外表述
原理 · 为什么有效
逆向的产出不是「结论」,是「可复现的观察」。 agent 在这件事上的强项是耐心与不掉线 —— 它可以反复读同一段反汇编、把几百个符号逐个对照、把调用链画到第十层;它的弱项恰好也在这里:它会生成一个「看起来完整的解释」,而解释与事实之间的差,只有你自己复现一次才能发现。所以这条方法的内核是把它的输出降级成「假设」,把复现留在人这一侧 —— 只有当你能用另一条路径(换个工具、换台机器、换一份输入)得到同一句描述时,那句描述才算进了台账。
适用场景
适合谁:接手了一个没人交接的程序 / 脚本 / 浏览器扩展,想知道它到底连了哪些地址、写了哪些文件;或者你手上的自动化在别处跑得好、搬到自己机器上就不对,需要弄清「差在哪一步」。不适合谁:目标是绕过授权或破解他人软件 —— 这条线一开就不是技术问题;以及你连一个可枚举的范围都圈不出来时(范围圈不出,边界就无处落)。
自测 · 5 问
范围是不是可枚举的:能说出「哪几个文件 / 哪个进程 / 哪段流量」,而不是「整个系统看一下」
第一轮授权是不是只读:可读不可写、可跑不可改 —— 有没有一处默认开了写权限
执行环境是不是一次性的:容器 / 快照 / 单独账号,且跑完即弃;有没有在主力机上直接跑过
结论是不是都被要求「可复现」:每条描述后面能不能补一句「我这样再跑一遍也能得到」
有没有把「它给的解释」和「我复现出的观察」放进同一栏 —— 混在一栏里就没法分责
怎么上手 · 验证步骤
第一轮别求全,先把最小的一件事做出来:选出你最想弄清的那一个问题(比如「它启动后会连哪几个域名」),只圈这一个范围,只开只读权限,让它产出结构说明与待确认清单;然后你自己按清单里的第一条复现一次。复现成功 ⇒ 这条线可以放大;复现不出来 ⇒ 说明它给的是解释不是观察,先把它降回假设。
收工时对照一遍:这一轮里,我独立复现了几条? 如果复现数为 0,说明整轮都在收集解释 —— 那不是没做完,是方向还没落地。判据只有这一个数字。