js混淆原理 js混淆反编译

js混淆原理 js混淆反编译

一、概念

为什么要进行混淆

由于设计原因,前端的js代码是可以在浏览器访问到的,那么因为需要让代码不被分析和复制从而导致更多安全问题,所以我们要对js代码进行混淆。

JS混淆和反混淆常见思路

在了解了js代码的执行过程后,我们来看如何对js进行混淆。可以想到比如我们想实现一个js混淆器我们该怎么做呢,要不就是用正则替换,要不就是在AST阶段生成混淆代码,用正则替换实现简单但是效果也比较差,现在js混淆大多数都是在不改变AST的情况下去生成混淆后的代码,保证代码的功能不变又能够做到混淆的目的。

代码压缩

压缩js代码不用多说,就是去除空格,换行符等等,让代码变成一坨甚至一行。

代码混淆

这里我们抛砖引玉,讲一些比较常见的混淆方式,实际上混淆的办法非常的多。

Javascript 提供了将字符串当做代码执行(evaluate)的能力,可以通过 Function 构造器、eval、setTimeout、setInterval 将字符串传递给 js 引擎进行解析执行。

访问成员变量的方法

js中可以通过window.eval()访问windows对象的eval方法,也可以用window[‘eval’]来访问

变量名混淆(将变量名变成一些无意义的可以来较乱的字符串(16进制)降低代码的可读性`

// eval函数

function eval() {

[native code]

}

//使用eval.toString进行内容匹配”[native code]”,可以轻易饶过

window.eval = function(str){

/[native code]/

//[native code]

console.log(“[native code]”);

};

//对eval.toString进行全匹配,通过重写toString就可以绕过

window.eval = function(str){

//…

};

window.eval.toString = function(){

return function eval() { [native code] }

};

//检测eval.toString和eval的原型

function hijacked(fun){

return “prototype” in fun || fun.toString().replace(/\n|\s/g, “”) != “function”+fun.name+“(){[nativecode]}”;}

相关数据

连接墙的步骤
be七365

连接墙的步骤

⌛ 07-15 👁️ 4274
被无形之手制约着的Core M,Core m5与Core i5的对决
365bet最新网址

被无形之手制约着的Core M,Core m5与Core i5的对决

⌛ 07-15 👁️ 6646