用AI解析JavaScript代码 进行逆向反编译

前言

日常工作中,产品同学经常会甩过来一个贼拉炫酷的网页问我:'这个效果能做吗?我就要这样的!' 面对这种需求,我们当然要干他(为了生活隐忍下来)。

为了复现效果,我们便去查看网页源代码,结果一看------瞬间蒙圈!

这种便是JavaScript的压缩混淆

JavaScript 压缩混淆

在现代网页开发中,JavaScript 压缩(Minification) 与 混淆(Obfuscation) 几乎是必不可少的环节。

早期的 JS 代码承担功能少,逻辑简单且体积小,不需要保护。但随着技术的发展,JS 承担的功能越来越多, 文件体积增大。为了优化用户体验,开发者们想了很多办法去减小 JS 文件体积,以加快 HTTP 传输速度。JS 压缩(Minification)技术应运而生。

压缩工具开发的初衷是减小 JS 文件体积,但 JS 代码经过压缩替换后,其可读性也大大降低,间接起到了保护代码的作用。

JavaScript 混淆(Obfuscation)是指通过一系列技术手段,使 JS 代码变得难以理解和分析,增加代码的复杂性和混淆度,实际上就是一种保护 JS 代码的手段。

常见混淆手段

变量名/函数名的替换,通过将有意义的变量名和函数名替换为随机生成的名称。

lua 复制代码
/*
function calculateArea(radius) {
  return Math.PI * radius * radius;
}
console.log(calculateArea(5));
*/
function _0x2d8f05(_0x4b083b) {
  return Math.PI * _0x4b083b * _0x4b083b;
}
console.log(_0x2d8f05(5));

代码转换,将代码转换为等价的,但更难理解的形式。

ini 复制代码
/*
let a = 1;
let b = 2;
let c = a + b;
console.log(c);
*/
let a = 1;
let b = 2;
let c = a - (-b);
console.log(c);

如何理解这些代码?

1. 格式化

现代浏览器通常都支持自动格式化功能。只需点击"Source"选项卡,然后选中相应的 JavaScript 文件,再点击"美化输出"(Pretty Print)按钮,即可实现代码的自动格式化。

2. 使用工具debug进行调试

在网页运行时,我们同样可以利用浏览器内置的调试功能进行代码调试。通过调试工具,可以查看 JavaScript 代码的执行过程,监控变量的变化,以及分析逻辑实现。 然而,这种方式的调试效率仍然较低,尤其是在代码经过压缩或混淆后,变量名被替换为诸如 abc 等无意义的名称,使人难以理解。

解决方案

用AI进行理解学习

我们可以通过将代码转换为抽象语法树(AST),利用 AI 对其进行分析与理解。在此基础上,结合 AI Agent 的协同能力,让 AI 能够深入理解代码的复杂上下文,有效解决第三方库识别、变量名混淆等难题。

这是一个国外有趣的pixi游戏demo,整个游戏好玩有趣,交互灵活。但偏游戏类实现起来往往比较复杂,需要找对正确的实现思路。

我花了几天时间开发了一个小工具网站,帮助大家省去手动进行AST转换和接入Agent分析的麻烦。只需复制需要解析的源代码,即可直接输出分析结果。

www.jsunpack.tech (欢迎大家体验一下)

我们把一部分需要分析的函数粘贴到这个网站,点击执行后,立刻得到了结果。

可以看到有完整的注释,ts类型的代码也非常健壮。

我拿自己的一些代码测试的过程中,甚至发现生成的代码比我自己写的源码还要优秀 - -||

相关推荐
hh随便起个名2 小时前
力扣二叉树的三种遍历
javascript·数据结构·算法·leetcode
我是小路路呀3 小时前
element级联选择器:已选中一个二级节点,随后又点击了一个一级节点(仅浏览,未确认选择),此时下拉框失去焦点并关闭
javascript·vue.js·elementui
程序员爱钓鱼3 小时前
Node.js 编程实战:文件读写操作
前端·后端·node.js
PineappleCoder3 小时前
工程化必备!SVG 雪碧图的最佳实践:ID 引用 + 缓存友好,无需手动算坐标
前端·性能优化
JIngJaneIL4 小时前
基于springboot + vue古城景区管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
敲敲了个代码4 小时前
隐式类型转换:哈基米 == 猫 ? true :false
开发语言·前端·javascript·学习·面试·web
澄江静如练_4 小时前
列表渲染(v-for)
前端·javascript·vue.js
JustHappy5 小时前
「chrome extensions🛠️」我写了一个超级简单的浏览器插件Vue开发模板
前端·javascript·github
Loo国昌5 小时前
Vue 3 前端工程化:架构、核心原理与生产实践
前端·vue.js·架构