讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在Python中利用AST技术还原复杂的前端加密JS?

雨芳同学_2052

雨芳同学_2052

发布时间:2026-09-23 15:38:48

|

694人浏览过

|

来源于php中文网

原创

AST解析JS混淆代码可行但有局限:仅适用于字符串拼接型(如atob、fromCharCode),遇eval、Function等动态执行需补环境;Webpack代码应先正则定位再局部AST;Python复现需处理JS隐式类型转换。

如何在python中利用ast技术还原复杂的前端加密js?

直接用 AST 解析 JS 混淆代码是可行的,但必须明确一点:AST 不是万能解药,它只负责“看懂结构”,不负责“执行逻辑”。很多加密函数依赖 windowdocumentatob 或动态环境检测,纯 AST 解析拿不到最终字符串——你得先判断这段 JS 是“可静态还原”还是“必须补环境执行”。

怎么快速判断该不该上 AST?

打开混淆 JS 文件,在浏览器控制台里搜这几个关键词:

  • atob(btoa(String.fromCharCode(.join( → 这类属于“字符串拼接型”,AST 可安全提取
  • eval(Function(setTimeout(location.href → 这类含动态执行或 DOM 依赖,AST 无法还原,得换方案
  • void 0!1~[] → 这些是无副作用干扰项,AST 遍历时可跳过,不用硬匹配

如果搜索结果集中在第一类,就适合 AST;第二类占比高,别浪费时间写遍历器,直接切到 PyExecJS 或 RPC。

用 esprima-python 提取 base64 和 fromCharCode 字符串

注意:不要用已停更的 pyjsparser,它对 ES6+ 支持差,遇到箭头函数或模板字符串会直接抛 ParseError: Unexpected token。推荐 esprima-python(绑定 Esprima 4.x)或轻量级 slimit

立即学习Python免费学习笔记(深入)”;

核心逻辑是递归遍历 CallExpression 节点,识别调用名和参数类型:

def extract_strings(node):
    if isinstance(node, esprima.nodes.CallExpression):
        if hasattr(node.callee, 'name') and node.callee.name == 'atob':
            if isinstance(node.arguments[0], esprima.nodes.Literal) and isinstance(node.arguments[0].value, str):
                return base64.b64decode(node.arguments[0].value).decode('utf-8')
        elif (hasattr(node.callee, 'property') and 
              hasattr(node.callee.property, 'name') and 
              node.callee.property.name == 'fromCharCode'):
            nums = []
            for arg in node.arguments:
                if isinstance(arg, esprima.nodes.Literal) and isinstance(arg.value, int):
                    nums.append(arg.value)
            if nums:
                return ''.join(chr(n) for n in nums)
    return None

这个函数只处理最常见两种模式,不试图覆盖所有混淆变体——实际项目中,90% 的字符串混淆都落在这两类里。

A Python CLI skill for Cutout.Pro visual APIs — background removal, face cutout, and photo enhancement. Supports file upload & image URL input.
A Python CLI skill for Cutout.Pro visual APIs — background removal, face cutout, and photo enhancement. Supports file upload & image URL input.

调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。

下载

webpack 打包代码怎么拆?别硬 parse 整个 bundle

混淆 JS 来自 webpack 打包时,整个文件可能有 10k+ 行,但真正生成 sign 的逻辑往往藏在某个闭包里,比如:function r(e){...}var t={...}。硬解析整棵树效率低还容易内存溢出。

更实用的做法是先定位目标函数再局部 AST:

  • 用正则粗筛:搜索 /function\s+\w+\s*\([^)]*\)\s*\{[^}]*sign[^}]*\}//\.sign\s*=\s*[\w$]+/
  • 把匹配到的代码块(比如从 function getSign 到对应右括号)单独拎出来,喂给 esprima.parseScript()
  • 这样 AST 树深度可控,遍历快,且避免被打包器注入的无关模块干扰

别忘了 webpack 常把字符串数组存成 ["a","b","c"].join("") 形式,这种要额外检查 ArrayExpression + CallExpression.callee.property.name === "join" 节点。

AST 还原后 Python 复现失败?大概率漏了隐式类型转换

JS 里 "1" + 2 是字符串拼接,Python 里会报错;!![] 在 JS 是 True,但 AST 解析时可能被当成布尔字面量或忽略。这类细节不会出现在 AST 节点里,但直接影响加密结果。

最容易被忽略的是:

  • + 运算符的多义性:数值相加 vs 字符串拼接 → Python 复现时得手动判断操作数类型
  • ===== 的隐式转换差异 → JS 中 "0" == false 为真,Python 里不能直接用 == 模拟
  • 数字字面量的进制:JS 支持 0x1f(十六进制)、0o755(八进制),AST 中 Literal.value 是解析后的十进制数,但原始写法可能影响调试理解

所以 AST 还原出来的“伪代码”,只是逻辑骨架;填上类型判断和 JS 特有行为,才是能跑通的 Python 实现。

热门AI工具

更多
AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

相关专题

更多
python是前端还是后端
python是前端还是后端

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

2063

2023.08.11

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

4403

2023.10.09

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

5510

2024.03.19

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

4978

2024.03.22

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

703

2024.05.22

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

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

1551

2023.07.20

python能做什么
python能做什么

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

3704

2023.07.25

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

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

1569

2023.07.31

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

0

2026.09.23

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn