爬虫从入门到精通(12) | JS中常见的混淆和密码加密

在这里插入图片描述

一、js中常见的的混淆

1.最简单的混淆举例

最初级混淆,变量定义

// 定义目标值
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

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

2.常见的混淆

①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处下断点。

② AA混淆

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

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

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

在这里插入图片描述

③JJ混淆

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

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

在这里插入图片描述

④ jsfuck混淆

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

  • 在js中,无论什么值加“”都会变成字符串

在这里插入图片描述

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

在这里插入图片描述

  • 解决:推荐解密工具

二、了解常见的加密方式

1.对称加密算法

对称加密算法是指加密和解密采用相同的密钥,是可逆的(即可解密)。

  • 优点: 加密速度快

  • 缺点: 密钥的传递和保存是一个问题,参与加密和解密的双方使用的密钥是一样的,这样密钥就很容易泄露。

  • 常见算法:AES(128位、192位或256位)、DES(64位)、3DES

2.非对称加密算法

非对称加密算法是指加密和解密采用不同的密钥(公钥和私钥),因此非对称加密也叫公钥加密,是可逆的(即可解密)。公钥密码体制根据其所依据的难题一般分为三类:大素数分解问题类、离散对数问题类、椭圆曲线类。

  • 优点: 加密和解密的密钥不一致,公钥是可以公开的,只需保证私钥不被泄露即可,这样就密钥的传递变的简单很多,从而降低了被破解的几率。
  • 缺点: 加密速度慢
  • 常见算法: RSA、DSA、ECC

3.线性散列算法

  • 常见算法:MD5(常见32位/16位)、SHA1(40位)、HMAC

MD5单向的算法不可逆。MD5加密后的数据长度要比加密数据小的多,且长度固定,且加密后的串是唯一的。

4.Base64

  • 组成:A-Z a-z 0-9 - + =

严格意义讲,Base64并不能算是一种加密算法,而是一种编码格式,是网络上最常见的用于传输8bid字节代码的编码方式之一。

5.小技巧

# 123456的md5加密32位
e10adc3949ba59abbe56e057f20f883e

# 123456的md5加密16位
49ba59abbe56e057

# 123456的base64加密
MTIzNDU2

# 123456的sha1加密
7c4a8d09ca3762af61e59520943dc26494f8941b

在常见的加密中,如果看到加密数据不是16位和32位的,且加密的数据中的字母最大为f,一般是非对称或者对称加密,因为他们是16进制加密

猜你喜欢

转载自blog.csdn.net/qq_40558166/article/details/120475988