⭐️JavaScript 网站加密和混淆
JavaScript 网站加密和混淆是指将 JavaScript 代码进行加密和混淆,使其变得难以被阅读和理解,从而增加对代码的保护。
🌟上节回顾
我们已经学习了一段时间的爬虫了,已经基本上了解什么是爬虫,可以写一些简单的爬虫程序,我们在爬取的过程中,会遇到验证码,或者会遇到加密的内容,,也就是JavaScript 网站加密和混淆。本文会讲几个案例,后面看情况,给大家讲几个JavaScript 网站逆向的实战,可能发不出来,平台这边可能审核通过不了,我尽量。
🌟当前现状
随着大数据时代的发展,各个公司的数据保护意识越来越强,大家都在想尽办法保护自家产品的数据不轻易被爬虫爬走。
随着前端技术的发展,前端代码的打包技术、混淆技术、加密技术也层出不穷,借助于这些技术,各个公司可以在前端对 JavaScript 代码采取一定的保护,比如变量名混淆、执行逻辑混淆、反调试、核心逻辑加密等,这些保护手段使得我们没法很轻易地找出 JavaScript 代码中包含的的执行逻辑。
✨URL/API 参数加密
一种是对某些数据接口的参数进行加密,比如说对某些 URL 的一些参数加上校验码或者把一些 id 信息进行编码,使其变得难以阅读或构造;或者对某些 API 请求加上一些 token、sign 等签名,这样这些请求发送到服务器时,服务器会通过客户端发来的一些请求信息以及双方约定好的秘钥等来对当前的请求进行校验,如果校验通过,才返回对应数据结果。
✨JavaScript 压缩、混淆和加密
以下是一些常用的 JavaScript 网站加密和混淆技术:
- 字符串加密:将 JavaScript 中的字符串加密,使其变得难以被理解和破解。
- 代码压缩:将 JavaScript 中的空格、换行符等无关字符删除,减小代码体积,防止被反编译。
- 变量混淆:将 JavaScript 中的变量名进行混淆,使其变得难以被理解和猜测。
- 函数加密:将 JavaScript 中的函数进行加密,使其变得难以被破解和理解。
- 代码混淆:将 JavaScript 中的代码进行混淆,使其变得难以被破解和理解。
这些技术都可以通过各种 JavaScript 加密和混淆工具来实现。需要注意的是,在加密和混淆代码之前,应该先备份原始代码,以防止丢失或者出现问题。
🌟常见加密网站
这个是对相应结果的加密。
编辑
下面是请求参数的加密
下面是请求头加密,Request Headers 里面也可能带有一些加密参数,如果不知道这些参数的具体构造逻辑就没法直接用程序来模拟这些 Ajax 请求。比如下面这种,
这里的X-开头的,类似于SIGN,比如说客户端和服务端约定一种接口校验逻辑,客户端在每次请求服务端接口的时候都会附带一个 sign 参数,这个 sign 参数可能是由当前时间信息、请求的 URL、请求的数据、设备的 ID、双方约定好的秘钥经过一些加密算法构造而成的,客户端会实现这个加密算法构造 sign,然后每次请求服务器的时候附带上这个参数。服务端会根据约定好的算法和请求的数据对 sign 进行校验,如果校验通过,才返回对应的数据,否则拒绝响应。一般这种具有时效性。
还有很多,我就不一一介绍了。后面,我可能会讲几个案例,感兴趣的可以看一看。
🌟常见的JS加密方法
常见的JS加密方法如下:
- MD5加密:通过对数据进行MD5算法加密,生成一个128位的散列值,主要用于密码加密和防篡改。
- Base64加密:将数据转换成一种可读性较差的编码形式,可以进行网络传输和保存数据,但不是真正的加密算法。
- 对称加密:采用同样的密钥进行加密和解密,包括DES、AES、RC4等。
- 非对称加密:使用一对公钥和私钥进行加密和解密,包括RSA、ECC等。
- 加盐哈希:将明文数据与一个随机字符串(盐)结合进行哈希,增加破解难度,常用于密码存储和验证。
- 加密通讯协议:如SSL/TLS,通过对通讯数据进行加密和认证,保障数据的安全性和完整性。
以上是常见的JS加密方法,后面案例也会涉及到,这里可以先了解一下概念。
🌟JavaScript 压缩
JavaScript 压缩是指将原始的 JavaScript 代码进行优化,以减小代码文件的大小,从而提高页面加载速度。通常,压缩过程中会删除不必要的空格、注释和换行符,并使用短变量名和函数名等技术来缩短代码文件的大小。这些处理对于提高网页性能和用户体验非常重要,因为它可以减少网页下载的时间和增加响应速度。常用的 JavaScript 压缩工具包括 UGLIFY、Google Closure Compiler、YUI Compressor 和 JSMin 等。
是不是概念看不懂,我这里举一个最简单的 JavaScript 压缩示例,原来的 JavaScript 代码是这样的:
function encrypt(stringA, stringB) {
const name = "Tom";
alert("hello " + name);
}
压缩之后就变成这样子:
function encrypt(d,c){const e="Tom";alert("hello"+e);}
可以看到这里参数的名称都被简化了,代码中的空格也被去掉了,整个代码也被压缩成了一行,代码的整体可读性降低了。
🌟JavaScript 混淆
JavaScript混淆是指对JavaScript代码进行加密和压缩,以保护代码的安全性、提高执行效率和减少文件大小。混淆技术包括以下方面:
- 变量名和函数名的重命名。将变量名和函数名替换为无意义的字符串,使代码难以阅读和理解。
- 去除空格、注释和换行符。减小文件大小和提高代码执行速度。
- 字符串加密。将字符串加密成一些看起来无意义的字符,可以防止代码的被拷贝和修改。
- 代码结构的混淆。改变代码的结构,使代码的逻辑难以理解。
- 随机代码的生成。生成一些随机的代码来干扰反混淆的工具,使反混淆变得更加困难。
总体来说,JavaScript混淆技术的目的是为了保护代码的安全性和提高代码的执行效率,但也会使代码变得难以维护和理解。
✨原始js代码
function sayHello(){
console.log("Hello World!");
}
sayHello();
我相信大家这里都能看懂,我接下来混淆加密一下,看看你还能不能看懂。
✨混淆后代码
function _0x44f6(_0x43f9ed,_0x171704){var _0x500fef=_0x3779();return _0x44f6=function(_0x26e9aa,_0x52f412){_0x26e9aa=_0x26e9aa-0x17e;console[_0xdf11d(0x183)](_0xdf11d(0x18b));}sayHello();
还有这种:
(function(_0x462911,_0x1ef290){var _0x544f12={_0x19efe5:0x3c9,_0x52e06a:0x359,_0xc1006f:'0x6a6(_0x231007,-0x85f+0x20d2+0x1873*-0x1);}catch(_0x2b7d02){}}
⭐️总结
以上,我们就介绍了接口加密技术和 JavaScript 的压缩、混淆技术,知己知彼方能百战不殆,了解了原理,我们才能更好地去实现 JavaScript 的逆向。