侧边栏壁纸
  • 累计撰写 10 篇文章
  • 累计创建 6 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Funcaptcha-bda分析

BeiFeng
2024-04-07 / 0 评论 / 11 点赞 / 405 阅读 / 7443 字

声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请评论留言我立即删除!

网址

aHR0cHMlM0EvL3d3dy5hcmtvc2VsYWJzLmNvbS9hcmtvc2UtbWF0Y2hrZXkv

流程分析

首先会请求public_key,每个网站的key是固定的,请求的参数我们需要逆向bda,其余的参数和网站的参数一样就可以了,这个请求会返回我们所需要的token。有的网站会多一个blob参数,这个是前面请求返回的。

请求:
enter image description here
enter image description here
返回
enter image description here

index.html请求和gfct请求验证public_key请求返回的token是否可用(根据public_key请求的指纹信息的干净程度,以及IP等因素),请求的参数就是token拆分开来
enter image description here

gfct请求验证public_key请求返回的token是否可用(根据public_key请求的指纹信息的干净程度,以及IP等因素),如果指纹不可用,gfct请求会返回需要校验的问题,以及需要校验多少组图形,gfct请求的参数就是token拆分开来。
请求:
enter image description here
返回
enter image description here

ca请求校验图形,需要guess和bio参数,所有图形校验完成,返回"answered",其余都返回"not answered"
enter image description here

接口分析

public_key接口,bda参数

这个接口需要我们逆向出bda参数,跟栈向上找,找到这个switch控制流的地方,就是bda加密的地方了,js是异步加载的,有混淆,混淆后面研究AST解,现在硬刚。
enter image description here
这段代码的大概流程是这样子的,在switch打个断点,把后面的控制流抠出来就可以了,用的是crypto.subtle这种异步的加密方式,和传统的区别再研究。
(这里可以直接搜索"1e3",就可以找到这段代码了)

var n = (new Date).getTime() / 1e3,  
  o = navigator["userAgent"],  
  i = Math.round(nn - nn % 21600),  
  c = JSON.stringify(r),  
  s = ro(c),  
  f = o + i,  
  l = Wn(Uint8Array, 16),  
  p = Wn(Uint8Array, 8),  
  v= co(l),  
  d= co(p),  
  g= ao(f, d)  

  var u = {}
  return u.name = 'AES-CBC',
	window.crypto.subtle.importKey("raw", g, u, !1, ["encrypt"])

上面的c = JSON.stringify( r ),就是待加密的参数了,也就是指纹信息
enter image description here

指纹的合成代码,直接搜索"api_type"或者"js",这个地方就是合成大数组的地方了,也就是上面的r参数。
enter image description here
控制台打印输出一下e
enter image description here

到这里bda的参数就差不多了,要收集指纹信息,继续往前,找到指纹信息生成的地方,把代码扣下来,获取指纹信息就好了

11

评论区