点评/MT九卦阵验证码破解/逆向

点评/MT九卦阵验证码破解/逆向
点评/MT九卦阵验证码破解/逆向
  1. 拿到验证码的url, 解析出request_code
  2. 通过request_code, 请求ext_api/page_data接口, 拿到验证码基础信息. 主要包含sessionsign 两个长字符串
    2.1 sign 是一段加密过的 包含环境检测 /控制流 的/很 /很 的 一串js代码. 解密sign要用到session , 目前检测的环境不多 , sign解密成js代码并且执行成功后可以拿到一个关键的变量 _f 的值.
  3. 通过request_code, 请求ext_api/spiderindefence/info接口, 拿到验证码的两张图片信息, 以及一个很重要的hint 值(乱码字符串, 解密九宫格图片的顺序时要用到)
  4. 识别第一张图片文本, 拿到要连接哪个颜色 ; 识别第二张图片, 拿到 哪个坐标(位置)是哪个颜色
    4.1 文本图片 可以考虑使用ddddocr , 可以勉强识别, 成功率较低

4.2 九宫格图片 识别
4.2.1 服务器下发的九宫格原图 , 顺序/大小都是混淆过的 . 页面最终显示的验证码 是在客户端 先用js解密出九宫格图片的排序顺序, 然后用canvas重新画出的一张图片.
4.2.2 需要扣一下 解密九宫格图片排序的js代码; canvas画图的代码用python的PIL库复现一下就行(一点儿也不难:curse:)
4.2.3 重组后的九宫格图片, 还要注意调整分辨率 (不然会导致下面4.2.4中坐标读取错误)
4.2.4 每个位置的球的颜色识别, 本质就是用PIL库读取固定点的RGB值就可以了, 判断RGB在哪个颜色范围, 就属于哪个颜色. (9个球的位置都是固定的)
4.2.5 参考 原图:
重新排序以及重置分辨率后:
5. 生成滑动轨迹. 手动收集, 每个位置的球都手动连一次, 要注意收集到的轨迹数组的长度, 太长不行, 太短也不行. (不然就得重新收集, 一点儿也不麻烦{:1_909:})
6. 加密各个参数, 提交验证(这部分有很多要注意的点, 先写还记得的)
6.1 behavior和_token, 使用的同一个加密算法, 加密两轮, 但是传入的参数有区别 , 注意区分就好了. 加密结果要用到上面解出来的**_f** 值
6.2 _token主要包含 两个重要的时间戳, 几段 不完整的 鼠标移动轨迹数组和一个点击事件生成的小数组, 以及一些简单的基础环境信息
6.3 behavior主要包含 九宫格图片与各个元素的相对位置坐标, 点击次数, 以及滑动轨迹(有长度限制)
6.3 时间戳部分, 在正确的位置生成正确的时间戳! 注意每个有关联的时间戳之间的差值. 多刷新几次浏览器, 拿到一个大概的差值, 在代码里随机生成一下
6.4 轨迹部分, 注意每个轨迹数组是怎么来的. 不同的轨迹数组, 但是可以相互印证, 对不上就鸡鸡!

有意思的: 通过判断是否存在 “v_” 开头的函数名, 检测v_jstools插件.

图片顺序的解密, js代码的解密, 轨迹的加密代码 都不难. 扣完代码, 再加上补环境的代码, 也就400+行!
更多的是 每个节点生成的时间戳 和 各个轨迹数组的验证!

1 个帖子 - 1 位参与者

阅读完整话题

来源: linux.do查看原文