Files
reverse-skills-max/vendor-new/xbsReverseSkill/web-js-env-patcher/references/wasm-worker-postmessage.md

4.1 KiB
Raw Blame History

WASM / Worker / postMessage 处理

本文件用于网页端 JS 补环境中遇到 Worker、WASM、iframe 或 postMessage 的情况。范围仍然限定在网页端 JS 运行链路,不扩展到 Native 逆向。

判断信号

  • 目标 JS 调用 new Worker()、SharedWorker()。
  • 入口函数返回 Promise,实际签名在异步消息中完成。
  • trace 出现 postMessage、onmessage、MessageChannel。
  • Network 中额外加载 .wasm 或 worker chunk。
  • 加密入口只负责封装消息,真正结果从回调返回。

处理顺序

  1. 记录主线程调用 postMessage 的消息体。
  2. 收集 Worker JS、动态 chunk、WASM 文件和初始化参数。
  3. 确认 Worker 返回消息格式:成功、失败、初始化完成、签名结果。
  4. 如果只是消息转发,优先在 Node 中模拟消息通道,不要直接改算法。
  5. 如果 WASM 参与网页签名,只记录 JS 调用边界和导出函数名;不要扩大到 Native 工具链。
  6. 读取 webapi-env-detection-matrix.md,把 Worker / iframe / postMessage 放入 WebAPI 环境检测矩阵;不只验证 API 存在,还要验证浏览器行为。
  7. 用 fixtures 验证异步结果,不以 Promise resolved 为完成。

Worker / postMessage 必查行为

  • Worker scope 必须有独立 performance、timeOrigin、performance.now() 序列;不得无证据复用主线程 performance。
  • Worker scope 的 self / globalThis 必须指向 WorkerGlobalScope 自身;window、document、top、parent、frames、localStorage 等 Window-only API 必须按浏览器 baseline 缺失。
  • Worker 的 ECMAScript/WebAPI 构造器和对象实例不得直接复用主 Window Realm 的引用。应验证 Object、Function、Array、Promise、Event、EventTarget、URL、Blob、Headers、Request、Response、XMLHttpRequest、navigator、performance、crypto 的 identity 与 instanceof。
  • Worker scope 的 setTimeout / clearTimeout 必须绑定 Worker 私有状态;Worker.prototype.terminate() 后 pending timer 和延迟 postMessage 必须清理或丢弃。
  • 同一 turn 内调用 terminate() 后,尚未入队与已经入队但未派发的 Worker message 都要按目标浏览器 baseline 处理;至少分别测试“立即 terminate”和“延迟 terminate”。
  • WorkerGlobalScope.self.postMessage() 与 MessagePort.prototype.postMessage() 必须以后续 task 派发;不得同步触发对端 listener。
  • MessagePort.start()、设置 onmessage 的隐式 start、close() 的发送端/接收端组合、entangled peer 解绑和 transfer 后原端口失效必须分别检测。
  • sender 已 close、receiver 已 close、双方 close、消息已排队后 close、transfer 后再次 postMessage 都必须有浏览器 baseline;不能只检查 peer 是否 closed。
  • addEventListener / removeEventListener / dispatchEvent 必须覆盖 listener object、capture、once、passive、stopImmediatePropagation 和 handleEvent。
  • MessagePort.prototype.postMessage(fn)、structuredClone(fn) 的 DataCloneError name / message / stack 不能暴露 JS fallback 源码。
  • iframe 参与消息链时,单独检查 contentWindow、contentDocument、defaultView、srcdoc、document.write/close、Window/IframeWindow ownKeys / ownNames。
  • 如果真实浏览器进入 final writer,而 Node 停在 continuation / reload writer,必须把 Worker / performance / iframe / postMessage 时序列入 writer 分支 diff。

记录模板

## Worker/WASM 消息链

- 主线程文件:
- Worker 文件:
- WASM 文件:
- 初始化消息:
- 签名请求消息:
- 签名响应消息:
- 依赖的浏览器环境:
- Node 模拟策略:真实 Worker / vm 模拟 / 手动封装消息通道
- 任务队列语义:同步 / 后续 task / microtask / timer
- Worker performance baseline:
- terminate 后 timer / postMessage 行为:
- MessagePort sender/receiver close、start、transfer:
- Worker Realm 构造器与对象 identity:
- iframe realm / ownKeys 状态:
- WebAPI 环境检测矩阵:
- 阻塞点: