爬虫从入门到精通(14) | JS中常见的混淆

在这里插入图片描述

文章目录

  • 一、最简单的混淆举例
  • 二、常见的混淆
    • 1.eval混淆
    • 2. AAEncode混淆(表情包加密)
    • 3.JJEncode混淆
    • 4.jsfuck混淆
    • 5.ob混淆

一、最简单的混淆举例

最初级混淆,变量定义

// 定义目标值
var obj={};
obj.A=1;
obj.B=2;
obj.C=3;

//将目标值得键值定义给另一个值
var xxx='A'

console.log(obj[xxx])  // 1

若多个量的时候,我们可以定义成一个数组,然后通过索引获取值

// 定义目标值
var obj={};
obj.A=1;
obj.B=2;
obj.C=3;

//将目标值得键值放到一个数组
var arr=['A','B','C'];

console.log(obj[arr[1]])  // 2

但是列表中的值还是会直接暴露,因此我们写个方法将列表的值加密,例如使用浏览器自带的base64加密( btoa(val)加密,atob(val)解密)

// 定义目标值
var obj={};
obj.A=1;
obj.B=2;
obj.C=3;

//将目标值得键值进行base64加密
var arr=['QQ==','Qg==','Qw=='];

var jiemi=function(val){
    return atob(val)
}

console.log(obj[jiemi(arr[1])])  // 2

为了安全,我们也可将值进行加密。

二、常见的混淆

1.eval混淆

  • 定义: eval(string) ,可计算某个字符串,并执行其中的的 JavaScript 代码。 有返回值

  • 使用举例

    // eval()函数使用举例
    a=eval('(function xxx(){return "hello world"})()');
    console.log(a)  // hello world
    
    // 将上边的eval字体进行base64加密
    xxx=btoa('(function xxx(){return "hello world"})()');
    console.log(xxx)  // KGZ1bmN0aW9uIHh4eCgpe3JldHVybiAiaGVsbG8gd29ybGQifSkoKQ==
    
    // 然后混淆的时候,可能就会放入加密的东西
    console.log(eval(atob('KGZ1bmN0aW9uIHh4eCgpe3JldHVybiAiaGVsbG8gd29ybGQifSkoKQ==\n')));
    
  • 缺点:想要运行字符串的值,只能通过明文的eval()函数执行,然后里面的字符串可能是多层加密的,我们通常在eval处下断点。

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

js支持Unicode,因此支持Unicode里收录的所有国家语言,如果我们有的语言和我们定义的变量长得很相似(例如0和o),那么因此有了这种混淆。

进入网址:https://www.sojson.com/aaencode.html

示例:console.log("hello world!");

爬虫从入门到精通(14) | JS中常见的混淆_第1张图片

解决方法:

  • 控制台,增删代码,让其报错,即可在虚拟机(VM)处看见源码
  • 在线调试,在 AAEncode 代码第一行下断点,然后一步一步执行,最终也会在虚拟机(VM)里看到源码

3.JJEncode混淆

进入https://www.sojson.com/jjencode.html网址

示例:console.log("hello world!");

爬虫从入门到精通(14) | JS中常见的混淆_第2张图片
解决办法:

  • 控制台,增删代码,让其报错,即可在虚拟机处看见源码
  • 在线调试,在 JJEncode 代码第一行下断点,然后一步一步执行,最终也会在虚拟机(VM)里看到源码

4.jsfuck混淆

  • 网址:http://www.jsfuck.com/
  • 思想: jsfuck源于一门编程语言brainfuck,其主要的思想就是只使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它仅仅使用6种符号来编写代码。它们分别是(、)、+、[、]、!

示例:
爬虫从入门到精通(14) | JS中常见的混淆_第3张图片
解决方法:

  • 如果是非虚拟机的数字/字符串加密使用解密工具:https://www.sojson.com/jsfuck.html
  • 上述解决不了只能一段一段手动控制台复制得结果
  • 如果是虚拟机加密,让其强制报错

当加密内容是虚拟机的加密
在这里插入图片描述

这类想要破解的时候,我们可以使其强制报错(例如在结尾最后让其加个'1'),可以直接看到源码
爬虫从入门到精通(14) | JS中常见的混淆_第4张图片
爬虫从入门到精通(14) | JS中常见的混淆_第5张图片

5.ob混淆

ob混淆具有以下特征:

  1. 具有大数组的情况
  2. 数组移位(有内存泄露风险、建议不格式化),自执行函数,进行移位操作,有明显的 push、shift 关键字
  3. 解密函数(有内存泄露风险、建议不格式化)------可能有定时器--------(看加密的开关开启数量)
  4. 实际代码+控制流平坦化(整体ob的强度几乎完全取决于这段的代码强度,这里面是加密前的逻辑)
  5. 控制流平坦化+无限debugger自执行函数+死代码注入。一般情况下不会有业务逻辑所以不要问,ob、sojson如何破解。这些东西只是一层壳,破解强度完全取决于第四段代码,也就是其他网站作者写的代码强度!
  6. 函数名和变量名通常以 _0x 或者 0x 开头,后接 1~6 位数字或字母组合;

爬虫从入门到精通(14) | JS中常见的混淆_第6张图片

你可能感兴趣的:(#,--,[Python-网络爬虫入门],javascript,node.js,爬虫)