这一天,终于记起了公众号的密码(不是,终于有素材了~)
最近各个爬虫群里出现了一个“叛徒” --- vvv大佬
以下是题目及链接
http://match.yuanrenxue.com/match/18
http://39.101.191.131:8000/
猿人学18是1.0的版本 另一个网址是最新版~ 新更新的题目也会在上面
让我们祝他好运~
下面开始今天的分析
(我还是搞得算法,hook 或者 rpc 可以找志远大佬py一下)
首先看看1.0版本吧
大概了解过的可以找到 下一个 xhr断点 加密是绑定在了open上面
在open这行下个断点进去 这部分开始就是vm的内容了
首先看两个东东
然后 其实 hook 一下 CryptoJs parse啊 encrypt 就可以知道了
这边分享另一个思路,最后能看到的结果是这样子的
这样子其实蛮明显的了 时间戳生成的 key iv aes cbc 加密 加密内容是鼠标几个点 那这个怎么来的呢? 你猜~
搜索 return yU_[_v].apply(yU_, __) 这个函数 下一个log 断点
其中最后一个是运行结果 如果加上日志等于运行一次 整体代码运行结果可能会出错。不过在分析的时候还是可以加上的
下完之后 鼠标移出 就会发现控制台输出很多内容
这就是记录鼠标的位置 点击一下第二页 上面的输出内容就能看到了
是不是很简单 终于为什么是这个位置 你猜~ 自己跟一下代码总能找到答案的(或者看看下面2.0版本的分析吧)
------------------------------------------------------------------------------
最新的版本 多了一些检测以及防 hook 用rpc还是可以无脑过 不过加密算法变成了自写的算法,对于xml.open也做了一下隐藏 首先还是xhr断点看看
直接在这停下来了 相同的思路 log断点,运行一次
看输出就可以看到大致的算法了
页数 时间戳 charCodeAt
32次 Random算法 按随机数大小排序,32次 charAt 就得到了结果
那么问题来了 随机数 后台怎么检测呢?这个 seed 是啥
然后就可以在相同位置 当调用 Random函数的时候下个断点
这种时候不得不说 狗哥牛逼!
实测 Random 算法就是这个啦
然后的问题就是 初始化的seed是哪来的 这里就提供个思路
return y__ && (V__ = __V(_, V__)) 这边下一个条件断点
初始化的seed就是这里来的
最后还原完算法就30行左右
分析结束啦~ 代码会发到唠嗑群~欢迎大家进群唠嗑 vvv大佬也在群里 第一时间获取最新题目hhh 不得不说 这个反爬还是很厉害的(坐等更新吧)