《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期待与您前行,加油。
前一篇博客介绍了NDSS2026 秋季录用的智能体安全和系统安全方向的文章。本文将带来NDSS 2026的一篇论文,该工作提出了 JSIMPLIFIER,旨在概述动静态与LLM如何协同完成JavaScript解混淆?该工作提出了一条非常明确的处理链:先使输入代码可解析,再通过静态---动态协同恢复实际逻辑,最后使用LLM改善标识符与代码的可读性。注意,由于我们团队还在不断成长和学习中,写得不好的地方还请海涵,未来希望能多读多分享,这些大佬真值得我们学习。fighting!
- 欢迎关注作者新建的『网络攻防和AI安全之家』知识星球(文章末尾)
文章目录
- 一、研究背景:为什么JavaScript反混淆仍然很难?
-
- [1.1 三个真实挑战](#1.1 三个真实挑战)
- [1.2 20种混淆技术,分成四类](#1.2 20种混淆技术,分成四类)
- 二、核心方法:JSIMPLIFIER的三阶段技术框架
-
- [2.1 第一阶段:Preprocessor------使混淆代码成为可分析输入](#2.1 第一阶段:Preprocessor——使混淆代码成为可分析输入)
- [2.2 第二阶段:Deobfuscator------静态与动态双向协同](#2.2 第二阶段:Deobfuscator——静态与动态双向协同)
- [2.3 第三阶段:Humanizer------LLM主要改善可读性](#2.3 第三阶段:Humanizer——LLM主要改善可读性)
- 三、数据集与评价
-
- [3.1 三套互补数据](#3.1 三套互补数据)
- [3.2 评价维度](#3.2 评价维度)
- 四、关键实验结果
- [4.1 20类混淆技术的覆盖能力(Table II)](#4.1 20类混淆技术的覆盖能力(Table II))
- [4.2 正确性和语义一致性](#4.2 正确性和语义一致性)
- [4.3 代码简化与熵值:效果如何量化?](#4.3 代码简化与熵值:效果如何量化?)
- [4.4 模块消融](#4.4 模块消融)
- [4.5 运行效率与真实部署分析](#4.5 运行效率与真实部署分析)
- [4.6 真实案例:JSFireTruck揭示安全行为](#4.6 真实案例:JSFireTruck揭示安全行为)
- 五、贡献与局限
-
- [5.1 三个主要贡献](#5.1 三个主要贡献)
- [5.2 论文自身承认的边界](#5.2 论文自身承认的边界)
- 六、个人理解
- 总结

论文 :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分析中,困难往往不是拿不到脚本,而是拿到了也难以判断脚本究竟做了什么。一段看起来由奇怪变量、字符串数组、编码表达式和动态调用组成的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辅助混淆 | 多种技术嵌套与组合 |

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

2.1 第一阶段:Preprocessor------使混淆代码成为可分析输入
预处理器的主要任务是确保不同来源的JavaScript能够进入稳定的分析流水线。原图列出五个步骤:
- Code Validity Check:使用Meriyah进行容错解析与AST构造。
- Lexical Sanitize:转换旧式八进制转义、处理编码冲突和多字节字符的重建。
- Semantic Compatibilize:针对旧式语法和平台相关构造进行兼容性转换。
- Structural Refine:处理作用域与声明冲突等结构问题。
- Code Unminify:识别并拆解打包器形成的复杂结构,改善后续分析条件。
很多检测/解混淆工作将重点放在"模型"上,但预处理失败会使之后所有算法无从谈起。输入有效性、版本兼容性、作用域正确性,实际上是安全工具落地时容易被低估的工程瓶颈。
2.2 第二阶段:Deobfuscator------静态与动态双向协同
这是我认为全文最关键的技术部分。它不是简单地把两个引擎串联,而是建立静态移交动态、动态结果回填静态的协作方式。
| 分析子模块 | 关键机制 | 解决的问题 |
|---|---|---|
| Static AST Analysis | 多解析器后备、表达式求值、短路逻辑、作用域跟踪 | 还原可由AST结构与静态上下文确定的表达式 |
| Dynamic Monitoring | 执行前风险评估、Node.js vm.runInNewContext受控执行、限制资源 |
捕获静态分析无法求出的运行时值 |
| Hybrid Analysis Coordination | 将难求值表达式与作用域上下文打包;对执行结果做类型感知AST替换 | 建立静态→动态→静态的证据闭环 |
对静态阶段无法安全求值的内容,系统基于分析条件识别可移交片段,并结合上下文在受控环境中计算;执行结果按类型转换为AST节点,再参与后续静态处理。这里的动态执行并非允许任意真实恶意脚本直接在宿主环境中运行。
- 最重要的设计细节是 "边界条件":哪些片段适合静态求值?哪些需要动态执行?执行得到的值能否安全、准确地写回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 评价维度
作者同时考察:技术覆盖能力、结果正确性、语义一致性、代码简化度、熵值变化、代码可读性。这些指标回答不同的问题:
- 覆盖能力:面对T0---T19,工具能否处理?
- 语法正确性:输出代码能否满足语法要求?
- 语义一致性:控制流、数据依赖与实际行为是否保留?
- 简化度:Halstead Length Reduction(HLR)、Halstead Effort Reduction(HER)是否改善?
- 熵值:代码文本和AST结构复杂度是否变化?
- 可读性:分析人员或评价模型是否更容易理解代码?
四、关键实验结果
4.1 20类混淆技术的覆盖能力(Table II)

原论文 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()清除脚本痕迹等行为。
- 这比单纯报告"解混淆成功"更有说服力,因为它将代码转换结果与真实安全分析任务对应起来:人能否更快定位与解释恶意行为? 建议读论文时特别关注这类贯穿引言、框架设计和案例验证的running example。
五、贡献与局限
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 | 只解释通过核验的结果并给出步骤记录 | 是否提升分析人员效率而不引入新语义风险? |
- 边界必须讲清 :PowerPeeler的指令级解混淆与JSIMPLIFIER的静态---动态整合都是已有成果 ;如果仅把固定流程包装成四个Agent,并不必然形成新贡献。真正需要验证的是自主规划是否改善复杂混淆下的成功率/效率,语义校验闭环是否降低错误输出。
(3)启发三:建立"正确性---可读性---耗时"三目标评价,而非只比准确率
倾向于构建三层指标:功能正确性 (受控语义差分/行为等价)、安全分析效用 (分析耗时、关键行为识别、误解率)、部署成本(工具调用次数、时延、计算资源)。如果Agent决策带来额外20%耗时,却没有明显提高未知混淆恢复效果,就很难说明引入它的必要性。
(4) 启发四:让"失败案例"反过来指导新方法
这篇论文Appendix H中:在模型能让变量名更"有意义"的同时,也可能制造未定义变量和错误依赖。下一步工作如果只展示漂亮的成功示例,论证仍然很薄弱。 可以设计基于不确定性的"选择性LLM介入":当变量绑定清晰时允许语义建议,遇到动态作用域、反射或高风险API链时保留原始名称或要求额外验证。实验需报告拒绝/回退比例、错误命名率、恢复成功率和额外时延,而不是只用主观可读性分数评价。
对于学习或复现不要直接在宿主电脑执行未知恶意脚本。程序分析和受控执行应遵循机构授权、隔离环境与安全实验规范。
总结
读完这篇NDSS 2026论文,最深的体会可以浓缩成:
- 第一,好的安全系统工作要从真实分析痛点出发,按"问题---机制---证据"构建完整论证链。
- 第二,LLM并非必须接管全部工作;把它放在合适的规划、解释或可读性环节,并用程序分析和可验证约束兜底,往往更有研究价值。
- 第三,真正值得深挖的新Idea通常不是"再加一个Agent",而是发现安全问题,再深度分析构建威胁模型,并证明新机制确实解决了它。
JSIMPLIFIER仍存在语义不一致、耗时和执行隔离等限制,但正因作者提供了较完整的实验与失败分析,它才为下一步可验证、多阶段、动态工具协同研究提供了值得持续追踪的起点。
2024年4月28日是Eastmount的安全星球------『网络攻防和AI安全之家』正式创建和运营的日子,该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。
目前收到了很多博友、朋友和老师的支持和点赞,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!
(By:Eastmount 2026-10-20 周二夜于贵阳 http://blog.csdn.net/eastmount/ )
前文赏析:
- 论文阅读 (01)拿什么来拯救我的拖延症?初学者如何提升编程兴趣及LATEX入门详解
- 论文阅读 (02)SP2019-Neural Cleanse: Identifying and Mitigating Backdoor Attacks in DNN
- 论文阅读 (03)清华张超老师 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
- 论文阅读 (04)人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
- 论文阅读 (05)NLP知识总结及NLP论文撰写之道------Pvop老师
- 论文阅读 (06)万字详解什么是生成对抗网络GAN?经典论文及案例普及
- 论文阅读 (07)RAID2020 Cyber Threat Intelligence Modeling Based on Heterogeneous GCN
- 论文阅读 (08)NDSS2020 UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats
- 论文阅读 (09)S&P2019 HOLMES Real-time APT Detection through Correlation of Suspicious Information Flow
- 论文阅读 (10)基于溯源图的APT攻击检测安全顶会总结
- 论文阅读 (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)
- 论文阅读 (12)英文论文引言introduction如何撰写及精句摘抄------以入侵检测系统(IDS)为例
- 论文阅读 (13)英文论文模型设计(Model Design)如何撰写及精句摘抄------以入侵检测系统(IDS)为例
- 论文阅读 (14)英文论文实验评估(Evaluation)如何撰写及精句摘抄(上)------以入侵检测系统(IDS)为例
- 论文阅读 (15)英文SCI论文审稿意见及应对策略学习笔记总结
- 论文阅读 (16)Powershell恶意代码检测论文总结及抽象语法树(AST)提取
- 论文阅读 (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测
- 论文阅读 (18)英文论文Model Design和Overview如何撰写及精句摘抄------以系统AI安全顶会为例
- 论文阅读 (19)英文论文Evaluation(实验数据集、指标和环境)如何描述及精句摘抄------以系统AI安全顶会为例
- 论文阅读 (20)USENIXSec21 DeepReflect:通过二进制重构发现恶意功能(恶意代码ROI分析经典)
- 论文阅读 (21)S&P21 Survivalism: Systematic Analysis of Windows Malware Living-Off-The-Land (经典离地攻击)
- 论文阅读 (22)图神经网络及认知推理总结和普及-清华唐杰老师
- 论文阅读 (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
- 论文阅读 (24)向量表征:从Word2vec和Doc2vec到Deepwalk和Graph2vec,再到Asm2vec和Log2vec(一)
- 论文阅读 (25)向量表征经典之DeepWalk:从Word2vec到DeepWalk,再到Asm2vec和Log2vec(二)
- 论文阅读 (26)基于Excel可视化分析的论文实验图表绘制总结------以电影市场为例
- 论文阅读 (27)AAAI20 Order Matters: 二进制代码相似性检测(腾讯科恩实验室)
- 论文阅读 (28)李沐老师视频学习------1.研究的艺术·跟读者建立联系
- 论文阅读 (29)李沐老师视频学习------2.研究的艺术·明白问题的重要性
- 论文阅读 (30)李沐老师视频学习------3.研究的艺术·讲好故事和论点
- 论文阅读 (31)李沐老师视频学习------4.研究的艺术·理由、论据和担保
- 论文阅读 (32)南洋理工大学刘杨教授------网络空间安全和AIGC整合之道学习笔记及强推(InForSec)
- 论文阅读 (33)NDSS2024 Summer系统安全和恶意代码分析方向相关论文汇总
- 论文阅读 (34)EWAS2024 基于SGDC的轻量级入侵检测系统
- 论文阅读 (35)TIFS24 MEGR-APT:基于攻击表示学习的高效内存APT猎杀系统
- 论文阅读 (36)C&S22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
- 论文阅读 (37)CCS21 DeepAID:基于深度学习的异常检测(解释)
- 论文阅读 (38)基于大模型的威胁情报分析与知识图谱构建论文总结(读书笔记)
- 论文阅读 (39)EuroS&P25 CTINEXUS:基于大模型的威胁情报知识图谱自动构建
- 论文阅读 (40)CCS24 PowerPeeler:一种通用的PowerShell脚本动态去混淆方法
- 论文阅读 (41)JISA24 物联网环境下基于少样本学习的攻击流量分类
- 论文阅读 (42)ASC25 基于大语言模型的未知Web攻击威胁检测
- 论文阅读 (43)ESWA25 评估大模型在真实攻击活动的恶意代码解混淆能力
- 论文阅读 (44)一种基于LLM少样本多标签的Android恶意软件检测方法
- 论文阅读 (45)C&S24 AISL: 基于攻击意图驱动与序列学习方法的APT攻击检测
- 论文阅读 (46)IDS-Agent: 一种用于物联网可解释入侵检测的大模型Agent
- 论文阅读 (47)LAMD: 基于大模型上下文驱动的Android恶意软件检测与分类
- 论文阅读 (48)TIFS24 基于注意力的恶意软件API定位技术
- 论文阅读 (49)JNCA24 网络威胁狩猎演化技术综述
- 论文阅读 (50)TDSC23 T-Trace:基于多源系统日志关联的APT溯源图构建
- 论文阅读 (51)ESWA25 基于启发式优化器的入侵检测系统
- 论文阅读 (52)NDSS26 Chimera:利用多智能体大模型自动模拟内部威胁和ATT&CK映射
- 论文阅读 (53)NDSS2026 Fall智能体安全和系统安全方向论文汇总
- 论文阅读 (54)NDSS26 JSIMPLIFIER:动静态与LLM如何协同完成JavaScript解混淆?