geetest极验空间推理验证码破解与研究

        看了很多的破解滑动验证码,决定破解一下空间推理验证码。破解思路,通过分析接口请求,对图片物体进行定位分类,通过模拟请求破解验证码。

研究的网站为 https://www.geetest.com/show 

 

一、极验请求分析

请求详细

一、register-space

获取gt(一般一个网站是固定的)、challenge(验证流水号,服务端 SDK 向极验服务器申请得到)参数。

challenge参数只能使用一次,一但后面get.php请求后就无法再请求,同时换ip的情况下也会失效。

 二、黑色的三个请求只要根据他的参数照着模拟就可以了,不需要处理结果

 第一次的get.php和ajax.php是无感验证,执行fullpage.js,收集浏览器信息,加密w参数直接填空就可以了。

三、红色的请求

https://api.geetest.com/get.php

获取图片和文字加密信息等

请求参数

is_next: true
type: click
gt: c9428d9361cd70d26e28d7cd780ec640
challenge: 263e2e11a85337b92d821c158c1b438f
lang: zh-cn
https: true
protocol: https://
offline: false
product: float
api_server: api.geetest.com
isPC: true
autoReset: true
width: 100%
callback: geetest_1644770447212

请求响应

 响应中,pic,c,s这3个参数非常重要,在生成w加密参数是需要用到它们

"data": {
    "theme": "silver",
    "theme_version": "1.5.0",
    "static_servers": ["static.geetest.com/", "dn-staticdown.qbox.me/"],
    "api_server": "api.geetest.com",
    "logo": false,
    "sign": "\u8bf7_\u70b9\u51fb_\u5728\u5927\u578b\u7eff\u8272\u7403\u4f53\u540e\u9762\u7684\u7ea2\u8272\u7269\u4f53\u3002", # 物体的文字信息
    "pic": "/nerualpic/space_l1_zh_2019.07.17/space/587417a058088f2f5934e22fcc503980.jpg",  # 图片的url地址,同时也是后续加密生成w需要
    "pic_type": "space",
    "num": 0,
    "c": [12, 58, 98, 36, 43, 95, 62, 15, 12],  # 后续生成w需要
    "s": "514c622c",  # 后续加密生成w需要
    ······
  }

点击坐标后提交,将坐标等信息加密在w中post给服务器,返回validate的值表示验证成功

https://api.geetest.com/ajax.php

请求参数

'gt': 'c9428d9361cd70d26e28d7cd780ec640',
'challenge': '263e2e11a85337b92d821c158c1b438f',
'lang': 'zh-cn',
'pt': 0',
'client_type': 'web',
'w': 'Y1gV9CACfWsfd)vtGUQD(WuKBZnmxhgfpXfD)qDHwhG(h1F4rOco··· //点击的坐标和一些信息的加密信息(点击坐标,图片pic,上面的c和s内容)
'callback': 'geetest_1644752017507'

请求响应

{
     "status": "success", 
     "data": {
          "result": "success", 
          "validate": "23ff2a4fddac68b9e40884befcfbb9af", 
          "score": "1"
      }
}

有了validate就可以和gt,challenge一起提交给需要登录的网站接口做验证了。

 二、JS反混淆

        破解的关键是获取加密参数生成方法。主要在click.3.0.2.js文件中,因此我们学习大佬分析AST的方法将他们反混淆,然后去分析debug。具体可以看看大佬的方法,我就不重复造轮子了。

JS逆向:AST还原极验混淆JS实战

将网站混淆过的源代码下载下来,格式化后将上面几个函数(内容也要的)拷贝到还原方法前,文件位置替换成下载下来的文件地址。运行就会生成反混淆的代码。

AtULc.BaI = function() {}();
AtULc.CJR = function() {}();
AtULc.Dvg = function() {};
AtULc.EyS = function() {};
function AtULc() {}

// 需要解码的文件位置
let encode_file = "click.3.0.2init.js"
// 解码后的文件位置
let decode_file = "click.3.0.2.js"

将代码反混淆后可以使用chrome的reres插件将原本混淆的代码替换

 本地地址要加上file:/// ,同时要在管理reres插件的界面允许访问本地地址

源码我写下来放在github了 点击进入。同时因为不方便下载reres插件,我也将插件上传在github

三、w参数分析

替换文件后打开chrome的开发者工具,再sources中搜"w"

看d的其他参数,显然这个w就是这里产生的,打上断点去提交验证码

 w是p+u,继续往上一步一步分析。

f = Q["encrypt"](de["stringify"](o), r["gCdf"]());
p = h["YQee"]( f);

u = r["fTbG"]();

1、参数 p 生成

f中有两个参数 de["stringify"](o) 和 r["gCdf"]()

一、de["stringify"](o)

de["stringify"](o) 中只有一个参数o,往上找o

var o = {
    "lang": n["lang"] || "zh-cn",
    "passtime": t,
    "a": e,
    "pic": n["pic"],
    "tt": pe(s, n["c"], n["s"]),
    "ep": r["eRts"]()
};

"lang": n["lang"] || "zh-cn" 默认等于"zh-cn"就行

"passtime": t  通过验证时间,随便多少都行888之类,或者就按你debug时的大小

"a": e   e就是点击坐标,最小"0_0",最大"10000_10000",为xy的百分比

"pic": n["pic"]  get.php响应中"pic"中内容

"tt": pe(s, n["c"], n["s"])  get.php响应中"c"和"s"的内容

"ep": r["eRts"]() 这个参数可以为空  令"ep"= {}

其中"tt": pe(s, n["c"], n["s"]) 

就在定义 的上方 s = r["NfwI"]["EhLr"]()

找到EhLr

所以s=e["Xkir"](e["BjJO"](t)

打印出 t 看看

可以看出就是鼠标移动点击的信息和时间,把chrome切换成手机调试模式

 可以将鼠标操作缩短到

 经过测试,这里面的点击坐标为页面的坐标,多少没有关系,保留即可,只要将其中的时间戳换成破解的时间。间隔的时间仿造图中时间差即可。至于能否更简洁更简单办法可以自己尝试一下。

"Xkir""EhLr""BjJO"这些函数都掏出来,修修改改到把 传参进去得到 s

最后在从代码里扣出pe函数,把之前get.php响应中的 和 一起传入就得到了"tt"的值

二、r["gCdf"]()

找 gCdf 这个函数

t = ae()

继续把ae也扣下来,把他们一步步连起来来即可。 

f = Q["encrypt"](de["stringify"](o), r["gCdf"]());
p = h["YQee"]( f);

2、参数 u 生成

 u = r["fTbG"]()

可以看出用到了生成 p 时用到的gCdf

k 抠出来直接调用 gCdf就可以了 

这样 w = p + u 就全部破解完了,可以参考下我上传在github上代码 点击进入

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
1.项目代码功能经验证ok,确保稳定可靠运行。欢迎下载使用! 2.主要针对各个计算机相关专业,包括计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网等领域的在校学生、专业教师或企业员工使用。 3.项目具有丰富的拓展空间,不仅可作为入门进阶,也可直接作为毕设、课程设计、大作业、初期项目立项演示等用途。 4.当然也鼓励大家基于此进行二次开发。在使用过程中,如有问题或建议,请及时私信沟通。 5.期待你能在项目中找到乐趣和灵感,也欢迎你的分享和反馈! 【资源说明】 基于yolov5的极验空间推理验证码模型训练python源码+标注好的数据集+项目说明.zip 测试接口 接口随时都可能会关掉,如果不通就是被我关掉了。 测试接口:`http://49.234.3.186:8888/index` 限制每天500次请求,每小时100次请求,每分钟60次请求。(总计) ### GET请求参数 参数 | 值 | ---- | ---- | gt | c9428d9361cd70d26e28d7cd780ec640 | challenge | 9a5d3a1db9dadbaa867f6a34a5512740 | ### 请求成功示例 ```json { "msg":[], "result":"success", "score":"1", "validate":"ac00fdb3bc74b012c3b82cca057675fa" #使用challenge和validate一起提交验证即可 } ``` ## 验证码问题求解思路 训练模型比较简单,我自己标记了100张图的标签,可以直接训练,也可以直接用我训练好的权重文件`best.pt`,训练了大概700次左右,感觉效果还是不错的,我认为比较麻烦的部分还是分析问题找出符合条件的物体,我写出的逻辑识别成功率大概在80%,暂时不公开逻辑。 `请点击在黄色圆柱体后面的黄色物体。`判断前后左右,可以根据物体底部的xy坐标。 `请点击与绿色物品有相同大小的球。`判断相同大小,可以对比符合条件的物体的二维面积,最相近的可以认为相同大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值