Reverse-Engineering Agent/本地 Qwen3.6-35B/只读取证

数万行噪声里, 揪出被改成恒真的一行。

Reverse-engineering — one tampered line at a time.

驱动本地 35B,把四阶段协议焊进 system;以结构化台账 · SWA 稳定前缀 · 软化止损守卫,在反编译海里做只读取证——绝不产破解。

SCROLL
EX·A · 现场重建

一次真实审计:从噪声那一行

EasyNotes VIP mod,25,852 个反编译文件。agent 顺锚点两跳、读方法体核实,最终只指向一处篡改。

EXHIBIT A EasyNotes · VIP mod 25,852 files

候选 · 混淆短名 · 无语义

o/lw0.hzc/c1.ay2/bub1.mgetBoolean(sku)nn0.kkr1(true)gz0.fC19184AbstractC2068ih0premium_offer_countisVip?
App.isVip()App.java:277
getHasBuyed()UserConfig.java:1052
·读 pref … 随后丢弃返回值
return true;恒真 · TAMPER

一行,藏在 25,852 个文件里。

§ 取证守则

框架只做两件事,其余交还给 agent。

越过这条线,就退化成一条反编译流水线,丢掉深读裁量——rev-agent 的独特价值。

注入

按硬事实给 context

栈探测、案卷锚点、结构化台账——都是确定性证据,不是猜测。

收敛

按资源上限收 budget

ctx / 步数 / token 触顶才止损,且明确标注「资源上限」而非「任务完成」。

不越界

不替 agent 下判断

守卫只注入 CHECKPOINT,「下一步做什么 / 是否收尾」的决定权始终留给模型。

EX·01 · 取证手法

每一个机制,治一次真实翻车。

不是"更聪明的提示",而是一层层把弱模型的记忆 / 自律 / 长上下文短板搬进框架。约 60 个中最有代表性的六个:

SWA

稳定前缀

台账拼 messages 末尾、system 逐字节静态 → llama.cpp KV 前缀可复用。实测前缀缓存 0% → 97%,根治"越聊越卡"。

agent.ts · REV_GUARD_MODE
MEM

带外结构化台账

每次 read/grep 后零-LLM 自动抽取 reads/greps/hops,verbatim 存类名行号、交叉核验打 ✓,绕开 SDK 配对 bug。

memory/ledger.ts
GRD

signal 软化止损

守卫从"计数即强制收尾"改成"信号触发注入 CHECKPOINT + 给预算",只在资源硬上限收尾。难题不再被过早掐停。

guards.ts · 默认 signal
COR

案卷 handoff

--corpus 接手强模型前置分析(去混淆映射 + file:line 锚点),把弱模型的"搜索题"降级成"核对题"。实测 6.8× 快

corpus.ts · 锚点自检
SEC

脱敏云端顾问

卡住 → 台账驱动确定性脱敏 → 问云端拿方法论 → 还原续跑。fail-closed 泄露扫描,真实外网 0 泄露。默认关。

advisor.ts + redact.ts
STK

主动栈探测

开局 unzip -l 看 lib/assets 指纹,权威识别 Unity/Flutter/RN/加固,掐掉模型"谎称无 native"的 false-negative。

stack-probe.ts
EX·02 · 对证 / findings

杠杆在行为与前置,不在模型知识。

同模型(本地 Qwen3.6)、同题、串行。完整六组见 Wiki › Comparisons

3.5×

中难度定位更快

vs 通用 coding agent 跑同一本地模型:113s / 4 工具 vs 402s / 18 工具——协议+台账焊死。

6.8×

案卷破全混淆题

强模型前置案卷让弱模型从 900s 超时空答 → 132s 命中,0 grep / 14 read:搜索题降级成核对题。

0

真实外网出境泄露

脱敏防火墙(台账精确替换 + 正则兜底 + fail-closed 扫描)在火山引擎 live 验证 0 泄露。

EX·03 · 构造

一个 Agent 核心,四个前端共享。

决策 / 记忆 / 守卫 / 安全都在框架里,模型只管读码+推理。完整 Mermaid 图见 Wiki › Architecture

入口
index.tsx · commander
前端 ×4
--onceTUI · OpenTUI--web · Bun.serve--mcp-server
Agent 核心
单步 Plan-Act · 手动 dispatch · EventEmitter
记忆·守卫
Ledger 台账decideGuardBudget 线性计量
工具
shellread_file ≤200grep ≤50append_note
协议注入
prompts §1-§9stack-probe--corpus--resumeplaybook
后端
lemonade · Qwen3.6+6 后端可切reasoning fetch 改写
EX·04 · 破解审计 / crack forensics

99 个被 mod 的 APK,逐个取证审计。

multi-agent 只读复现被攻破路径 + 攻击者工具/流程 + 加固建议,再蒸馏成一套给小模型复用的方法论。原始 99 份攻击复现不公开;此处仅放蒸馏与聚合层。

mod APK 样本
模组作者 / 渠道
破解类型
蒸馏专题文档
98/99

原签名被破坏、换作者自签

重打包 + 自签重签 v2/v3 是绝对普遍的前置动作;证书 DN 常直接暴露作者(CN=lushu→鹿蜀、CN=zhou→zhou45)。

62%

签名绕过 ⇄ 会员恒真 共现

见到 ApkSignatureKillerEx / KillerApplication,多半同包还有权益判定被恒真化——两者联动找,省一半盲搜。

37%

越强的 App 越靠 native 化 / 注入

头部 App(微博/B站/喜马拉雅)用 Dex2C 原生化、加固壳、ART Hook 藏改动,静态只能到机制层:强加固样本确证率仅 37%(整体 57%)。

EX·05 · 攻击者投入分档 / effort tiers

86% 的破解,一台手机就够。

把 99 个样本按"攻击者要花多少功夫"重分档:绝大多数一台 root 手机 + 免费 App(MT/NP 管理器、LSPatch)就能破,破解者甚至不用自己做动态分析。防御的目标,就是把他们从 A/B 逼进 C。

85 / 99(86%) 一台 root 手机 + 免费工具就能破(作坊一键) 14% 才需电脑 + 脱壳/抓包/源码重编译 →
A · 纯静态改(46)

MT/NP 里直接改 smali 判定恒真化、删广告组件、改资源 + 一键重签。

B · 静态注入现成模块(41)

不改逻辑,套现成轮子:MT 一键签名过验证 / NP 一键 Dex2C / LSPatch 打包 Xposed 模块。效果在运行时,但操作是静态,破解者不做分析。

C · 需真动态(12)

必须亲自脱壳 dump 真 dex、抓包伪造服务端、或 fork 源码重编译——要电脑、要真功夫,作坊多半放弃。

防御 = 把攻击者从 A/B 推进 C。 纯客户端判定几乎必然失守;唯有权益裁决上移服务端(逼其抓包)+ 强加固/反 Hook(逼其脱壳),才能把"一键作坊"变成"要真功夫"。
开发者加固清单(代码层) → 静态极限与三条路径 →
结案 · 实测标定 · 诚实第一
核心机制
离线断言
%
前缀缓存复用峰值
题能力标定