某验四代滑块参数学习
目标网址 aHR0cHMlM0EvL3d3dy5nZWV0ZXN0LmNvbS9hZGFwdGl2ZS1jYXB0Y2hhLWRlbW8=
1.抓包
https://gcaptcha4.geetest.com/load?captcha_id=
获取验证码相关参数 captcha_id gct_path bg lot_number payload process_token pow_detail
slice
https://gcaptcha4.geetest.com/verify?captcha_id=
然后是根据上面获取到的参数进行拼接url,获取w参数(今天的主题)
和三代相比较,少了点击按钮的两个请求,主要做校验的地方就是 w 生成
2.开始寻找参数
点击verify链接,发现都是使用同一个js,估计和之前的差不多,点进去寻找w的unicode编码
"\u0077"
很幸运,找到了这个地方
简单分析一下,r 使我们需要的参数,r在第一个地方被赋值,所以在r被赋值的地方下个断点,刷新当前页面,点击按钮,弹出验证码,开始滑动
js断在了我们刚刚打的断点处
查看该函数传入的值是什么
简直不可相信,滑块的轨迹居然是明文,感觉还不如三代了,这应该就是生成的w的明文了吧,
a的话看不出来是啥,那就看看 d[$_BHHHD(58)]) 是一个什么样的函数
找到这个函数,在返回值return处下个断点,
打印返回的结果,发现o是bytes数组,a是一个长的16进制字符串,return返回的就是我们需要的w,看来就是o进行二次编码和a拼接到一起,形成了最后的w。我们的目标就是找到最开始的明文怎么变成o和a的,先看一下o怎么变成最后的样子吧。在o前面的函数打断点,开始调试。
发现这里返回的结果和前面一摸一样
把这段js抠出来,修改一下,就有了最后的编码部分,重新刷新,看看o和a是怎么来的。
打上断点,先查看输入a输入的是n, o输入的是e,n,在控制台打印一下这两个参数是啥
又看到了熟悉的明文和很短的字符串n ,n是四个e()函数生成的,这里就不多说了
进入到a生成的地方,继续打断点
发现o的值随着while的执行在增大,可以把这方法抠出来,然后补确实的函数,不涉及window相关参数。这个和三代都一样。
最开始生成这个参数的地方可以明显看到dopublic,大家可以用正则或者ast把这些unicode,和数组的地方都替换成正常的字符串,就很容易发现一些简单的地方,我这里按照三代的思路,就没有做过多的处理。这个地方是一个rsa,你可以选择去扣代码,或者去找密钥。a的生成就到这里了。
import rsafrom binascii import b2a_hexe = '010001'e = int(e, 16)n = '00C1E3934D1614465B33053E7F48EE4EC87B14B95EF88947713D25EECBFF7E74C7977D02DC1D9451F79DD5D1C10C29ACB6A9B4D6FB7D0A0279B6719E1772565F09AF627715919221AEF91899CAE08C0D686D748B20A3603BE2318CA6BC2B59706592A9219D0BF05C9F65023A21D2330807252AE0066D59CEEFA5F2748EA80BAB81'n = int(n, 16)pub_key = rsa.PublicKey(e=e, n=n)print(b2a_hex(rsa.encrypt(b"0fe524023c414bb5", pub_key)))