1. 从抓包开始:找到验证码的'棋盘'数据
本次分析的目标是某验证四代的五子棋玩法验证码。打开页面,可以看到一个五子棋棋盘,上面散落着黑白棋子,任务通常是移动一个棋子凑成五子连珠。在拖动滑块或点击验证的过程中,浏览器会与服务器进行多次请求,突破口就在这些请求内容里。
使用 Chrome 开发者工具(F12),切换到 Network 面板。操作前勾选'Preserve log',防止页面跳转后请求记录被清空。进行正常验证操作后,筛选出携带核心验证数据的请求。关键请求的响应体中包含一个 ques 字段,其值为二维数组,例如 [[0,1,2,0,1], [2,1,0,2,1], ...]。这就是当前棋盘的数字化映射。
在这个二维数组中,数字 0 代表空位置,非零数字(如 1、2、3)代表不同颜色的棋子。服务器通过数组告知前端布局,相比图片传输更轻量且防篡改。同一响应中通常还有 lot_number 字段,构造验证请求时会用到。
抓包找到了记录棋盘状态的数组,这是后续分析的基石。
2. 五子棋算法破解:找到那颗关键的棋子
拿到棋盘数据 ques 后,需要用代码模拟找出应移动的棋子及坐标。题目逻辑是'只移动一个棋子即可完成五子连珠验证'。这意味着当前棋盘上必然存在某一行、某一列或斜线上已有四个相同颜色棋子,只差一个空位。
整体思路分三步:先行,再列,最后检查两条大斜线。
2.1 遍历行,寻找'四缺一'
首先遍历棋盘的每一行。对于每一行,判断是否存在四个相同的非零数字。一行有五个位置,可能是'棋棋空棋棋'(四个棋子夹一个空),也可能是'棋棋棋空棋'。

