ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

VMP Prometheus 混淆还原实战

2026/10/7 8:21:03 拓冰建站 浏览量
VMP Prometheus 混淆还原实战 样本Prometheus.lua1,106 行Prometheus 混淆器字符串加密 VM 化控制流。最终还原出print(Hello, World!)输出与原脚本逐一比对一致。本文用到的所有解密还原工具已在文章末尾打包提供。一、保护结构解剖文件分上下两层泾渭分明1. 字符串加密层1~300 行w常量数组47 个加密字符串前缀字母标记编码方式——*开头走 Base64 变种g表做字符→6bit 映射每 4 字符解 3 字节结尾截断-开头走 Base256 变种A表字符→值映射索引函数L(x) w[x 33301]所有字符串访问都经过这层偏移间接寻址数组旋转解密前先对w做一次旋转重排——静态看数组顺序全是错的解密器本体两百多行算术混淆的解码循环2. VM 化控制流层301~1105 行16 个 VM 辅助函数主循环在 326~1005 行while k do if k X then ... endk是指令指针用一串k 魔数做二分查找式分发每个叶子是一条虚拟指令末尾k 新魔数跳转入口C(16442953, {})启动 VM魔数本身就是初始指令指针47 个明文基本是库函数名char/byte/floor/unpack/setmetatable…、元方法名__index/__len/__metatable、_ENV和少量随机串——典型的「查表调库」型 VM。二、还原思路核心思想让混淆器自己解自己。字符串层抽取第 1~300 行原始解密器代码直接运行 → dump 出全部 47 个明文 比重写算法可靠旋转、查表、算术混淆全由原始代码执行零误差 VM 层 在 while k 主循环插 io.stderr:write 记录 k 序列 → 拿到完整指令指针轨迹 Hook print/io.write 等标准库 → 拿到 VM 的全部外部调用 ↓ Prometheus_deobfuscated.lua结果VM 共执行1048 条指令、涉及 36 种不同 opcode只为完成一次print。三、关键点能跑就别重写解密器带数组旋转和一堆算术混淆手写复现一个下标错就全盘错把原代码抠出来跑它自己算对。这是 Prometheus 系含上篇 wearedevs的通用最优解。二分分发是纸老虎k 魔数的 if 树看着深trace 一次k序列全部现形。验证靠输出比对还原文件与原脚本输出逐字节一致即可收工不追求 VM 指令级语义还原。四、还原结果print(Hello, World!)五、小结Prometheus 的防护重心在「间接」字符串靠偏移旋转间接调用靠查表间接控制流靠状态号间接。拆法也对应一句话——所有间接都发生在运行时那就到运行时去截它跑它的解密器、记它的指令指针、hook 它的库调用。工具附件解密工具包括样本.zip