原创 Eastmount & YZX 2026-10-20 17:55 贵州

融合LLM的JavaScript解混淆工作,希望您喜欢!
“2024年4月28日是Eastmount的安全星球 —— 『网络攻防和AI安全之家』正式创建和运营的日子。该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。
”
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期待与您前行。
前一篇博客介绍了NDSS2026 秋季录用的智能体安全和系统安全方向的文章。本文将带来NDSS 2026的一篇论文,该工作提出了 JSIMPLIFIER,旨在概述动静态与LLM如何协同完成JavaScript解混淆?该工作提出了一条非常明确的处理链:先使输入代码可解析,再通过静态—动态协同恢复实际逻辑,最后使用LLM改善标识符与代码的可读性。注意,由于我们团队还在不断成长和学习中,写得不好的地方还请海涵,未来希望能多读多分享,这些大佬真值得我们学习。fighting!
文章目录

论文:From Obfuscated to Obvious: A Comprehensive JavaScript Deobfuscation Tool for Security Analysis
作者:Dongchao Zhou, Lingyun Ying, Huajun Chai, Dongbin Wang
主题:JavaScript反混淆、程序分析、安全语义恢复、LLM辅助代码可读性
会议:NDSS 2026
代码:https://github.com/XingTuLab/JSIMPLIFIER
参考:奇安信星图实验室论文分享
笔记作者:贵州大学 杨子轩 杨秀璋
在恶意JavaScript分析中,困难往往不是拿不到脚本,而是拿到了也难以判断脚本究竟做了什么。一段看起来由奇怪变量、字符串数组、编码表达式和动态调用组成的JavaScript,实际可能包含访问来源判断、恶意页面注入与痕迹清除等行为。只把脚本格式化,或者只让LLM“猜测”其含义,都不能保证还原后的程序仍与原程序等价。
1.1 三个真实挑战
论文从真实恶意脚本和现有工具的缺陷出发,凝练出三个问题:
关键挑战 | 具体表现 | 对系统设计的要求 |
|---|
| 输入格式多样 | 畸形语法、旧编码、混合字符、Webpack等打包结果 | 先修复/统一格式,让后续AST分析有可靠输入 |
| 多层混淆复杂 | 静态字符串变换与运行时eval、动态求值等叠加 | 静态AST分析与受控动态执行应互补协同 |
| 人工理解困难 | 逻辑部分恢复后仍保留_0x...等无意义变量名 | 语义重命名、代码美化和人工核查不可缺少 |

1.2 20种混淆技术,分成四类
作者整理了4个层级、20种混淆技术(T0—T19),而不是“20个类别”。
混淆层级 | 数量 | 典型技术 | 主要变化 |
|---|
词法级(Lexical) | 5 | 标识符重命名、间接属性访问、字符串/布尔编码 | 改变词法形式,基本结构保持 |
语法级(Syntactic) | 6 | 表达式/赋值转函数、反转字符串、AAEncode、JJEncode、JSFUCK | 改变代码组织和表达方式 |
语义级(Semantic) | 7 | 字符串数组、控制流平坦化、死代码插入、动态eval | 深度改变实现过程,保留预期行为 |
多层混淆(Multi-layer) | 2 | OB混淆、LLM辅助混淆 | 多种技术嵌套与组合 |

整个框架包含三部分:Preprocessor、Deobfuscator、Humanizer。下方是一段JavaScript从混淆到可读代码的逐步变化。

2.1 第一阶段:Preprocessor——使混淆代码成为可分析输入
预处理器的主要任务是确保不同来源的JavaScript能够进入稳定的分析流水线。原图列出五个步骤:
很多检测/解混淆工作将重点放在“模型”上,但预处理失败会使之后所有算法无从谈起。输入有效性、版本兼容性、作用域正确性,实际上是安全工具落地时容易被低估的工程瓶颈。
2.2 第二阶段:Deobfuscator——静态与动态双向协同
这是我认为全文最关键的技术部分。它不是简单地把两个引擎串联,而是建立静态移交动态、动态结果回填静态的协作方式。

对静态阶段无法安全求值的内容,系统基于分析条件识别可移交片段,并结合上下文在受控环境中计算;执行结果按类型转换为AST节点,再参与后续静态处理。这里的动态执行并非允许任意真实恶意脚本直接在宿主环境中运行。

2.3 第三阶段:Humanizer——LLM主要改善可读性
系统使用LLM进行上下文感知的标识符重命名,并用Prettier进行格式化;论文把核心逻辑恢复交给AST分析与受控执行,而不是依赖LLM直接生成整份恢复后的程序。例如,将无意义的标识符改为更符合代码功能的名称,有助于安全分析师迅速定位行为。
这一点看似普通,却牵涉到关键安全边界:“代码读起来合理”不等于“代码语义已经被严格保持”。后文Table III、Appendix H正是检验这条边界的重要证据。
3.1 三套互补数据
数据集 | 样本数量 | 平均文件大小 | 来源与目的 |
|---|
| MalJS | 23,212 | 391.78 KB | 企业伙伴提供真实恶意样本,经清洗、去重、分层取样 |
| BenignJS | 21,209 | 41.40 KB | 网站与GitHub等来源,用于良性样本和相关评估 |
| CombiBench | 1,296 | 8.06 KB | 来自JsDeObsBench的复杂组合混淆子集,用于基准对比 |
MalJS从超过1,000万份候选样本出发,经合法性筛选与内容归一化去重,再按混淆复杂度取样。BenignJS的21,209条中,包括19,209条网站混淆样本及2,000条人工核对的干净脚本。

3.2 评价维度
作者同时考察:技术覆盖能力、结果正确性、语义一致性、代码简化度、熵值变化、代码可读性。这些指标回答不同的问题:
4.1 20类混淆技术的覆盖能力

原论文 Table II。√表示完全成功,○表示部分成功,空白表示不支持;横向比较不同工具对T0—T19技术的处理能力。
在这项按20种混淆技术构建的能力实验中,JSIMPLIFIER覆盖全部20项。与之相比,传统工具往往只处理其中一部分技术,复杂语义级和多层混淆更难。
- “20/20技术可处理”是技术覆盖结果,不意味着所有现实样本都已被证明100%保留原始语义。
4.2 正确性和语义一致性

研究者对不一致的17条样本进行了失败分析,问题包括控制流改变、变量依赖破坏、API行为变化、计算差异等,若干样本同时具有多种问题。作者把重要失败原因归结为LLM变量重命名可能误解动态作用域/变量绑定。

4.3 代码简化与熵值:效果如何量化?
HLR=0.8820意味着在论文采用的Halstead长度定义下,简化幅度约为88.20%。

图2对比MalJS与BenignJS处理前后文本熵、AST熵的变化。作者在大规模样本上分析了文本熵和AST熵,其中熵分析仅使用Preprocessor与Deobfuscator,不包含Humanizer,以减少LLM引入的额外变化。

4.4 模块消融
下表展示1,000条MalJS样本上的模块组合实验。静态分析负责主要的结构/表达式还原,动态监控进一步扩展能力,Humanizer负责标识符语义增强;但调用LLM显著增加时延(Section V-G)。


4.5 运行效率与真实部署分析
表7展示了MalJS整体运行性能。 JSIMPLIFIER更像面向离线安全分析的综合工具,而非无需权衡就可直接放到毫秒级在线告警链路中的轻量检测器。对未来工程化研究而言,“何时需要昂贵的LLM阶段”是一个很有价值的独立问题。

四模型评估给出的平均相对提升为466.94%;这反映模型评价的可读性分数变化,不应改写为“程序性能提升466.94%”。另一个100条样本的GPT-4o-mini标识符重命名实验发现约12%重命名幻觉率,再次显示自然语言模型对变量语义推断存在风险。
此外,作者还进行了小规模用户研究(9人,初级/中级/专家各3人)。其中初级参与者的任务评分相对原始代码提高12.7%,中级参与者平均分析时间缩短47.7%。

4.6 真实案例:JSFireTruck揭示安全行为
下图展示混淆脚本及经JSIMPLIFIER处理后的可读代码与行为提示

在JSFireTruck案例中,系统将复杂混淆表达式恢复为可读的JavaScript,使分析人员能够识别:依据document.referrer筛选访问来源、插入恶意iframe、调用document.currentScript.remove()清除脚本痕迹等行为。
5.1 三个主要贡献
- 综合式三阶段框架
面对异构输入、多层混淆和可读性不足,联合预处理、静态—动态反混淆和语义增强。
- 静态—动态双向协调
依据AST、作用域和受控执行结果进行上下文传递、类型感知回填,而非把两类分析独立拼接。
- 覆盖与评价体系结合
梳理20种混淆技术,构建MalJS/BenignJS数据集,并结合语法、语义、简化度、熵、可读性和用户研究开展多维验证。
5.2 论文自身承认的边界
原文局限(Section VI-D) | 我的理解 |
|---|
ES6+语法在兼容化中可能被降级 | 兼容性修复并非总能不损失语言特性 |
LLM可能误命名变量、误判动态作用域 | “增强可读性”同样需要语义约束与回退 |
动态执行面临潜在VM逃逸风险 | vm.runInNewContext并非无需额外隔离的绝对安全边界 |
无法处理外部密钥加密、定制解释器与部分时间依赖解密 | 方法有适用条件,并非通用恶意代码恢复器 |
对抗者可针对已有规则和分析机制设计新混淆 | 需要持续的真实样本验证与更新 |
此外,作者报告的83/100语义一致性、较高LLM阶段耗时,以及小规模用户研究,也都提醒读者不能仅据“覆盖20项技术”推断工具已在所有维度达到最优。
以下内容是结合本人对PowerShell恶意代码检测、LLM安全分析与智能体系统的兴趣提出的后续研究思考。
(1)启发一:从“LLM生成代码”转向“LLM辅助决策,工具确定性执行”
JSIMPLIFIER向我们提供的最直接启示,是把语言推理能力与确定性执行能力分离。代码语义恢复环节需要可检查、可重复的工具结果;LLM更适合做分析计划、上下文总结和解释。特别是在Table III与Appendix H出现重命名引入未定义变量的问题后,不能把“生成看似合理的代码”当作正确性的替代品。
可以考察“验证优先(verification-first)的智能体编排”:智能体仅负责选择AST分析、字符串恢复或受限行为追踪工具,最终输出必须通过程序约束、语义一致性与执行证据检查。
(2)启发二:向PowerShell场景扩展,但不能简单复制JavaScript方案
此前我们讨论过“ Verifiable Multi-Agent Planning for Instruction-Level PowerShell Deobfuscation”。借鉴JSIMPLIFIER的“多阶段恢复+语义核验”理念,并结合PowerPeeler已有的AST与运行时指令关联机制,设想四类角色协作:
智能体角色 | 可探索的职责 | 必须回答的科学问题 |
|---|
Planner | 根据静态结构与混淆特征制定工具调用计划 | 是否比固定规则流程减少无效操作? |
Executor | 调用现有解析/指令跟踪/沙箱等确定性工具 | 是否确保恢复的可复查性与环境隔离? |
Verifier | 对比CFG、DDG、API行为与运行结果,失败则回退 | 校验指标是否真的能够预测语义错误? |
Explainer | 只解释通过核验的结果并给出步骤记录 | 是否提升分析人员效率而不引入新语义风险? |
(3)启发三:建立“正确性—可读性—耗时”三目标评价,而非只比准确率
倾向于构建三层指标:功能正确性(受控语义差分/行为等价)、安全分析效用(分析耗时、关键行为识别、误解率)、部署成本(工具调用次数、时延、计算资源)。如果Agent决策带来额外20%耗时,却没有明显提高未知混淆恢复效果,就很难说明引入它的必要性。
(4) 启发四:让“失败案例”反过来指导新方法
这篇论文Appendix H中:在模型能让变量名更“有意义”的同时,也可能制造未定义变量和错误依赖。下一步工作如果只展示漂亮的成功示例,论证仍然很薄弱。 可以设计基于不确定性的“选择性LLM介入”:当变量绑定清晰时允许语义建议,遇到动态作用域、反射或高风险API链时保留原始名称或要求额外验证。实验需报告拒绝/回退比例、错误命名率、恢复成功率和额外时延,而不是只用主观可读性分数评价。
对于学习或复现不要直接在宿主电脑执行未知恶意脚本。程序分析和受控执行应遵循机构授权、隔离环境与安全实验规范。
读完这篇NDSS 2026论文,最深的体会可以浓缩成:
- 第一,好的安全系统工作要从真实分析痛点出发,按“问题—机制—证据”构建完整论证链。
- 第二,LLM并非必须接管全部工作;把它放在合适的规划、解释或可读性环节,并用程序分析和可验证约束兜底,往往更有研究价值。
- 第三,真正值得深挖的新Idea通常不是“再加一个Agent”,而是发现安全问题,再深度分析构建威胁模型,并证明新机制确实解决了它。
JSIMPLIFIER仍存在语义不一致、耗时和执行隔离等限制,但正因作者提供了较完整的实验与失败分析,它才为下一步可验证、多阶段、动态工具协同研究提供了值得持续追踪的起点。
『网络攻防和AI安全之家』目前收到了很多博友、朋友和老师的支持和点赞,并且保持每周七次更新,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!
(By:Eastmount 2026-10-20 周二夜于贵阳 )
前文推荐:
跳转微信打开