# 五秒盾分析笔记

	网址  https://pastebin.com/login
# 网站分析

​ 打开会停留五秒,然后才会返回正常的网站,直接抓包分析,看其具体流程 (把 Presever 勾选上)

image-20220812215705386

​ 只有这个返回 200 的时候,才是我们要的网站

通过观察,可以看到,先是访问了一个 503 的代码

对比 charles 中的抓包

image-20220812220530890

​ 我们可以看到这里的这个 ray 在后面反复出现,接下来就先去 503 的请求中,访问了啥

​ 将 charles 抓到的放到本地

image-20220812220847627

​ 可以看到,这里的这个 cray 其实就是后面几次访问携带的值

​ 然后,这个访问获取的 js 经过测试是可以直接 request 访问拿到的,但是这个 js 是每次都是不一样的,也就是说,这里的 js 采用了动态 js 的思路,我们知道 js 发送请求一般都是通过 XMLHTTPREQUEST 这个玩意的,其中发送的时候都用的 send () 方法,直接在网页里面打上 xhr 断点

image-20220813140942887

​ 会在这里发送 send 请求, l[c('0x1cb')][c('0x38')] 这玩意其实就是第二个请求,然后这个 ax 就是将 l._cf_chl_ctx 这个东西

image-20220813141350017

​ 做了一个处理

image-20220813142115653

​ 对比一下,发现这里的这个值其实就是网页一开始这个自执行函数的值,然后直接用插件还原 js 代码,抠出来的这个函数就能直接用,但是因为这个 js 是动态的,所以里面有个值是动态,扣算法要注意,然后这个 请求会放回一段很长的代码,然后这个会返回一段很长的代码。

​ 然后接下来就一直按下一步,发现,始终在这里来回摇摆,

image-20220813173911368

但是,观察调用栈,发现,后面的这玩意其实有所不同,一开始是直接调用的,后面的调用栈就包含了 eval,跟进去看,发现一个很骚的操作,就是把那个数组中的值反复替换,然后反复调用才会拿到最后的值,这样一来就极大加强了 ast 还原代码的成本,

image-20220813211453268

然后继续跟,发现 _cf_chl_ctx 这玩意里面多了点东西,

image-20220813211725224

在跟一下

image-20220813212631241

这里看着就像检测点

image-20220813215046671

果然,这里就是在添加环境啥的,然后这里这个 e() 其实是又是进入一次这个函数,估计又生成了一些环境,

image-20220813221231138

​ 这里还有个 sendRequest,就是指向初次那个 js 的地方

​ 重新捋一下思路,整个的流程如下:
首次访问返回 503----> 访问 503 指向的 js (会根据 503 页面的 window._cf_chl_ctx 生成一段加密参数作为 post 请求的参数) -> 返回一个长度为 10W 的字符串 (这个会用于生成 vm 代码),然后这时候,就会进行一系列初始化的过程,在 vm 中校验环境等等然后这时候往 window._cf_chl_ctx 这里面加东西,最终会在发一段比较长的请求,请求成功后,拿到参数 ---> 访问网页

主要的难点在于,如何拿到这个环境对象,如果他检测到了你在调试,他就会返回很少的环境,

这里采用油猴脚本进行 hook,其中关键点其实是在于进入 vm 前后这个环境对象的变化

(function() {
    var xxa=Function;
    Function=function(a){
        console.log(a)
        console.log('env obj --->')
        console.log(window._cf_chl_ctx)
        debugger
    return xxa(a)
    }
})();

根据堆栈的信息来看,这玩意经过了很多事件的交互。

# 总结:

接下来的话就是漫长的补环境

Edited on

Give me a cup of [coffee]~( ̄▽ ̄)~*

Mr2 WeChat Pay

WeChat Pay