1.9 KiB
1.9 KiB
字符串表与最小求值
这份文档用于处理字符串表、解码包装、局部别名链和最小引导 eval。
适用场景
- 文件开头几条语句就在初始化解码器。
- 顶层 IIFE 里传入数组、对象或字符串表。
- 源码里大量出现
fn(12)、arr[123]、String.fromCharCode(...)。 - 第一层去壳之后,函数内部还存在二次字符串恢复。
推荐顺序
- 先定位数组字面量、解码函数和别名链。
- 尽量优先做静态恢复,例如数组下标、纯字面量拼接、纯数字参数调用。
- 只有静态无法推进时,才执行最小引导代码。
- 删除已经消费掉的引导声明或包装层。
- 重新 parse 一次,再进入控制流还原阶段。
最小引导 eval 原则
- 只执行前几条足以构造解码器的代码。
- 不要直接执行整份源文件。
- 不要在未隔离的环境里执行明显依赖 DOM、
window、定时器或网络的逻辑。 - 求值目标应尽量窄,例如“只恢复数字参数到字符串的函数调用”。
常见模式
顶层 IIFE 带数组参数
- 从顶层调用提取
formalParam -> actualArg映射。 - 只替换明确命中的数组下标访问。
- 处理包装函数里直接可展开的语句块。
前几条语句就是解密引导
- 只截取前 2 到 5 条关键语句。
- 建立最小运行时后,恢复只带字面量参数的调用点。
- 删除已消费的引导语句。
去掉第一层后,局部函数还有二次恢复
- 先展开顶层 IIFE。
- 重新 parse。
- 再识别函数内部那组“构造器 + 成员表达式 + 数字下标”的模式。
停止条件
- 主要字符串表已经恢复。
- 核心解码器入口已经清楚。
- 剩余部分不再适合纯静态恢复。
满足以上条件后,应切换到控制流或结构标准化阶段。