# 知识点：无限debuger，websocket，环境检测，CryptoJS.AES加密，ob混淆，browserify打包

## 解题思路

js无限debugger学习总结

    https://www.cnblogs.com/re-is-good/p/16631913.html

browserify学习
    
    browserify源码解析1——打包后文件解析
    https://juejin.cn/post/6844903657784377351

如果出现debugger直接上油候插件

![请求](./img/2.png)

控制台调试请求发现是`websocket`返回的数据,具体的`websocket`学习到bilibili上学习，有很多视频教程，这里不多讲述。

![请求](./img/1.png)

经过多次调试客户端发送的加密数据是不变化的

![请求](./img/3.png)

进入js代码调试，发现存在`CryptoJS`

![请求](./img/4.png)

我们用解混淆工具测试一下，发现是`CryptoJS.AES`加密

![请求](./img/5.png)

到这里就可以尝试自己编写一个`CryptoJS.AES`加密看结果是否一致，这里我就不在演示，结果自然是不同的。

通过解混淆后的js代码，我们不难发现这是browserify打包后的代码

browserify学习
    
    browserify源码解析1——打包后文件解析
    https://juejin.cn/post/6844903657784377351

既然是browserify打包，原理和webpack差不多，只需要导出加载器问题就搞定了

![请求](./img/7.png)

为了更加清楚的查看源代码，我用浏览器`启动替换本地文件`功能,进行调试

![请求](./img/6.png)

在下标为37的函数体内，可以发现这样一段代码

![请求](./img/8.png)

将字符串`k["toString"]() + "|python-spider.com|yuanrenxue.com|大威天龙，大罗法咒"`给到了
`X`函数，`X`函数是如下

![请求](./img/9.png)

既然都知道了browserify打包，那就开始模拟，导出加载器

![请求](./img/10.png)

在自执行函数下面自己组个加密方法

![请求](./img/11.png)

执行查看结果

![请求](./img/12.png)

## 注意点

Buffer在浏览器中是不存在的，这里改变了`aaaaaa`的赋值

![请求](./img/13.png)

navigator的环境检测

![请求](./img/14.png)

location的环境检测

![请求](./img/15.png)

代码格式化检测

![请求](./img/16.png)