Python爬虫怎么应对复杂的JS混淆_利用AST抽象语法树进行解密

夏涛酱_4321

夏涛酱_4321

2026-04-25

493人浏览

原创

js混淆字符串解密不能靠正则硬匹配,因混淆结构多变且易误伤;稳定方式是基于ast静态分析,精准定位string.fromcharcode、atob等解密模式,忽略无副作用表达式,兼顾安全与兼容性。

python爬虫怎么应对复杂的js混淆_利用ast抽象语法树进行解密

JS混淆字符串解密为什么不能靠正则硬匹配

因为混淆后的代码结构千变万化:有的用数组索引拼接,有的套多层 atob + eval + 自调用函数,还有的把字符串拆成 Unicode 码点再动态组装。正则一换就失效,而且容易误伤正常 JS 逻辑。

真正稳定的方式是模拟 JS 执行环境或还原语义——AST 就是后者的关键入口:它不关心变量名、空格、括号风格,只保留语法结构和运算关系,正好绕过混淆的表层干扰。

  • 混淆常把字符串藏在 Array.prototype.map 或 String.fromCharCode 调用链里,AST 能准确定位到这些节点
  • 某些混淆器会插入无副作用的表达式(如 void 0、!1),AST 可以安全忽略它们,只提取有值返回的子树
  • 直接用 execjs 或 PyExecJS 运行可能触发反调试(比如检查 window、document),而 AST 解析纯静态,零风险

用 esprima + ast.walk 提取字符串字面量和解密逻辑

Python 本身不原生解析 JS,得靠第三方库。推荐 esprima(通过 esprima-python 绑定)或更轻量的 slimit;注意别用已停更的 pyjsparser,对 ES6+ 支持差,遇到箭头函数或模板字符串会直接报错 ParseError: Unexpected token。

核心思路是:先 parse 成 AST,再遍历所有 Literal 和 CallExpression 节点,识别出常见解密模式:

  • atob("SGVsbG8=") → 直接 base64 解码
  • String.fromCharCode(72, 101, 108, 108, 111) → 提取数字参数并转字符
  • ["H", "e", "l", "l", "o"].join("") → 检查 ArrayExpression + CallExpression 的 callee.property.name === "join"

示例片段(简化版):

Claw Code Suite (Python-Only Edition)
Claw Code Suite (Python-Only Edition)

仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...

下载
import esprima
from esprima import walk
<p>def extract_strings(node):
if isinstance(node, esprima.nodes.Literal) and isinstance(node.value, str):
return node.value
if isinstance(node, esprima.nodes.CallExpression):
if (hasattr(node.callee, 'name') and node.callee.name == 'atob' and
hasattr(node.arguments[0], 'value')):
return base64.b64decode(node.arguments[0].value).decode()</p><h1>其他模式类似处理...</h1>

遇到动态 key 或自执行函数怎么办

有些混淆会把解密函数本身也混淆,比如 (function(a,b){...})("key","data"),或者用对象属性名当密钥:obj[_0x1234[0]]。这时候光看字符串不够,得做简单符号求值。

  • 优先提取所有 ArrayExpression 字面量(如 ["hello"]),统一转成明文备用
  • 对 MemberExpression(如 a[b]),若 b 是 Literal,直接取索引;若是 Identifier,需向上找同作用域的赋值语句(比如 var b = 0;)
  • 避免递归求值整个作用域——太重且易出错。只处理一级变量绑定 + 字面量数组,覆盖 90% 常见混淆即可

典型坑:_0x1234 这类变量名常被重复声明(不同函数内),不能全局缓存;每次进入新 FunctionExpression 都要清空当前作用域映射。

混淆升级后 AST 方案还灵不灵

当混淆器开始插入控制流扁平化(如 while(true){switch(_0x1){case 0:...break;case 1:...}})或使用 WebAssembly 加载密钥时,纯 AST 就力不从心了。这时候必须切换策略:

  • 先用 AST 定位到可疑的 while/switch 块,提取 case 分支里的字符串操作,再用 Python 模拟执行该分支(而非整个函数)
  • 对 WASM 场景,基本放弃静态分析——改用 playwright 启动真实 Chromium,hook WebAssembly.instantiate 并 dump 内存中的解密结果
  • 记住:AST 不是银弹,它的价值在于「快、稳、可嵌入」,适合做第一层过滤;复杂逻辑该上浏览器环境就得上,别硬扛

最常被忽略的一点:混淆代码里可能混着真实业务逻辑,比如某个 atob 解出来是 URL,但后面还有个 .replace(/\./g, "/") 才是最终请求地址——AST 解析必须连同后续调用链一起捕获,不能只截第一个函数调用。

Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

python js 爬虫

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1791

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

4684

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1749

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

27717

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3347

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3347

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1203

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

596

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2603

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Uvicorn官方安装与入门手册
Uvicorn官方安装与入门手册

共0课时 | 0人学习

Python uv官方项目管理指南
Python uv官方项目管理指南

共0课时 | 0人学习

Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习