【JS逆向】【21.JS混淆】OB混淆(详细讲解)

本文介绍了JavaScript混淆技术,包括变量重命名、函数名混淆、压缩代码和控制流混淆等方法,还提到了OB混淆。通过实战案例,分析获取票房数据的ajax请求,定位到加密代码,解析OB混淆中的代码还原函数,发现其与Base64编码有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JS混淆

1. 何为 JS 混淆

JavaScript 混淆是一种将 JavaScript 代码进行某种处理的方式,目的是使代码难以被阅读和理解。why do that?

JavaScript大都是运行在浏览器端,这就导致任何人都可以直接对网站的代码进行查看,如果代码没有进行任何处理就会导致直接暴露源码,他人便可轻而易举的复制你的劳动成果,所以可以做的就是让代码变得更加的难以阅读,他人难以复制你的成果,实现“加密”的目的。

混淆的方法可以包括改变变量名、添加无意义的代码、删除空格和注释等。混淆后的代码仍然可以正常运行,但是对于未经授权的人来说难以理解和维护。

变量重命名

变量重命名是 JavaScript 代码混淆中最简单且最常用的方法之一。这种方法的基本思想是将所有可能包含敏感信息的变量重命名为无意义的字符串。例如,将 username 替换为 a,将 password 替换为 b。将变量名替换为无意义的字符串或者短字符,使得人类阅读难度大大增加。例如:

// 没有代码混淆
var username = "user123";
var password = "pass456";
function login(user, pass) {
     
	if (user === username && pass === password) {
   
  	console.log("Login successful!");  
  } else {
       
    console.log("Login failed!");  
  }}
login(username, password);

// 使用变量名混淆进行代码混淆
var a = "user123";
var b = "pass456";
function c(d, e) {
     
	if (d === a && e === b) {
       
    console.log("Login successful!");  
  } else {
       
    console.log("Login failed!");  
  }}
c(a, b);

函数名混淆

函数名混淆是另一种常用的 JavaScript 代码混淆技术。它的基本思想是将所有函数名替换为随机的、无意义的字符串,从而使代码更难被理解和调试。

// 没有代码混淆
function add(x, y) {
     
  return x + y;
}
console.log(add(2, 3));

// 使用函数名混淆进行代码混淆
var a = function(b, c) {
     
  			return b + c;
			}
console.log(a(2, 3));

//这种本质还是和上面介绍的变量重命名一样。

压缩代码

压缩是另一种常见的JavaScript代码混淆技术。通过使用各种压缩算法,可以将JavaScript代码文件缩小到原始大小的一半以下。虽然这样的代码难以阅读,但对于需要快速加载和运行的Web应用程序来说非常有用。例如:

//原始代码
function calculateSum(num1, num2) {
     
	var sum = num1 + num2;  
  return sum;
}
var result = calculateSum(3, 4);
console.log(result);
//压缩代码
function calculateSum(a,b){
   return a+b}console.log(calculateSum(3,4));

代码打乱 / JS 控制流混淆

JS 控制流混淆是一种消除JavaScript代码的可预测性的技术,通过使用控制流混淆算法,改变程序结构来防止代码被轻易地理解和分析的技术。简单来说,就是通过修改代码中的控制流语句(如 if、while 等)的顺序、嵌套、去除等方式来增加代码的复杂性,从而使得代码难以被反编译、破解或者逆向工程攻击。以下是一个简短的示例:

var a = 1;
var b = 0;

if (a === 1) {
     
  	b = 3;  
  } else {
     
  	b = 4;
  }

//结果:a=1,b=3

这段代码可以通过控制流混淆的方式进行优化。例如,可以将 if 块内部的语句交错、嵌套,增加运算符的数量,达到混淆的效果:

var a = 1;
var b = 0;
if (!(a !== 1)) {
     
  if (!(![])) b = 3;
} else {
     
  if (!(!{
   })) b = 4;
}
// 结果:a=1,b=3

2. OB混淆

OB 混淆是指将 JavaScript 代码中的变量名、函数名、字符串等替换为无意义的字符串,从而增加代码的保护性和防止代码的逆向分析。此外,它还可以在代码中添加死代码、无用的函数等,增加代码的复杂度和难以理解性,从而增加代码的保密性。

官网:https://obfuscator.io/

将进行OB混淆的代码进行JS代码格式化

JS代码格式化:https://www.qianbo.com.cn/Tool/Beautify/Js-Formatter.html

var _0x30bb = ['log', 'Hello\x20World!']; //列表元素(被混淆的真实代码部分)也有可能会被base64等机制编码

//该函数是将_0x30bb列表进行了元素进行了移位,将列表变为了['Hello\x20World!','log']
(function (_0x38d89d, _0x30bbb2) {
   
    var _0xae0a32 = function (_0x2e4e9d) {
   
        while (--_0x2e4e9d) {
   
            _0x38d89d['push'](_0x38d89d['shift']());
        }
    };
    _0xae0a32(++_0x30bbb2);
}(_0x30bb, 0x153)); //在浏览器Console中加载执行该自运行函数后,打印_0x30bb列表查看移位结果

//该函数为解密函数(用来还原真实的代码)
var _0xae0a = function (_0x38d89d, _0x30bbb2) {
   
    _0x38d89d = _0x38d89d - 0x0;
    var _0xae0a32 = _0x30bb[_0x38d89d];
    return _0xae0a32;
};
//ob混淆的js代码
function hi() {
   
    console[_0xae0a('0x1')](_0xae0a('0x0')
ob混淆 ast工具是一种用于混淆源代码的工具,主要针对Python语言编写的代码。AST是Abstract Syntax Tree的缩写,即抽象语法树,它是Python解释器在分析源代码时生成的一种表示方式。ob混淆 ast工具通过操作抽象语法树来混淆源代码,使其难以被逆向工程分析和理解。 ob混淆 ast工具的原理是通过修改和替换抽象语法树中的节点和结构,使得源代码的结构、语义和逻辑变得混乱和困惑。它可以对变量名、函数名、类名等进行重命名,使得原本可读性强的代码变得难以阅读和理解。同时,还可以对源代码中的函数调用关系、控制流等进行修改和隐藏,增加解析和分析的复杂度。 ob混淆 ast工具的优点是能够在不改变源代码的功能和逻辑的前提下,提高源代码的保护性。通过混淆源代码,可以有效地防止源代码被反编译、逆向工程和非法盗用。对于需要加密和保护源代码的应用场景,ob混淆 ast工具是一种非常有效的安全保护措施。 然而,ob混淆 ast工具也存在一些缺点。首先,混淆后的源代码可读性较差,给后续的维护和调试带来不便。其次,由于混淆是通过修改和替换抽象语法树实现的,因此在一些复杂和庞大的项目中,可能会导致混淆过程失败或引入新的错误。 总之,ob混淆 ast工具是一种在保护源代码安全性方面非常有用的工具。通过操作和修改抽象语法树,可以有效地混淆和加密源代码,使得其难以被逆向工程分析,增加了源代码的安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My.ICBM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值