深入实战Anthropic-Cybersecurity-Skills 之 JavaScript 恶意软件去混淆 API 完全指南【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills在网页钓鱼攻击、Magecart 卡片盗刷、恶意邮件附件与浏览器漏洞利用包中攻击者几乎无一例外地使用多层混淆的 JavaScript 来隐藏窃密、重定向与下载逻辑。本文以 Anthropic-Cybersecurity-Skills 仓库中deobfuscating-javascript-malware技能集为骨架系统讲解其 API Reference 中沉淀的完整去混淆工具链从 jsbeautifier 的 Python API 与 CLI 用法到 hex/Unicode/Base64/fromCharCode/URL 编码的通用解码模式再到 Node.js VM 沙箱拦截 eval 链、CyberChef 操作对照与 IOC 提取正则。读完本文你将掌握一套提取脚本 → 识别混淆 → 中和反分析 → 逐层解码 → 沙箱解链 → 提取 IOC的完整实战流程并能直接驱动仓库自带的 agent.py 自动化完成分析。适用场景调查钓鱼页中的凭据窃取脚本、分析注入电商站点的 Magecart 网络嗅探器web skimmer、还原下载并执行二阶段恶意软件的 JavaScript dropper以及分析包含内嵌混淆脚本的恶意 HTML 附件。该技能对应的 MITRE ATTCK 技术映射包括 T1027混淆文件或信息、T1027.010命令混淆、T1140去混淆/解码文件或信息、T1059.007JavaScript 执行与 T1027.006HTML 混淆详见 SKILL.md。一、工具链总览API Reference 的定位api-reference.md是整个技能集的速查手册它不重复 SKILL.md 的流程叙述而是把去混淆过程中最常用、最可复用的代码片段、命令行与操作符表集中呈现供分析人员直接复制使用。其内容可划分为五大板块jsbeautifierPython 库——格式化压缩/混淆后的代码jsbeautifier CLI——命令行格式化通用解码模式Python——hex、Unicode、Base64、URL 编码、fromCharCode 五种最常见编码Node.js VM 沙箱——安全地执行并拦截 eval 链CyberChef 操作对照表与 IOC 提取正则——人工分析利器。仓库中该技能目录结构如下skills/deobfuscating-javascript-malware/ ├── SKILL.md # 技能主文档when to use / workflow / key concepts ├── references/ │ └── api-reference.md # 本文核心API 与代码速查 ├── scripts/ │ └── agent.py # 自动化去混淆 Agentjsbeautifier 正则模式匹配 └── LICENSE # Apache-2.0下面逐板块展开并对照 agent.py 的源码实现印证其底层原理。二、jsbeautifierPython API 与 CLI 双通道2.1 Python API以代码方式格式化API Reference 给出的核心用法是获取默认选项、调整缩进与换行宽度然后对混淆代码调用beautifyimport jsbeautifier opts jsbeautifier.default_options() opts.indent_size 2 opts.wrap_line_length 120 result jsbeautifier.beautify(obfuscated_code, opts)关键参数说明indent_size 2缩进宽度为 2 个空格。混淆代码通常被压缩成单行格式化后层级结构一目了然便于定位if/else、循环与函数边界wrap_line_length 120超过 120 字符的行自动换行避免超长数组如_0x1234 [hello,world,...]挤在一行难以阅读。仓库中的 agent.py 在beautify_js()函数中完全复刻了这一调用方式并且做了依赖降级处理当环境中未安装 jsbeautifier 时ImportError直接原样返回代码保证脚本不会崩溃try: import jsbeautifier except ImportError: jsbeautifier None def beautify_js(code): if jsbeautifier is None: return code opts jsbeautifier.default_options() opts.indent_size 2 opts.wrap_line_length 120 return jsbeautifier.beautify(code, opts)2.2 CLI命令行一键美化API Reference 同时提供了两条 CLI 命令# Beautify a file js-beautify malicious.js -o output.js # npx alternative npx js-beautify script.js -o script_pretty.jsjs-beautify是 Python 包jsbeautifier安装后附带的命令行入口-o指定输出文件不写-o时结果输出到 stdoutnpx js-beautify则无需预先安装任何包由 npm 自动拉取对应工具适合临时环境。SKILL.md 工作流的第一步正是使用npx js-beautify script_0.js -o script_0_pretty.js对从 HTML 中提取出的脚本做初步格式化。三、通用解码模式五种最常见编码的 Python 实现API Reference 把恶意 JavaScript 中最常出现的五种字符串编码浓缩为可直接复用的 Python 片段并给出了等价的浏览器 API 对照import re, base64, urllib.parse # Hex strings: \x68\x65\x6c\x6c\x6f - hello decoded bytes.fromhex(68656c6c6f).decode(ascii) # Unicode escapes: \u0068\u0065 - he decoded chr(0x0068) chr(0x0065) # Base64 (atob equivalent) decoded base64.b64decode(aGVsbG8).decode(utf-8) # URL encoding (unescape equivalent) decoded urllib.parse.unquote(%68%65%6c%6c%6f) # String.fromCharCode decoded .join(chr(c) for c in [104, 101, 108, 108, 111])编码形式恶意样本中的典型写法Python 解码等价物Hex\x68\x65\x6c\x6c\x6fbytes.fromhex(...).decode(ascii)Unicode 转义\u0068\u0065\u006c\u006c\u006fchr(int(..., 16))Base64atob(aGVsbG8)base64.b64decode(...).decode(utf-8)URL 编码unescape(%68%65%6c%6c%6f)urllib.parse.unquote(...)字符码数组String.fromCharCode(104,101,108,108,111).join(chr(c) for c in [...])这些片段在 agent.py 中被升级为带正则的回调替换函数可以直接作用于整段代码而非单个字符串且每个函数都做了异常兜底解码失败时返回原始匹配文本避免把非目标内容改坏decode_hex_strings()用r(?:\\x[0-9a-fA-F]{2})匹配连续的\xNN序列并批量还原为 ASCIIdecode_unicode_escapes()用r\\u([0-9a-fA-F]{4})还原\uNNNNdecode_charcode_calls()用rString\.fromCharCode\(([0-9,\s])\)把静态参数的fromCharCode调用替换成字符串字面量decode_atob_calls()用ratob\(\[\]\)解析含静态 Base64 串的atob()调用并借助json.dumps生成安全的字符串字面量decode_unescape_calls()用runescape\(\[\]\)结合urllib.parse.unquote还原unescape()调用。值得注意的实现细节decode_atob_calls使用json.dumps(decoded)而不是简单拼接引号这样当解码结果含有引号或特殊字符时仍能生成合法的 JS 字面量避免解码输出被再次破坏。四、Node.js VM 沙箱安全解链 eval 链混淆脚本最常见的执行载体是eval()、new Function()、document.write()、setTimeout(code, 0)等动态执行接口它们层层嵌套、每层解码一部分字符串再传给下一层构成所谓的eval 链。直接运行会触发恶意行为而 API Reference 给出了一种优雅的中和方案——用 Node.jsvm模块构造一个蜜罐沙箱把危险 API 全部替换为记录日志的替身const vm require(vm); const sandbox { eval: function(code) { console.log(EVAL INTERCEPTED:, code.substring(0, 500)); return code; // 返回代码而非执行它 }, document: { write: function(h) { console.log(DOC.WRITE:, h); } }, atob: function(s) { return Buffer.from(s, base64).toString(); }, window: { location: { href: } }, }; const context vm.createContext(sandbox); vm.runInContext(code, context, { timeout: 5000 });逐项说明各替身的作用eval(code)打印被拦截的代码片段截取前 500 字符防刷屏然后原样返回而不是执行。由于解码结果又会被当成字符串继续传下去这相当于让 eval 链自曝每一层内容document.write(h)打印即将写入 DOM 的 HTML防止恶意脚本通过注入script标签扩散atob(s)提供真实可用的 Base64 解码保证脚本中依赖atob的层能正常推进到下一层window.location.href空字符串占位阻止脚本跳转到攻击站点vm.runInContext(code, context, { timeout: 5000 })5 秒超时保护防止死循环或无限递归拖垮分析机。SKILL.md 中的第 5 步将这一沙箱扩展得更完整额外覆盖了document.getElementById、unescape、setTimeout当参数是字符串时打印TIMEOUT CODE、以及String/Array/parseInt/RegExp等内置对象见 SKILL.md并提示用node --experimental-vm-modules deobfuscate.js启动。由于恶意代码可能自我迭代、反复求值任何偏离真实浏览器环境的 API 缺失都会抛出异常——SKILL.md 明确提示捕获并打印Execution error (expected)这正是沙箱按预期工作、阻止了恶意行为落地的信号。五、CyberChef 操作速查表对于不熟悉写代码或需要可视化拖拽分析的场景API Reference 给出了 GCHQ CyberChef 的常用操作与用途对照OperationUse CaseFrom Hex解码\xNN序列From Base64解码atob()载荷URL Decode解码unescape()字符串JavaScript Beautify格式化压缩minified代码From CharCode解码fromCharCode数组XOR解码 XOR 加密字符串Generic Code Beautify格式化混合内容使用建议对于多层混淆CyberChef 的Recipe可以串联多个 Operation 一步完成递进解码如From Base64 → From Hex → JavaScript BeautifyFrom CharCode支持\u前缀与十进制输入两种模式恰好覆盖String.fromCharCode(104,101,...)与\x68\x65...两类常见变体遇到被 XOR 加密的字符串时可结合弱密钥爆破或已知明文猜测密钥再用 XOR Operation 还原。六、IOC 提取正则从解码结果中捞出关键指标去混淆的最终目的是产出可供检测与追溯的威胁指标IOC。API Reference 给出了三类最基础的正则# URLs re.findall(rhttps?://[^\s\)], code) # IP addresses re.findall(r\b(?:\d{1,3}\.){3}\d{1,3}\b, code) # Domains re.findall(r(?:[a-zA-Z0-9-]\.)(?:com|net|org|io|xyz)\b, code)agent.py 在extract_iocs()中将其扩展为四类并做了去重与扩展域名后缀扩充到com|net|org|io|xyz|top|info|cc|ru|cn|tk并新增邮箱正则[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}url_pattern使用re.IGNORECASE兼容大写协议最终统一set()去重后返回。这对应 SKILL.md 中从去混淆后的代码中提取 URL、域名、IP、邮箱的收尾动作。一个重要的反误报技巧正则提取到的裸 IP/域名并不天然可信应结合上下文如是否出现在XMLHttpRequest目标、fetch地址、location.href赋值右侧来判定其是否为真正的 C2 或回传端点。SKILL.md 的 Output Format 模板进一步要求输出时对 IOC 做 defang如analytics-cdn[.]com、185.220.101[.]42避免读者误点击或日志系统误触达。七、与自动化 Agent 的衔接一条命令跑完全流程API Reference 中的所有片段在 agent.py 中被组织成一条完整的自动化流水线可以用一行命令启动# 分析单个 JS 文件或 HTML 文件 python3 agent.py malicious.js python3 agent.py malicious_page.html --full其内部流水线deobfuscate()依次执行remove_anti_debug()正则删除setInterval(function(){debugger;}, N)与 DevTools 尺寸检测块→ 五种解码 →beautify_js()格式化analyze_file()则对 HTML 自动抽取出全部script块extract_scripts_from_html()对每个脚本分别输出original_size / deobfuscated_size / obfuscation_techniques / iocs / deobfuscated_preview的结构化 JSON。detect_obfuscation_techniques()内置了 12 种混淆特征检测hex、Unicode、fromCharCode、atob、eval、Function 构造器、document.write、setTimeout、debugger 反调试、DevTools 检测、时序检测、_0x变量混淆与字符串数组。对应 SKILL.md 中完整的手工六步流程——提取脚本 → 识别混淆技术 → 中和反分析 → 解码字符串层 → 沙箱解 eval 链 → 分析载荷并提取 IOC——agent.py 覆盖了第 1、2、3、4、6 步的自动化版本第 5 步eval 链沙箱仍建议使用第五节中的 Node.js VM 方案人工验证。八、关键概念对照API Reference 中的代码片段与 SKILL.md 的 Key Concepts 表互为印证下表整理了去混淆分析中最核心的术语术语定义对应 API Reference 片段Eval Chain嵌套的 eval() / Function() / document.write() 调用每层解码一层混淆后再传给下一层Node.js VM 沙箱中的eval替身String Array Rotation将所有字符串存入被打乱的数组通过计算索引访问以隐藏字符串字面量jsbeautifier 格式化 手动解析_0x1234 [...]Dead Code Insertion插入永不执行的代码块增加分析复杂度、干扰模式匹配依赖 beautify 后人工识别Opaque Predicate结果恒定的条件表达式静态难以判断用于扰乱控制流手工将if (cond)改写为if (false)Anti-Debugging通过 debugger 语句、时序差、DevTools 尺寸差检测并阻止调试remove_anti_debug()与 Sandbox 占位Web Skimmer注入电商站点的恶意脚本在结账页窃取支付卡数据MagecartIOC 正则提取回传 URL九、安全边界与运行前提使用上述全部工具链时请务必遵守以下约束隔离环境所有执行尤其 Node.js VM 沙箱都应运行在与生产网络隔离的分析 VM 中沙箱替身无法 100% 还原浏览器语义恶意脚本可能借缺失 API 的异常路径逃逸出预期流程不要直接执行原始脚本混淆脚本可能内置定时器或自调用 IIFE即使不显式调用eval也会在加载时触发外联沙箱中timeout: 5000是最后一道防线先中和反分析在浏览器 DevTools 中调试前务必先删除setInterval(debugger)类陷阱见 SKILL.md 第 3 步否则会被无限 debugger 循环卡死环境前提本技能要求 Node.js 18沙箱执行、Python 3.8解码与格式化、可选 Chrome DevTools 与 CyberChefagent.py 在缺少 jsbeautifier 时会自动降级为不格式化其余功能不受影响。以上全部代码片段、命令行与正则均取自仓库中 references/api-reference.md、SKILL.md 与 scripts/agent.py 三个文件可对照原文逐行核验。该技能在 index.json 中注册为deobfuscating-javascript-malware归属于 29 个安全域中的 malware-analysis恶意软件分析子域可被 Claude Code、GitHub Copilot、Codex CLI、Cursor、Gemini CLI 等 20 agentskills.io 兼容平台直接加载使用。【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI 20 platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考