本文内容澳门特别行政区经济科技发展局网站的动态cookie案例,难度适中。
案例地址:https://www.dsedt.gov.mo/zh_CN/pg_home
@
接口分析
对pg_home页面发送了两次GET请求,其中访问了5个自定义的JS文件。
最后一次访问,cookies已经携带了id_token参数。
可以发现有一个gen_id_cookie的请求返回了id_token。但是请求时有4个Param参数。
经过测试,发现这些参数是动态生成的,所以说想获取id_token,就需要生成这4个参数。
接下来我们开始逆向分析。
断点调试
调试前先清空当前页面的cookie,或者开隐私窗口访问。
刚开始全局搜素定位没找到,堆栈进不去, 那么在XHR/Fetch中添加断点。
删除cookie,刷新页面。成功进入debugger。
此时请求中已经携带了这4个参数,说明断点时参数已经生成。
所以我们要往之前的步骤中调试。
倒退几步之后,可以看到进入了自定义的JS中。
这里的几个\x\x,经过转换后可以发现正是我们要找的参数。
定位到之后,就可以开始模拟生成。
模拟生成
最简单的方法是把代码扣出来,然后一点一点补全上下文环境,但是比较耗时。
sha256
Fingerprint2
getUserIP
经过一阵分析,发现这几个自定义的JS都需要使用,没有多余的代码。
那么把所有JS代码都复制出来,复制到本地之后继续分析参数生成。
补环境这块不知道怎么描述比较好,一般是缺啥补啥,但是也要注意检测点。大家继续往下看吧。
注意
_0x29c9[33] 是requestIdleCallback。
window.requestIdleCallback 方法是插入一个函数,这个函数将在浏览器空闲时期被调用。这段对我们本地执行没有意义,所以删除后自行调用fingerprintReport即可。
s.min.js 文件返回的 _0xe1a0xc6, 是后续要使用的Fingerprint2。
所以在闭包函数中让 Fingerprint2 = _0xe1a0xc6;
auth_token
auth_token获取比较简单,初次访问网站会返回一段script代码,可以从中提取auth_token。
murmur
var murmur = Fingerprint2['x64hash128'](jQuery['map'](_0x5ed5x3, function (_0x5ed5x5) {
return _0x5ed5x5[_0x29c9[1]];
})['join'](), 31);
调用方法:Fingerprint2.x64hash128
第一个参数:jQuery['map'](_0x5ed5x3, function (_0x5ed5x5) {return _0x5ed5x5[_0x29c9[1]];})['join']()
第二个参数:31
_0x5ed5x3是长度为28的数组,
把第一个参数优化一下: jQuery['map'](_0x5ed5x3, function(x) {return x['value']})['join']()
这段的意思就是从_0x5ed5x3中把value值拿出来拼接。
我感觉参数一 可以固定,但目前不确定网站是否会对这些值做检测。 如果后面被限制了,可以修改参数中的一些值进行测试。
本地执行代码,生成生成murmur。
h
已知 h 是 headless
headless是把auth_token处理后,再sha256加密得出的
需要注意的是,这里有一些检测点的。
比如这些常见的webdriver、plugins、languages等。
在代码中的意思是,如果webdriver存在,没有浏览器插件plugins、languages为空,则被检测到。
所以这些东西,需要我们自己去补上。
localip
localip 是 getUserIP的参数二中 function 的参数。
到getUserIP中看一下这段代码。
先判断是不是移动设备或者非主流浏览器,是则 n(0.0.0.0)
如果是正常浏览器则在本地创建一个RTCPeerConnection,然后取出和服务器连接的address,n(address)
那这个地方该怎么获取localip,可以直接以移动设备的UA访问让localip固定为0.0.0.0。
或者手动复制一个网页端创建的localip,因为我并不知道如何在本地创建RTCPeerConnection。
所以最好就按 0.0.0.0吧。
4个参数的生成已经分析完毕,大家自己按步骤做一遍吧。
最后发送GET请求获取response中返回的id_token即可。
参考代码
补环境时,并不说所有的都要补的一模一样,你也可以某些时候给定值或者注释掉部分代码。
代码量太多了,贴不上来,大家自行下载吧。
欢迎关注《Pythonlx》公众号,发送 id_token 获取下载链接。
也可获取爬虫逆向群聊二维码!