• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

某行动态cookie反爬虫

武飞扬头像
我不是泰斗
帮助3

某行动态cookie反爬虫分析


1. 预览

  • 反爬网址(base64): aHR0cDovL3d3dy5wYmMuZ292LmNu

  • 反爬截图:

    • 需要先加载运行js代码,可能是对环境进行检测,反调试之类的

    学新通

    • 无限debugger

      学新通

  • 处理办法

    • 网上大部分人说的都是添加cookie来解决。
      • 那个noscript标签仅仅是用于提示用户的,在不支持js的浏览器展示。
      • 本网站是动态ck,每一次的cookie都是上一次成功请求所返回的,但是python模拟请求时,第一次请求就是上图所示的页面,于是第一次成功的请求就是解决该问题的关键,
        • 1.你可以使用上一次浏览器成功请求返回的ck添加到python里发起请求,当然这比较笨拙,哈哈
        • 2.使用python完成第一次成功的请求
    • 当然,我们选择使用方法2来实现呀,优雅一点嘛

2.调试

  • 无限debugger怎么去掉?
    • 右键,不在这里暂停,是可以,但有时得小心,不暂停了出现无限循环带来的卡顿
    • 这里就简单的使用不在这暂停

3.扣代码环节

  • 1.扣逻辑,扣需要的代码

    学新通从上图可以看出,第一次请求返回了上面的js代码和session_id, wzws_cid,自执行js代码里有逻辑写了,发起第二个验证请求,验证成功的话,返回302状态码,返回新的wzws_cid,然后带着正确的wzws_cidsessionid等参数进行跳转主页,才能成功请求。

    • 我们看一下,第一次返回的js代码:

    学新通

    • 这些个在浏览器调试就会发现都是字符串加密之类的,而且整个代码进行了ob混淆,为了便于调试,使用反混淆工具,反混淆下:

    学新通 - 格式前的j: -
    js `function u(k){function gR(v,A){return gE(A- -'0x92',v);}var P={'oQHKx':function(C,x,d){return A['cirRP'](C,x,d);},'LJXui':A[gD('93LV',-'0x127')],'JITOI':A['FJQMp'],'ktFbX':function(C,d){function gm(v,A){return Z(A- -'0x2ef',v);}return A[gm('0x40',-'0x3d')](C,d);},'nzZBi':A[gD('kdha',-'0xa7')]};function gD(v,A){return gY(A- -'0x5c',v);}function gO(v,A){return gE(v- -'0x3b6',A);}function gF(v,A){return ge(v,A-'0x48f');}if(A[gR('0x561','0x5b1')](A[gD('DT[N',-'0xab')],A[gF('M1Bv','0x635')])){var x=P['oQHKx'](P,C,x);P['oQHKx'](d,N,x);}else{if(A[gR('0x4d8','0x535')](typeof k,A[gR('0x4c5','0x540')]))return function(x){}['const' gR('0x5d7','0x579') 'r'](A[gR('0x4e4','0x4d4')])[gR('0x539','0x4ee')](A[gF('Ux5v','0x657')]);else{if(A[gO('0x27e','0x218')](A[gF('UbQE','0x621')],A[gF('%4Ja','0x6ad')])){var d=C?function(){function gL(v,A){return gD(A,v-'0x69f');}if(d){var Y=J[gL('0x523','BpO(')](n,arguments);return z=null,Y;}}:function(){};return i=[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eoPTlycW-1690770056227)(A[gF('Ms1O','0x5be')]]('',A['yUkFe'](k,k))[A[gR('0x582','0x5bc')]],-0x1cbf 0x33*-0x8b -0x1*-0x3871)||A[gR('0x590','0x509')](A[gD('xrrg',-'0xe2')](k,0x2189 -0x7*0x4dd -0x4b*-0x2),0x42c*-0x8 -0x3*-0x66 0x202e))(function(){return[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JEJ40kwJ-1690770059632)(A[gO('0x2c3','0x2af')]]],A[gR('0x556','0x51d')]))[gD('0sv]',-'0x6c')](A['bHBdS']));else{if(A[gR('0x585','0x500')](A[gR('0x4b1','0x50e')],A['zesRv'])){var N=A['RZobL'][gF('z6h!','0x6d4')]('|'),K=0x9a1 0x53*0x55 -0x2530;while([外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-slIIctLK-1690770059633)(d,N)];continue;case'4':for(var z=0x31f -0x2e9 -0x36;A['HWTiM'](z,J);z ){i[z]=n['charC' gF('xrrg','0x5b5')](z);}continue;case'5':if(!C)return x;continue;}break;}}else(function(){function gl(v,A){return gO(A-'0x1cf',v);}function gr(v,A){return gO(v-'0x3e8',A);}function gG(v,A){return gF(A,v- -'0x5bd');}function gT(v,A){return gD(v,A- -'0x80');}return P[gT('Ux5v',-'0x1e4')](P[gr('0x6b8','0x645')],P[gr('0x6b8','0x6ee')])?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9KlB40Zu-1690770056229)(P['LJXui'])]['apply'](P[gG('0x12','*Ig5')]);}['const' gR('0x51a','0x579') 'r'](A[gR('0x561','0x59a')](A[gR('0x67a','0x5e7')],A['HINSR']))[gO('0x1ca','0x14d')](A[gF('XuiA','0x5b1')]));}}}A[gO('0x1e8','0x238')](u, k);}}` ``

    • 格式后的j:

    学新通 - 从上图中可以看出:

    • 1.进行了正则校验,V表达式,我就纳闷了,格不格式化的会返回true啊,有毒,应该用 来检测至少一个空格嘛,真是的。 学新通 - 第二个正则,p表达式,也是一样的,格式化前后我的都是 k,能能匹配到,这里他应该是想校验是否有 k,那么也要用 号,我真服了,垃圾代码。

    学新通

    • 所以一定会进入else:
      学新通
    • 最终进入:
      学新通
    • "" 0/0='NaN',进入虚拟机中,执行debugger,然后继续u( k),不断地自己调用自己,无限debugger;
    • 总结:可以看出,无论你是否格式化代码,我都会给你进入无限debugger,而debugger仅仅在打开F12时,才会起作用!也就是说和你格式化代码没有屁毛钱关系,只要打开F12就会无限debugger,大家也看出来了,两条分支,一条进入无限while循环,内存爆破,一条无限debugger,所以有意思的来了,如果你按照自己的先验主义,把下面的test校验 的感叹号删掉,你将收获内存被爆破,哈哈,有点道高一筹魔高一丈的感觉了
    • 学新通
  • 分析完了正则校验和debugger,我们书归正传,看看第二个请求里面的加密参数怎么来的,这里最简单的办法就是,直接使用它的js文件即可,没必要自己去扣了,毕竟解混淆之后的代码实在是太清晰了,如下图所示,生成了所需要的地址。

  • 学新通

  • 对该地址发起请求后,校验成功后,拿着返回的wzws_cidsessionid即可正确进行数据获取了

3.验证

70056234)]

  • 对该地址发起请求后,校验成功后,拿着返回的wzws_cidsessionid即可正确进行数据获取了

3.验证

学新通
交流QQ群 529528142

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfgagbi
系列文章
更多 icon
同类精品
更多 icon
继续加载