声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请练习作者删除!

逆向目标

  • 目标:某团滑块,behavior和_token参数分析

进入网页后,F12 进行抓包,抓包到 page_data接口:

 

  • request_code:验证码 id;

  • feVersion:yoda.seed.js  返回;

  • source:yoda.seed.js 返回;

  • layer:yoda.seed.js 返回;

响应预览中返回的关键内容如下:

  • session:behavior和_token 的加密关键

  • isDegerade:behavior和_token 加密时用到

  • timestamp:后续请求用到

滑动滑块到指定位置,抓包到 verify 校验接口:

一些重要的参数:

  • request_code: 与page_data接口一样;

  • behavior:浏览器参数,由一些浏览器参数和滑块轨迹构成;

  • _token : 加密参数;

逆向分析

behavior 参数

先全局搜索 "behavior",找到对应的 js 文件,点击进去格式化后,再 ctrl + f 局部搜索定位关键位置:

 

 在第 7706 行打下断点,移动移动滑块到指定位置即会断住:

PY(this[yi5cw_D(0x22)], bv, this[yi5cw_D(0x51b)][yi5cw_D(0xe8)])
  • this[yi5cw_D(0x22)] : 可视化参数和浏览器参数;

  •  bv :  request_code ;

  •  this[yi5cw_D(0x51b)][yi5cw_D(0xe8)] :  page_data 返回的 isDegrade 参数 ;

 再跟进加密函数py 里:

 behavior 由bg 和 bi 经过加密函数Pc 生成的,而 bg 又由  this[yi5cw_D(0x22)]  转成的字符串和加密后的request_code 再加密得到的:

进入加密函数 Pc 中 :

 最终进入 Pw函数,behavior 参数就是由 bu,bj 加密 得到的:

bj + '#' + Pa[yi5cw_D(0x567)](bU, bj);

再看一下bj怎么生成的,在4617 行打下断点,重新滑动验证码:

bj 由 window.f 函数生成在进行base64加密,在通过hook window.f 的位置,断点断在4491行:

 bg 由 page_data 返回的 sgin 解密生成,base  64 加密 window.f 得到前缀;

_token 参数

在7199 行打下断点:

bu[yi5cw_D(0x165)] = bt(bk, bz[yi5cw_D(0x109)]())

_token 在此处已经被加密 ,bk 为 False

 进入  bz[yi5cw_D(0x109)]中 定位到3830行,bz[yi5cw_D(0x109)]() 就是 对象bz 经过bQ 加密得到的

 进入bQ 函数,定位到3763 行可知 bz[yi5cw_D(0x109)]() 就等于 window.boat(encodeURIComponent(bz))

后序的加密方式和 behavior 参数加密方式一样;

Authencation 参数

在6818 行 断点,Authencation 就是 bR, bR 又为 bV 加密的到的;

bv = 'HTTPMethod=POST&Content-MD5=' + bI + '&Content-Type=' + 'application/x-www-form-urlencoded' + '&Date=' + bt + '&Url=' + bT

 

特别说明:

  1. window.f 前缀里来大量的控制流平坦化,直接补环境调试很费时间,可以直接使用自动化工具如 selenium等工具运行的得到结果

  2. behavior 参数里 point 参数 和 _token参数里 mT 参数 是有一定联系的,point 记录的是滑块的轨迹,mT 记录的是鼠标移动最后的 60 个坐标

  3. point 轨迹要符合轨迹离散分布的规律

 

posted on 2023-06-15 22:29  PROMISE-RAIN  阅读(177)  评论(0编辑  收藏  举报