用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类型的代码也非常健壮。

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

相关推荐
charlee4443 分钟前
行业思考:不是前端不行,是只会前端不行
前端·ai
Amodoro2 小时前
nuxt更改页面渲染的html,去除自定义属性、
前端·html·nuxt3·nuxt2·nuxtjs
Wcowin2 小时前
Mkdocs相关插件推荐(原创+合作)
前端·mkdocs
伍哥的传说2 小时前
CSS+JavaScript 禁用浏览器复制功能的几种方法
前端·javascript·css·vue.js·vue·css3·禁用浏览器复制
lichenyang4533 小时前
Axios封装以及添加拦截器
前端·javascript·react.js·typescript
Trust yourself2433 小时前
想把一个easyui的表格<th>改成下拉怎么做
前端·深度学习·easyui
三口吃掉你3 小时前
Web服务器(Tomcat、项目部署)
服务器·前端·tomcat
Trust yourself2433 小时前
在easyui中如何设置自带的弹窗,有输入框
前端·javascript·easyui
烛阴3 小时前
Tile Pattern
前端·webgl
前端工作日常4 小时前
前端基建的幸存者偏差
前端·vue.js·前端框架