8.0 KiB
8.0 KiB
模块输入输出契约
这份文档定义 future skill 每个核心模块的输入 / 输出边界,避免后续脚本和文档互相耦合。
1. 通用约定
所有模块尽量遵循同一套输入 / 输出字段。
输入
target- 当前要补的对象名或模块名
seed- 真实浏览器采集到的种子数据
runtime- 当前 Node / jsdom / vm 里的运行时对象
diagnostics- Proxy 吐环境日志、异常日志、堆栈、缺口清单
options- 开关项,如
protectNative、strictDescriptor、logOpen
- 开关项,如
输出
patchPlan- 本模块准备补哪些点
patchCode- 可执行补丁代码或代码片段
runtimeState- 补丁后应写入的运行态
validation- 本模块对应的检查点
residualRisk- 当前模块仍无法完全脚本化处理的风险
2. prototype-builder
输入
targetprototypeChainSnapshotinstanceShapeSnapshotconstructorMeta
输出
patchPlan- 构造函数
- 原型链
- 实例创建
- 全局挂载
patchCode- 构造函数定义代码
Object.setPrototypeOf/defineProperty代码
validationinstanceofObject.getPrototypeOfconstructor === Xxx
3. native-protector
输入
functionsgetterssettersexpectedNativeStringsmetaOverrides
输出
patchPlan- 哪些函数要保护
- 哪些 getter / setter 要保护
- 是否启用
toString.toString防护
patchCodeFunction.prototype.toString接管代码- 每个函数的 native 保护代码
validationfn.toString()fn.toString.toString()fn.namefn.length
4. descriptor-guard
输入
targetpropertyDescriptorssymbolTagsconstructorStrategy
输出
patchPlan- 哪些属性用数据描述符
- 哪些属性用访问器描述符
patchCodedefineProperty/defineProperties
validationgetOwnPropertyDescriptorpropertyIsEnumerableownKeys
5. navigator-module
输入
seed.navigatorseed.pluginsseed.mimeTypesseed.userAgentDatadiagnostics.navigator
输出
patchPlan- basic
- plugin graph
- async capability
- automation flags
patchCodeNavigator.prototypegetter / methodplugins/mimeTypes图结构构建
runtimeStatenavigator实例值
validationwebdriverplugins.lengthmimeTypes.lengthgetBatteryuserAgentData
6. document-module
输入
seed.documentseed.cookiediagnostics.documentspecialCases.documentAll
输出
patchPlan- basic document
- cookie accessor
- query API
- special object
patchCodeDocument.prototype/HTMLDocument.prototypedocument.cookiegetter / setter
validationdocument.URLdocument.readyStatedocument.cookiedocument.all
residualRisk- 若无底层支持,明确标记
document.all为特殊风险
- 若无底层支持,明确标记
7. storage-module
输入
seed.localStorageseed.sessionStorageseed.cookiesdiagnostics.storage
输出
patchPlan- shape
- state
- cookie linkage
patchCodeStorage.prototype- state merge logic
runtimeState- 预置 key/value
validationlengthgetItemsetItemremoveItemclear
8. fingerprint-module
输入
seed.fingerprintseed.screenseed.navigatordiagnostics.fingerprint
输出
patchPlan- canvas
- webgl
- battery
- screen
patchCodetoDataURLgetContextgetParametergetBattery
runtimeState- 指纹种子池
validation- canvas 输出
- WebGL vendor / renderer
- battery 值
- screen / window 尺寸一致性
9. performance-module
输入
seed.performanceseed.windowMetricsdiagnostics.performance
输出
patchPlanperformance.nowperformance.timeOriginperformance.timing- 时间一致性修正
patchCodeperformance对象与 timing 结构
validationperformance.now()performance.timeOriginperformance.timing.navigationStart- 各 timing 字段前后顺序关系
10. crypto-module
输入
seed.cryptodiagnostics.cryptotypedArraySupport
输出
patchPlanwindow.cryptowindow.msCryptogetRandomValuessubtle
patchCodegetRandomValues实现- typed array 校验与异常逻辑
validationUint8ArrayUint16ArrayUint32Array- 长度超限异常
11. webrtc-module
输入
seed.webrtcdiagnostics.webrtcnetworkPolicy
输出
patchPlanRTCPeerConnectionRTCRtpSenderRTCRtpReceiverRTCDataChannel- ICE candidate 路径
patchCode- 构造函数与方法补丁
createOffercreateDataChannelonicecandidate
validation- 构造函数存在性
createOffer()createDataChannel()- 是否泄露本地候选信息
12. audio-fingerprint-module
输入
seed.audiodiagnostics.audio
输出
patchPlanAudioContextOfflineAudioContextAudioBuffergetChannelData
patchCode- 构造函数
- 音频缓冲返回值
- 常见指纹链路模拟
validationnew AudioContext()new OfflineAudioContext()getChannelData()- 是否满足基础音频指纹调用流程
13. worker-module
输入
seed.workerdiagnostics.workermessagePolicy
输出
patchPlanWorkerSharedWorkerpostMessageMessagePortBroadcastChannel
patchCode- 构造函数
- 端口通信对象
- message 事件
validationnew Worker()new SharedWorker()postMessageonmessage
14. math-precision-module
输入
seed.mathdiagnostics.mathbaselineResults
输出
patchPlan- 高风险数学函数差异校验
- 浏览器 / Node 结果对照
patchCode- 精度修正策略
- 或风险标注代码
validation- 与基线结果比对
- 是否命中已知高风险函数
15. proxy-observer
输入
targetslogConfigskipRulesmaxDepth
输出
patchCode- Proxy 包装代码
diagnosticsmissingPathsdescriptorAccessprototypeAccessinvocationErrors
validation- 是否成功捕获
get/set/has/apply/construct
- 是否成功捕获
16. stack-clean-module
输入
runtimeErrorstackRulesscriptName
输出
patchCode- 栈清洗函数
validation- 清洗前后栈帧差异
residualRisk- 说明是否需要底层 runtime 配合
17. document-all-module
输入
modenative-addonv8-apifallback
diagnostics.documentAll
输出
patchPlan- 选择的实现路线
patchCode- 若有底层支持,输出接线代码
- 若无底层支持,输出降级兼容代码
validation== undefined=== undefinedtypeof- 调用行为
residualRisk- 清楚声明纯 JS 限制
18. 模块依赖关系
执行顺序建议:
prototype-builderdescriptor-guardnative-protector- 浏览器对象模块
performance-modulecrypto-modulefingerprint-moduleaudio-fingerprint-modulewebrtc-moduleworker-moduleproxy-observermath-precision-modulestack-clean-moduledocument-all-module
如果站点在早期就卡死在 document.all,可以把最后一步提前。