这些是用于生成 README 和案例说明中所引用测量结果的分析驱动脚本。它们是参数驱动且可复用的:每个脚本都在命令行接收 PE 路径(以及输出路径)。
从仓库根目录运行,例如:
python scripts/extended_census.py <pe> <dynamic_edges.tsv>
| 脚本 | 用途 |
|---|---|
verify_target_decodability.py | 针对对照群体对 native->VM 目标进行解码密度验证 |
verify_dynamic_coverage.py | 页面级集合交集,证明执行代码是否与分支点重叠 |
verify_dynamic_edges.py | 交叉引用并边界验证动态与静态边集 |
opaque_coverage.py | 动态遍历到达了静态不透明点集中的多少部分 |
extended_census.py | 将完整的间接分支普查与观测到的点进行核对 |
external_decryptor_scan.py | 扫描同级模块的页面保护/映射/写入能力 |
task1_slice_all.py | 完整静态切片:先进行惯用法解析,然后进行后向切片,并输出边 |
task1b_dynamic_codelike.py | 仅限于类代码 VM 条目的动态边恢复 |
task2_realctx.py | 从真实调用上下文进行模拟;恢复栈帧槽布局 |
task4_patch.py | 保持长度的去混淆补丁及包含性验证 |
其中几个脚本的存在是为了证伪某个论断,这也是它们被保留的原因:
verify_target_decodability.py — 将解码密度指标与对照群体进行比较。正是这个脚本表明,对三个目标的抽查并不具有代表性。verify_dynamic_coverage.py — 页面级集合交集,当追踪器在 300 万条指令中报告零个间接分支时,它证明了这是追踪器缺陷而非架构事实。extended_census.py — 表明最初的间接分支普查仅枚举了真实群体的 35%,因为它只匹配寄存器形式。external_decryptor_scan.py — 跨同级模块的能力扫描;为其构建的假设随后被动态无写入观察所否定,该否定结果随其一同记录。保持它们的诚实:一个只会确认的驱动脚本不值得保留。