dsh-js-reverse-plugin 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cordis.patch.yml +14 -0
- package/index.js +61 -0
- package/package.json +20 -0
- package/skills/iv8-env-runtime/SKILL.md +159 -0
- package/skills/iv8-env-runtime/assets/entry-report-template.txt +23 -0
- package/skills/iv8-env-runtime/assets/env_starter.py +100 -0
- package/skills/iv8-env-runtime/references/case-function-iwencai.md +96 -0
- package/skills/iv8-env-runtime/references/case-intercept-douyin.md +133 -0
- package/skills/iv8-env-runtime/references/config-defaults-cheatsheet.md +75 -0
- package/skills/iv8-env-runtime/references/cross-platform-install.md +108 -0
- package/skills/iv8-env-runtime/references/iv8-api-contract.md +97 -0
- package/skills/iv8-env-runtime/references/network-and-eventloop.md +113 -0
- package/skills/iv8-env-runtime/references/part1-entry-location.md +138 -0
- package/skills/iv8-env-runtime/references/part1-mcp-tool-map.md +77 -0
- package/skills/iv8-env-runtime/references/part2-discovery.md +80 -0
- package/skills/iv8-env-runtime/references/patching-principles.md +91 -0
- package/skills/iv8-env-runtime/references/trap-blacklist.md +60 -0
- package/skills/iv8-env-runtime/references/version-gotchas.md +128 -0
- package/skills/iv8-env-runtime/scripts/consistency_lint.py +211 -0
- package/skills/iv8-env-runtime/scripts/defaults_audit.py +143 -0
- package/skills/iv8-env-runtime/scripts/monitor_env.py +185 -0
- package/skills/iv8-env-runtime/scripts/network_bridge.py +147 -0
- package/skills/iv8-env-runtime/scripts/parity_check.py +175 -0
- package/skills/iv8-env-runtime/scripts/preflight.py +144 -0
- package/skills/iv8-env-runtime/scripts/reproduce_stub_error.py +165 -0
- package/skills/iv8-env-runtime/scripts/run_target.py +150 -0
- package/skills/iv8-jsvmp-recovery/SKILL.md +129 -0
- package/skills/iv8-jsvmp-recovery/agents/openai.yaml +4 -0
- package/skills/iv8-jsvmp-recovery/references/case-study-douyin-a-bogus.md +320 -0
- package/skills/iv8-jsvmp-recovery/references/controlled-oracle-and-equivalence.md +247 -0
- package/skills/iv8-jsvmp-recovery/references/static-trace-evidence.md +289 -0
- package/skills/iv8-jsvmp-recovery/references/vmp-domain-model.md +212 -0
- package/skills/iv8-jsvmp-recovery/scripts/verify-equivalence.py +281 -0
- package/skills/js-ast-deobfuscation/SKILL.md +140 -0
- package/skills/js-ast-deobfuscation/agents/openai.yaml +4 -0
- package/skills/js-ast-deobfuscation/references/anti-patterns.md +325 -0
- package/skills/js-ast-deobfuscation/references/first-pass.md +255 -0
- package/skills/js-ast-deobfuscation/references/interaction-and-stopping.md +758 -0
- package/skills/js-ast-deobfuscation/references/iv8-runtime-observation.md +773 -0
- package/skills/js-ast-deobfuscation/references/jsvmp-identification.md +328 -0
- package/skills/js-ast-deobfuscation/references/methods-and-evidence.md +460 -0
- package/skills/js-ast-deobfuscation/references/patterns-and-priority.md +516 -0
- package/skills/js-ast-deobfuscation/references/validation-contract.md +604 -0
- package/skills/js-ast-deobfuscation/scripts/prepare-source.mjs +921 -0
|
@@ -0,0 +1,604 @@
|
|
|
1
|
+
# 验收契约
|
|
2
|
+
|
|
3
|
+
模型分析在被验证前只是候选解释。每个准备步骤、transform 和动态结论都必须按其产物类型与证据模式验收。
|
|
4
|
+
|
|
5
|
+
本文件主要负责当前已选步骤的单步 transform、动态证据、A/B、确定性、停止和关闭验收;G1~G4 章节只供后续审计准备证据或恢复异常状态,普通首轮不读取本文。方法与范围必须由入口阶段先行确定;本文不继续加载其他 reference。
|
|
6
|
+
|
|
7
|
+
## 目录
|
|
8
|
+
|
|
9
|
+
- [1. 验收记录的共同字段](#1-验收记录的共同字段)
|
|
10
|
+
- [2. G1:冻结原始输入](#2-g1冻结原始输入)
|
|
11
|
+
- [3. G2:Prettier 格式化派生副本](#3-g2prettier-格式化派生副本)
|
|
12
|
+
- [4. G3:完整直读验收](#4-g3完整直读验收)
|
|
13
|
+
- [5. G4:首轮画像验收](#5-g4首轮画像验收)
|
|
14
|
+
- [6. 产物类型](#6-产物类型)
|
|
15
|
+
- [7. Transform 执行前契约](#7-transform-执行前契约)
|
|
16
|
+
- [8. Transform 通用验收](#8-transform-通用验收)
|
|
17
|
+
- [9. 高风险变换的附加验收](#9-高风险变换的附加验收)
|
|
18
|
+
- [10. 动态证据验收](#10-动态证据验收)
|
|
19
|
+
- [11. 无 probe / 有 probe A/B](#11-无-probe--有-probe-ab)
|
|
20
|
+
- [12. 确定性与可重放性](#12-确定性与可重放性)
|
|
21
|
+
- [13. 验收失败分流](#13-验收失败分流)
|
|
22
|
+
- [14. 单步报告](#14-单步报告)
|
|
23
|
+
- [15. 关闭与交接验收](#15-关闭与交接验收)
|
|
24
|
+
- [16. 最终自检](#16-最终自检)
|
|
25
|
+
|
|
26
|
+
## 1. 验收记录的共同字段
|
|
27
|
+
|
|
28
|
+
所有验收记录使用真实执行值,不保留模板占位符。
|
|
29
|
+
|
|
30
|
+
至少包含:
|
|
31
|
+
|
|
32
|
+
```text
|
|
33
|
+
question_id / step_id
|
|
34
|
+
日期与执行者
|
|
35
|
+
输入、输出、transform 路径与 hash
|
|
36
|
+
原始目标路径与 hash
|
|
37
|
+
用户批准范围
|
|
38
|
+
证据模式
|
|
39
|
+
产物类型
|
|
40
|
+
执行命令与退出状态
|
|
41
|
+
工具及精确版本
|
|
42
|
+
Observed / Inferred / Unknown
|
|
43
|
+
风险与明确未证明结论
|
|
44
|
+
验收状态
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
验收状态只能是:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
PASS
|
|
51
|
+
FAIL
|
|
52
|
+
BLOCKED
|
|
53
|
+
NOT_APPLICABLE(必须说明原因)
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
不能用“看起来没问题”“应该安全”代替证据。
|
|
57
|
+
|
|
58
|
+
## 2. G1:冻结原始输入
|
|
59
|
+
|
|
60
|
+
G1 通过前不得修改或覆盖原始输入。
|
|
61
|
+
|
|
62
|
+
记录:
|
|
63
|
+
|
|
64
|
+
```text
|
|
65
|
+
原始路径
|
|
66
|
+
文件大小
|
|
67
|
+
原始 hash
|
|
68
|
+
来源
|
|
69
|
+
语法模式
|
|
70
|
+
换行与编码信息
|
|
71
|
+
隔离工作区
|
|
72
|
+
原始运行目标
|
|
73
|
+
格式化与后续派生视图位置
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
验收:
|
|
77
|
+
|
|
78
|
+
- 原始路径可定位。
|
|
79
|
+
- hash 使用明确算法并保存完整值。
|
|
80
|
+
- 派生工作区不与原始路径混淆。
|
|
81
|
+
- 后续运行目标与分析视图角色已区分。
|
|
82
|
+
- 复制后再次核对原始 hash。
|
|
83
|
+
- 报告中不存在“将在原文件上直接格式化或插桩”的步骤。
|
|
84
|
+
|
|
85
|
+
需要行为证据时,优先使用固定 hash 的原始目标。使用其他执行副本时必须单独声明。
|
|
86
|
+
|
|
87
|
+
## 3. G2:Prettier 格式化派生副本
|
|
88
|
+
|
|
89
|
+
Prettier 只生成阅读与 AST 分析副本,不提供语义正确证明。
|
|
90
|
+
|
|
91
|
+
### 3.1 工具验收
|
|
92
|
+
|
|
93
|
+
记录:
|
|
94
|
+
|
|
95
|
+
```text
|
|
96
|
+
Node 版本
|
|
97
|
+
包管理器与版本
|
|
98
|
+
Prettier 安装位置和精确版本
|
|
99
|
+
package.json 与锁文件
|
|
100
|
+
配置文件
|
|
101
|
+
parser
|
|
102
|
+
完整格式化命令
|
|
103
|
+
退出状态
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
要求:
|
|
107
|
+
|
|
108
|
+
- 复用可追溯的项目本地版本,或在案例工作区本地安装。
|
|
109
|
+
- 不依赖未记录的全局 Prettier。
|
|
110
|
+
- 不因缺失 Prettier 静默改用其他 formatter。
|
|
111
|
+
- 不把安装选择转嫁给用户。
|
|
112
|
+
|
|
113
|
+
### 3.2 输入输出验收
|
|
114
|
+
|
|
115
|
+
记录:
|
|
116
|
+
|
|
117
|
+
```text
|
|
118
|
+
格式化输入路径与 hash
|
|
119
|
+
格式化输出路径与 hash
|
|
120
|
+
原始 hash 格式化前后校验
|
|
121
|
+
输出 parse 结果
|
|
122
|
+
parser 尝试与错误
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
要求:
|
|
126
|
+
|
|
127
|
+
- 只格式化派生副本。
|
|
128
|
+
- 原始文件 hash 保持不变。
|
|
129
|
+
- 格式化输出能够由声明 parser 重新解析。
|
|
130
|
+
- 格式化失败时不通过补括号、删语句或改原文越过硬门。
|
|
131
|
+
|
|
132
|
+
Node、包管理器、Prettier 或正确候选 parser 均不可用时,状态为 `FORMAT_BLOCKED`。必须保留原始 hash、尝试命令、工具版本、错误位置和最小解决方向。
|
|
133
|
+
|
|
134
|
+
若样本存在 self-defending、源码文本校验或 hash 校验,格式化副本仍只供分析;行为证据继续指向固定 hash 的原始目标。
|
|
135
|
+
|
|
136
|
+
## 4. G3:完整直读验收
|
|
137
|
+
|
|
138
|
+
必须按连续区间直接读取完整的格式化 JavaScript,不能只看开头、中段和结尾。
|
|
139
|
+
|
|
140
|
+
阅读记录至少包含:
|
|
141
|
+
|
|
142
|
+
```text
|
|
143
|
+
文件总行数或总字节数
|
|
144
|
+
连续阅读区间
|
|
145
|
+
区间之间的空白及原因
|
|
146
|
+
入口、导出和公开 API 锚点
|
|
147
|
+
长字符串、长数组和异常结构锚点
|
|
148
|
+
网络、存储、动态代码和 VM 边界锚点
|
|
149
|
+
高频 helper、decoder 和模块加载器锚点
|
|
150
|
+
代表性源码片段
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
验收:
|
|
154
|
+
|
|
155
|
+
- 阅读区间覆盖整个文件。
|
|
156
|
+
- 没有未经说明的区间缺口。
|
|
157
|
+
- 候选模式均有真实源码锚点。
|
|
158
|
+
- 先记录源码事实,再使用 AST、搜索和统计复核。
|
|
159
|
+
- 自动摘要、正则或 AST 计数没有替代直接阅读。
|
|
160
|
+
|
|
161
|
+
文件过大允许分块,但所有分块合并后必须覆盖完整文件。
|
|
162
|
+
|
|
163
|
+
## 5. G4:首轮画像验收
|
|
164
|
+
|
|
165
|
+
首轮画像只能称为“当前分析视图中可见的模式清单”。
|
|
166
|
+
|
|
167
|
+
### 5.1 计数口径
|
|
168
|
+
|
|
169
|
+
必须分开:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
模式家族数量:可区分的结构类型数。
|
|
173
|
+
出现次数:某一家族匹配的节点、调用点或区域数。
|
|
174
|
+
影响范围:实际受阻的入口、模块、函数、数据流或区间。
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
每个数字标记为精确值、下界或估计值,并说明统计方法。
|
|
178
|
+
|
|
179
|
+
### 5.2 每个模式行
|
|
180
|
+
|
|
181
|
+
至少包含:
|
|
182
|
+
|
|
183
|
+
```text
|
|
184
|
+
模式 ID 与中性名称
|
|
185
|
+
代表性源码锚点
|
|
186
|
+
出现次数及口径
|
|
187
|
+
影响范围与主要消费者
|
|
188
|
+
与其他模式的依赖
|
|
189
|
+
混淆 / 压缩 / 编译 / 打包器 / 第三方 / VM 分类
|
|
190
|
+
Observed / Inferred / Unknown
|
|
191
|
+
置信度与反证
|
|
192
|
+
高价值候选的具体问题
|
|
193
|
+
证据模式与最小方法
|
|
194
|
+
收益、风险和初步优先级
|
|
195
|
+
建议处理 / 询问 / 跳过 / blocked / handoff
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
验收:
|
|
199
|
+
|
|
200
|
+
- 模式家族数和出现次数未混用。
|
|
201
|
+
- 基础设施、第三方、编译产物和 VM 结构未自动计为混淆。
|
|
202
|
+
- `Observed / Inferred / Unknown` 已分开。
|
|
203
|
+
- 每个高价值候选都有具体问题、证据缺口和最小方法。
|
|
204
|
+
- 初步优先级有源码依据,不只按出现次数排序。
|
|
205
|
+
- 字符串隐藏已经检查;无法确认时记录 `Unknown`。
|
|
206
|
+
- 报告明确画像会在新层暴露后更新。
|
|
207
|
+
|
|
208
|
+
每个通过验收的语义步骤后,重新直读最新视图并更新画像、计数、依赖和优先级。
|
|
209
|
+
|
|
210
|
+
## 6. 产物类型
|
|
211
|
+
|
|
212
|
+
每一步只声明一种主要产物类型。
|
|
213
|
+
|
|
214
|
+
### 6.1 `executable-js`
|
|
215
|
+
|
|
216
|
+
承诺仍为可执行 JavaScript。
|
|
217
|
+
|
|
218
|
+
必须验收:
|
|
219
|
+
|
|
220
|
+
- parse 与适用的语法检查。
|
|
221
|
+
- 作用域、binding 和引用完整性。
|
|
222
|
+
- 声明入口与关键行为测试。
|
|
223
|
+
- 不相关行为没有意外变化。
|
|
224
|
+
- 运行环境和输入与声明一致。
|
|
225
|
+
|
|
226
|
+
### 6.2 `analysis-js`
|
|
227
|
+
|
|
228
|
+
用于阅读和继续 AST 分析,不默认替代原始程序运行。
|
|
229
|
+
|
|
230
|
+
必须验收:
|
|
231
|
+
|
|
232
|
+
- 尽量可解析;不可解析时说明原因和替代视图。
|
|
233
|
+
- 原始位置到派生位置的映射。
|
|
234
|
+
- transform 命中、修改、跳过和残留。
|
|
235
|
+
- 事实、推断和中性标注可区分。
|
|
236
|
+
|
|
237
|
+
不得因分析视图不可独立运行就追加无关环境修补。
|
|
238
|
+
|
|
239
|
+
### 6.3 `annotated-view`
|
|
240
|
+
|
|
241
|
+
包含注释、中性名称和边界说明。
|
|
242
|
+
|
|
243
|
+
必须验收:
|
|
244
|
+
|
|
245
|
+
- 每项标注有来源。
|
|
246
|
+
- 观察事实与模型解释分开。
|
|
247
|
+
- 注释或标注不会被报告成原始源码。
|
|
248
|
+
- 不把该视图当作行为证据目标。
|
|
249
|
+
|
|
250
|
+
### 6.4 `pseudocode`
|
|
251
|
+
|
|
252
|
+
只表达结构或语义,不是 JavaScript。
|
|
253
|
+
|
|
254
|
+
必须验收:
|
|
255
|
+
|
|
256
|
+
- 明确标记非 JavaScript。
|
|
257
|
+
- 每个重要结论可回溯到原始或派生位置。
|
|
258
|
+
- 不运行 JavaScript 语法检查冒充验收。
|
|
259
|
+
- 未证明细节保留为 `Unknown`。
|
|
260
|
+
|
|
261
|
+
## 7. Transform 执行前契约
|
|
262
|
+
|
|
263
|
+
用户批准后、执行前记录:
|
|
264
|
+
|
|
265
|
+
```text
|
|
266
|
+
step goal
|
|
267
|
+
question_id / concrete question
|
|
268
|
+
user decision
|
|
269
|
+
input
|
|
270
|
+
expected output type
|
|
271
|
+
observed facts
|
|
272
|
+
hypothesis
|
|
273
|
+
evidence mode
|
|
274
|
+
match scope
|
|
275
|
+
mutation scope
|
|
276
|
+
explicit non-goals
|
|
277
|
+
safety preconditions
|
|
278
|
+
risk
|
|
279
|
+
validation plan
|
|
280
|
+
stop condition
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
要求:
|
|
284
|
+
|
|
285
|
+
- 一步只处理一种明确的 transform 家族。
|
|
286
|
+
- match scope 和 mutation scope 分开。
|
|
287
|
+
- 不把“尽量多命中”写成目标。
|
|
288
|
+
- 验收计划能检测越界修改。
|
|
289
|
+
- 动态或 hybrid 步骤补充运行目标、trigger、L0~L4、映射和覆盖计划。
|
|
290
|
+
|
|
291
|
+
## 8. Transform 通用验收
|
|
292
|
+
|
|
293
|
+
### 8.1 结构与数量
|
|
294
|
+
|
|
295
|
+
记录:
|
|
296
|
+
|
|
297
|
+
- 输入、输出和 transform hash。
|
|
298
|
+
- 匹配、修改、跳过和残留数量。
|
|
299
|
+
- 每类跳过和残留的原因。
|
|
300
|
+
- 相关指标的前后值。
|
|
301
|
+
- 与本步无关的关键指标。
|
|
302
|
+
|
|
303
|
+
指标必须服务于本步问题。代码变短、命中数减少或语法通过都不能单独证明成功。
|
|
304
|
+
|
|
305
|
+
### 8.2 Parse、语法与映射
|
|
306
|
+
|
|
307
|
+
- 对 JavaScript 产物执行适用的 parse。
|
|
308
|
+
- `node --check` 只作为语法门,不是语义证明。
|
|
309
|
+
- 记录原始位置、输入视图位置和输出视图位置。
|
|
310
|
+
- 映射应使用稳定节点、结构路径、source map 或逐步映射表。
|
|
311
|
+
- 不能稳定映射的修改不得宣称可追溯。
|
|
312
|
+
|
|
313
|
+
### 8.3 Binding 与引用
|
|
314
|
+
|
|
315
|
+
至少检查:
|
|
316
|
+
|
|
317
|
+
- 声明、读、写、调用和更新引用。
|
|
318
|
+
- shadow binding 是否保持不变。
|
|
319
|
+
- 新名称是否与可见 binding 冲突。
|
|
320
|
+
- 别名和闭包引用是否仍然成立。
|
|
321
|
+
- 动态属性和反射是否可能绕过静态引用。
|
|
322
|
+
- 删除后是否仍有未处理引用。
|
|
323
|
+
|
|
324
|
+
按标识符文本全局替换不能通过验收。
|
|
325
|
+
|
|
326
|
+
### 8.4 副作用与异常
|
|
327
|
+
|
|
328
|
+
检查:
|
|
329
|
+
|
|
330
|
+
- getter、setter、Proxy 和隐式转换。
|
|
331
|
+
- 调用、构造、赋值和全局状态。
|
|
332
|
+
- 求值次数与求值顺序。
|
|
333
|
+
- `this`、`arguments` 和调用形式。
|
|
334
|
+
- `throw / catch / finally`、提前返回和终止路径。
|
|
335
|
+
- 短路、条件分支和动态代码。
|
|
336
|
+
|
|
337
|
+
删除前必须证明被删结构没有仍需保留的副作用,或明确把删除列为高风险用户决策。
|
|
338
|
+
|
|
339
|
+
### 8.5 行为检查
|
|
340
|
+
|
|
341
|
+
只在安全、可授权且与产物类型相关时使用。
|
|
342
|
+
|
|
343
|
+
可选检查:
|
|
344
|
+
|
|
345
|
+
- 对纯函数进行冻结输入的前后输出比较。
|
|
346
|
+
- 比较局部 helper 或 decoder 的结果。
|
|
347
|
+
- 比较声明的公开导出、异常或外部输出。
|
|
348
|
+
- 比较固定输入下的已知行为摘要。
|
|
349
|
+
|
|
350
|
+
不得执行派生分析视图并把结果冒充原始目标行为。`node:vm` 也不得描述为不可信代码的安全沙箱。
|
|
351
|
+
|
|
352
|
+
## 9. 高风险变换的附加验收
|
|
353
|
+
|
|
354
|
+
以下步骤至少视为高风险:
|
|
355
|
+
|
|
356
|
+
- `eval`、`Function` 或动态载荷改写。
|
|
357
|
+
- 反调试、环境检测或全局代码删除。
|
|
358
|
+
- 控制流展开和非平凡分支删除。
|
|
359
|
+
- 函数替换、stub 或入口改变。
|
|
360
|
+
- 高语义命名。
|
|
361
|
+
- 依赖单次动态观测的批量写回。
|
|
362
|
+
|
|
363
|
+
除通用验收外,还要求:
|
|
364
|
+
|
|
365
|
+
```text
|
|
366
|
+
用户明确批准
|
|
367
|
+
替代方案与不处理后果
|
|
368
|
+
所有语义前提
|
|
369
|
+
引用和副作用专项检查
|
|
370
|
+
异常与终止路径检查
|
|
371
|
+
适用的前后行为对照
|
|
372
|
+
回滚或上一个通过版本
|
|
373
|
+
未覆盖路径
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
控制流步骤还要证明 dispatcher 顺序、case 完整性、fall-through、`break / continue / return / throw` 和异常处理。
|
|
377
|
+
|
|
378
|
+
重命名步骤还要证明唯一 binding、新名无冲突、声明与引用数量守恒、shadow 未改;若声称只改变名称,可使用忽略 Identifier 名称的结构指纹辅助验证。
|
|
379
|
+
|
|
380
|
+
## 10. 动态证据验收
|
|
381
|
+
|
|
382
|
+
每个动态或 hybrid 结论记录:
|
|
383
|
+
|
|
384
|
+
```text
|
|
385
|
+
question_id
|
|
386
|
+
原始目标路径与运行前后 hash
|
|
387
|
+
实际执行文件与 hash
|
|
388
|
+
运行时、版本、mode 和环境摘要
|
|
389
|
+
输入、配置、时间和随机数
|
|
390
|
+
前置状态、entry 和 trigger
|
|
391
|
+
观测层级 L0~L4
|
|
392
|
+
trigger / probe / instrumented 路径与 hash
|
|
393
|
+
runtime patched: true / false
|
|
394
|
+
完整重放命令
|
|
395
|
+
原始 stdout / stderr / 日志
|
|
396
|
+
观察到的值、顺序、次数、异常和栈
|
|
397
|
+
源码映射
|
|
398
|
+
覆盖路径与未覆盖路径
|
|
399
|
+
Observed / Inferred / Unknown
|
|
400
|
+
明确非结论
|
|
401
|
+
是否足以支持当前变换
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
验收:
|
|
405
|
+
|
|
406
|
+
- 原始文件 hash 前后不变。
|
|
407
|
+
- 实际执行对象没有被含糊写成“目标代码”。
|
|
408
|
+
- 日志保留原始版本,不只保存解析摘要。
|
|
409
|
+
- L3 标记 `runtime patched`。
|
|
410
|
+
- L4 仅运行独立副本,并明确证据降级。
|
|
411
|
+
- 结果映射到原始位置和当前 AST 视图。
|
|
412
|
+
- 输入、环境、trigger 和覆盖与问题契约一致。
|
|
413
|
+
- 单次运行没有被推广为全部输入或路径。
|
|
414
|
+
- 属性读取、模块存在和 API 调用没有被自动解释为最终算法依赖。
|
|
415
|
+
|
|
416
|
+
动态事实不足以支持 mutation scope 时,缩小修改范围或保持 `blocked`。
|
|
417
|
+
|
|
418
|
+
## 11. 无 probe / 有 probe A/B
|
|
419
|
+
|
|
420
|
+
L3 runtime Hook 必须保留 A/B。L1 调试器或其他可能显著影响时序的观测也应进行适用对照。
|
|
421
|
+
|
|
422
|
+
### 11.1 对照条件
|
|
423
|
+
|
|
424
|
+
A 与 B 尽量固定:
|
|
425
|
+
|
|
426
|
+
- 同一原始目标 hash。
|
|
427
|
+
- 同一运行时和版本。
|
|
428
|
+
- 同一输入、配置和前置状态。
|
|
429
|
+
- 同一时间、随机数策略和网络条件。
|
|
430
|
+
- 同一 trigger、次数、超时和事件循环推进。
|
|
431
|
+
|
|
432
|
+
唯一计划差异应是 probe 或 Hook。
|
|
433
|
+
|
|
434
|
+
### 11.2 比较内容
|
|
435
|
+
|
|
436
|
+
至少比较:
|
|
437
|
+
|
|
438
|
+
- 是否完成或超时。
|
|
439
|
+
- 返回值与异常。
|
|
440
|
+
- 公开输出和外部副作用。
|
|
441
|
+
- 调用顺序与次数。
|
|
442
|
+
- 被观测参数和值。
|
|
443
|
+
- 与当前问题相关的日志。
|
|
444
|
+
- 明显时序和资源差异。
|
|
445
|
+
|
|
446
|
+
### 11.3 解释
|
|
447
|
+
|
|
448
|
+
- A/B 一致只降低已观察范围内的干扰疑虑,不证明绝对无影响。
|
|
449
|
+
- A/B 不一致时,先把差异作为证据记录,不能选择性忽略。
|
|
450
|
+
- 无 probe 基线无法取得目标值,不等于无法比较其他公开行为。
|
|
451
|
+
- Hook 无法隐藏的可观察差异必须进入风险和非结论。
|
|
452
|
+
|
|
453
|
+
## 12. 确定性与可重放性
|
|
454
|
+
|
|
455
|
+
### 12.1 机械产物
|
|
456
|
+
|
|
457
|
+
相同输入、工具版本、配置和命令重复执行时,应得到:
|
|
458
|
+
|
|
459
|
+
- 相同输出 hash,或已解释的非语义差异。
|
|
460
|
+
- 相同匹配、修改、跳过和残留数量。
|
|
461
|
+
- 相同映射和报告关键字段。
|
|
462
|
+
- 相同退出状态。
|
|
463
|
+
|
|
464
|
+
若输出含时间戳、绝对路径或不稳定排序,先消除非必要不确定性;不能消除时单独标记。
|
|
465
|
+
|
|
466
|
+
### 12.2 动态结果
|
|
467
|
+
|
|
468
|
+
能够冻结的输入和环境应重复运行。结果不一致时记录:
|
|
469
|
+
|
|
470
|
+
- 变化字段。
|
|
471
|
+
- 时间、随机数、调度、网络或宿主状态。
|
|
472
|
+
- 变化是否影响当前问题。
|
|
473
|
+
- 可以支持的最窄结论。
|
|
474
|
+
|
|
475
|
+
不可重复的单次观察可以保留为 `Observed`,但不能被包装成确定性规律。
|
|
476
|
+
|
|
477
|
+
### 12.3 可重放包
|
|
478
|
+
|
|
479
|
+
至少保存:
|
|
480
|
+
|
|
481
|
+
```text
|
|
482
|
+
输入与 hash
|
|
483
|
+
工具和版本
|
|
484
|
+
配置
|
|
485
|
+
transform / trigger / probe
|
|
486
|
+
命令
|
|
487
|
+
原始日志
|
|
488
|
+
输出与 hash
|
|
489
|
+
验证报告
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
## 13. 验收失败分流
|
|
493
|
+
|
|
494
|
+
出现以下情况视为失败或阻塞:
|
|
495
|
+
|
|
496
|
+
- parse 或适用语法检查失败。
|
|
497
|
+
- 匹配范围漂移。
|
|
498
|
+
- 修改了 mutation scope 之外的结构。
|
|
499
|
+
- 删除后仍有引用或副作用未解释。
|
|
500
|
+
- shadow、binding 或别名关系改变。
|
|
501
|
+
- 不相关指标意外变化。
|
|
502
|
+
- 动态事实与静态假设冲突。
|
|
503
|
+
- A/B 出现未解释差异。
|
|
504
|
+
- 重复运行不一致且影响当前结论。
|
|
505
|
+
- 映射或覆盖不足。
|
|
506
|
+
|
|
507
|
+
失败后:
|
|
508
|
+
|
|
509
|
+
1. 保留上一个通过版本。
|
|
510
|
+
2. 保存失败输入、输出、日志和事实。
|
|
511
|
+
3. 缩小步骤、修正假设、重新取证或停止。
|
|
512
|
+
4. 不连续追加例外直到“看起来通过”。
|
|
513
|
+
5. 不自动进入下一个 transform。
|
|
514
|
+
6. 需要扩大风险、执行范围或证据模式时重新交给用户决定。
|
|
515
|
+
|
|
516
|
+
新混淆层暴露不是 transform 自动失败,但必须重新画像,不能沿用旧候选列表直接继续。
|
|
517
|
+
|
|
518
|
+
## 14. 单步报告
|
|
519
|
+
|
|
520
|
+
通过或失败都要报告:
|
|
521
|
+
|
|
522
|
+
```text
|
|
523
|
+
步骤目标与具体问题
|
|
524
|
+
用户批准范围
|
|
525
|
+
输入、输出、transform 与 hash
|
|
526
|
+
证据模式和产物类型
|
|
527
|
+
Observed / Inferred / Unknown
|
|
528
|
+
匹配、修改、跳过和残留
|
|
529
|
+
引用、binding、shadow、别名和副作用检查
|
|
530
|
+
动态环境、补丁、A/B 和覆盖(如适用)
|
|
531
|
+
确定性与可重放结果
|
|
532
|
+
原始到派生映射
|
|
533
|
+
验收状态和失败事实
|
|
534
|
+
仍未证明的结论
|
|
535
|
+
最新画像变化
|
|
536
|
+
下一候选或停止状态
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
不要只报告“syntax passed”“命中全部”或“代码变短”。
|
|
540
|
+
|
|
541
|
+
## 15. 关闭与交接验收
|
|
542
|
+
|
|
543
|
+
### 15.1 进入关闭候选
|
|
544
|
+
|
|
545
|
+
只有同时满足以下条件,才能建议关闭 AST 阶段:
|
|
546
|
+
|
|
547
|
+
- 用户的具体问题已经回答,或当前约定分析深度已有明确成果。
|
|
548
|
+
- 影响当前方向的主要隐藏层已处理、明确 blocked 或准备 handoff。
|
|
549
|
+
- 当前阶段需要的入口、数据流、外部输出或稳定坐标已经按相关性建立。
|
|
550
|
+
- 所有接受步骤都有证据、映射和验收记录。
|
|
551
|
+
- 所有剩余问题已分类。
|
|
552
|
+
- 没有未经用户评审的高收益、高置信 AST 候选。
|
|
553
|
+
- 最新视图更适合阅读、搜索、定位、观测或交接。
|
|
554
|
+
|
|
555
|
+
第三方短名仍存在、分析视图不可独立运行或 VM 未还原,不是拒绝关闭的理由。
|
|
556
|
+
|
|
557
|
+
### 15.2 关闭建议
|
|
558
|
+
|
|
559
|
+
必须展示:
|
|
560
|
+
|
|
561
|
+
```text
|
|
562
|
+
用户原始请求与当前工作目标
|
|
563
|
+
已经证明什么
|
|
564
|
+
最新分析视图与 hash
|
|
565
|
+
仍然存在什么
|
|
566
|
+
blocked 与 handoff 项
|
|
567
|
+
为什么建议停止
|
|
568
|
+
继续的可选收益、成本与风险
|
|
569
|
+
交接方向
|
|
570
|
+
```
|
|
571
|
+
|
|
572
|
+
只有用户确认后才能标记 `COMPLETE`。
|
|
573
|
+
|
|
574
|
+
### 15.3 交接验收
|
|
575
|
+
|
|
576
|
+
交接包至少包含:
|
|
577
|
+
|
|
578
|
+
- 原始目标和最新视图 hash。
|
|
579
|
+
- 分步 transform 与映射。
|
|
580
|
+
- 已知入口、输入、输出和公开 API。
|
|
581
|
+
- 静态与动态证据。
|
|
582
|
+
- 运行环境、trigger、补丁与覆盖。
|
|
583
|
+
- 跳过和 blocked 项。
|
|
584
|
+
- 未证明依赖。
|
|
585
|
+
- 下一阶段具体问题。
|
|
586
|
+
|
|
587
|
+
交接是正确结束,不是验证失败。
|
|
588
|
+
|
|
589
|
+
## 16. 最终自检
|
|
590
|
+
|
|
591
|
+
- [ ] G1 原始输入已冻结且 hash 未变。
|
|
592
|
+
- [ ] G2 使用可追溯的本地 Prettier,格式化副本可解析。
|
|
593
|
+
- [ ] G3 直接阅读区间覆盖完整格式化文件。
|
|
594
|
+
- [ ] G4 区分模式家族数、出现次数和影响范围。
|
|
595
|
+
- [ ] 高价值候选均有具体问题、证据模式和最小方法。
|
|
596
|
+
- [ ] 每一步声明产物类型和用户批准范围。
|
|
597
|
+
- [ ] Parse、引用、binding、shadow、别名、副作用和异常检查按需完成。
|
|
598
|
+
- [ ] 动态证据记录 L0~L4、hash、trigger、原始日志、映射和覆盖。
|
|
599
|
+
- [ ] L3 有 `runtime patched` 标记和 A/B。
|
|
600
|
+
- [ ] L4 只修改独立副本且证据已降级。
|
|
601
|
+
- [ ] 确定性或不确定性边界已记录。
|
|
602
|
+
- [ ] 验收失败保留上一个通过版本。
|
|
603
|
+
- [ ] 关闭前不存在未经用户评审的高收益候选。
|
|
604
|
+
- [ ] `COMPLETE` 只在用户确认后使用。
|