⚠️前言⚠️
本文仅用于学术交流。
学习探讨逆向知识,欢迎私信共享学习心得。
如有侵权,联系博主删除。
请勿商用,否则后果自负。
网址
aHR0cHM6Ly9wYXNzcG9ydC55b3V6YW4uY29tL2xvZ2luL3Bhc3N3b3Jk
1. 首先来分析一下参数
1_1. get-behavior-captcha-token-v2.json
1_2. get-behavior-captcha-data.json 返回验证码信息
1_3. check-behavior-captcha-data.json 验证接口
2. 加密值 userBehaviorData 生成
2_1. 加密位置,全局检索 userBehaviorData 很容易找到
- M 方法最终生成了加密值,其参数就是 轨迹对象
2_2. M方法,很显然,aes加密,下一步我们只需要搞清楚 U,I 就可以了
2_3. iv:U,key: I 生成
- M方法上方很明显的位置,定义了 I 和 U, 通过 j 方法赋值
- 断点断在j方法内,调试堆栈就会找到这个位置, c值其实就是最初 1_1 接口中返回的 randomStr
- U和I搞定,直接aes加密得到加密值,js代码还是比较简单的
3. M方法搞定后,我们来看一下轨迹参数
轨迹对象的构成:
{"cx": 140,"cy": 22,"scale": 0.5,"slidingEvents": 轨迹列表
}
3_1. 轨迹对象构建位置,跟着轨迹对象调试一下堆栈,就会找到这个位置
3_2. 首先,left 也就是 cx,其赋值位置在这个地方,我们插桩来看一下,滑动过程中的t值的变化
- 经多次滑动,发现left的初始值是14
- 尝试算出轨迹中 mx 的总和,减去初始 mx 值,再加上初始的 left 值 14,正好就是 left 的最终值
- 因此,其实 left 的值就是,distance + 14
3_3. top 也就是 cy
- top 的值其实就是,1_2 验证码信息接口返回的 【cy/2.0 向上取整】
3_4. 轨迹列表
- 首先,第一个点,和鼠标点击的位置有关,可固定,或略微调整
- 其他的点,mx:x相对移动距离,my:y相对移动距离,ts:相对时间差
- 这里大家根据逻辑模拟一下就好了,校验并不复杂
3_5. scale 固定 0.5
4. 验证结果展示
欢迎私信。。。。下班追剧。。。。