【爬虫随笔】常见js混淆原理和特征

文章目录

  • 常见js混淆原理和特征
    • [1. 混淆](#1. 混淆)
      • [1.1 OB混淆](#1.1 OB混淆)
      • [1.2. eval混淆](#1.2. eval混淆)
      • [1.3. AAEncode混淆(表情包加密)](#1.3. AAEncode混淆(表情包加密))
      • [1.4. JSFuck 混淆](#1.4. JSFuck 混淆)
      • [1.5. JJEncode 混淆](#1.5. JJEncode 混淆)
      • [1.6. Sojson 混淆](#1.6. Sojson 混淆)

常见js混淆原理和特征

1. 混淆

1.1 OB混淆

  • 定义 :OB 混淆全称 Obfuscator,Obfuscator 其实就是混淆的意思,官网:https://obfuscator.io/ ,其作者是一位叫 Timofey Kachalov 的俄罗斯 JavaScript开发工程师,早在 2016 年就发布了第一个版本。
  • 特征
    1. 一般由一个大数组或者含有大数组的函数、一个自执行函数、解密函数和加密后的函数四部分组成;
    2. 函数名和变量名通常以 _0x 或者 0x 开头,后接 1~6 位数字或字母组合;
    3. 自执行函数,进行移位操作,有明显的 push、shift 关键字;
  • 在线转换https://webfem.com/tools/js-decode/index.html

1.2. eval混淆

  • 定义:eval(string) ,可计算某个字符串,并执行其中的的 JavaScript 代码。 有返回值
  • 特征 :想要运行 字符串 的值,只能通过明文的eval()函数执行,然后里面的字符串可能是多层加密的,我们通常在eval处下断点。

1.3. AAEncode混淆(表情包加密)

  • 定义:利用 JavaScript 的类型转换和运算符特性,将字符编码映射成特定的符号组合,其本质是:原始字符 → Unicode 码点 → 特定的表情符号/符号序列 → 通过 eval() 执行
  • 特征:由表情符号如 ゚ω゚、ノ、`ー´ 等组成的看似乱码的字符串的混淆技术,在浏览器中执行后能还原出原始代码。
  • 在线转换:https://www.sojson.com/aaencode.html
  • 查看代码:

1.4. JSFuck 混淆

  • 定义:JSFuck 利用 JavaScript 的 类型转换隐式转换 特性,通过这六个字符的组合,表达出数字、字符串、数组、对象、函数等所有 JavaScript 的基本元素。
  • 特征:JSFuck 是一种极端的 JavaScript 混淆技术,它只使用六个字符 [ ] ( ) ! + 就能编写出任何有效的 JavaScript 代码。
  • 在线转换:https://www.sojson.com/jsfuck.html#google_vignette
  • 官网:https://jsfuck.com/

1.5. JJEncode 混淆

  • 定义:JJEncode 是一种 JavaScript 混淆编码工具,由日本作者 Yosuke HASEGAWA 于 2009 年开发,它可以将任意 JavaScript 代码转换成仅使用 18 个符号的混淆形式:[]()!+,\"$.:;_{}~=
  • 特征:代码以自执行函数(IIFE)形式呈现,混淆后的代码极度压缩,所有变量被替换为 $、_ 等短符号,配合数组和字符串操作动态构造出原始代码。
javascript 复制代码
$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,...})();

1.6. Sojson 混淆

  • 定义:Sojson 是一款针对 JavaScript 代码的商业级混淆加密工具,其核心原理是多层复合混淆 + 主动防御。与 JSFuck、JJEncode 等编码型混淆不同,Sojson 的目标不仅是让代码难以阅读,更是主动防止攻击者对代码进行调试和格式化,属于高强度的代码保护方案。Sojson 是一款针对 JavaScript 代码的商业级混淆加密工具,其核心原理是多层复合混淆 + 主动防御。与 JSFuck、JJEncode 等编码型混淆不同,Sojson 的目标不仅是让代码难以阅读,更是主动防止攻击者对代码进行调试和格式化,属于高强度的代码保护方案。
  • 特征

Sojson 通过多种技术的组合,构建其防护体系:

技术手段 原理说明 代码示例/表现
变量名混淆 将有意义的变量、函数名替换为 _0x43a11d_0x24372d随机十六进制字符串,彻底抹去语义信息 。 var userName = "admin"var _0x2e3f = "admin"
字符串加密 将代码中的字符串字面量(如URL、Key)转换为十六进制、Unicode 或自定义编码形式,运行时再动态解密还原 。 "https://api.example.com"'\x68\x74\x74\x70...'
控制流平坦化 将原本顺序、循环、分支等执行逻辑,打散为一个switch-casewhile 驱动的状态机,真实执行顺序由状态变量控制,极大增加分析难度 。 if...else 重构为 switch(state){ case 0:...; state=1; break; case 1:... } 的形式
死代码注入 在代码中插入大量无用或永远不会执行的代码片段和函数调用,干扰分析者的视线,增加阅读量 。 在关键逻辑间随机插入 var _0x1234 = 123; 或调用空函数。
压缩成一行的代码 将整个代码库删除所有换行和多余空格,压缩为单行。这是混淆的第一步,旨在破坏代码的可读性和基础的格式化工具 。 多行易读的代码被强制压缩为一长行字符串。
防止格式化 正则、死循环 等手段 如果调试时对代码进行了格式化, 陷入的卡死状态就是注入的死代码导致的

参考文章: JavaScript混淆


感谢关注【遇事不決洛必達】!欢迎点赞收藏和交流指正,我会持续分享我的学习经验和心得。

相关推荐
来自上海的这位朋友1 小时前
浏览器里的实时对局同步:WildHunt 的 WebSocket、输入序号与服务端快照
前端·javascript·后端
小熊Coding1 小时前
Python二手图书市场行为分析系统
开发语言·爬虫·python·django·计算机毕业设计·数据可视化分析·二手图书分析系统
吃炸鸡的前端1 小时前
react-hook-from从入门到精通
前端·javascript·react.js
zzqssliu2 小时前
跨境独立站多端适配开发:多语言+多货币+跨平台同步技术实战
前端·javascript·php
Chengbei112 小时前
AI赋能Chrome MCP × JS逆向Skill自动化JS逆向助力挖洞与绕过实战(小白也能学会)
javascript·人工智能·chrome·网络安全·自动化·系统安全·安全架构
怕浪猫2 小时前
Electron 开发实战(五):文件系统与本地数据持久化全解
前端·javascript·electron
边界条件╝2 小时前
前端构建引擎:从模块解析到产物生成
前端·javascript·vue.js·react.js
Setsuna_F_Seiei3 小时前
AI 提效之 Skills - Agent 的扩展技能教程
前端·javascript·ai编程
Non-existent9875 小时前
海拔批量查询 + 批量 KML 生成工具-WPS 插件 TableGIS 新功能
javascript·c++·excel·wps