声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除!
前言
某多多的验证码,类型有很多,滑块、点选、手势等等,其中点选的题目繁多,每刷一次都能给你整个新的出来。本文主要对验证码的相关加密算法(不同类型的都大差不差)进行逆向分析,识别模型的训练后续也会推出相关文章,上述内容都仅供学习交流:
逆向目标
-
目标:某多多点选验证码逆向分析
-
网站:感兴趣的小伙伴私聊
抓包分析
触发验证码,抓包,/api/phantom/vc_pre_ck_b
接口返回的 salt 值,会参与到加密参数的生成:
/api/phantom/obtain_captcha
接口获取验证码图片以及题目内容,都经过了加密处理:
- pictures:验证码背景图片链接;
- semantics:验证码需点击的题目内容。
该接口的请求参数中 anti_content
、captcha_collect
都经过了加密,verify_auth_token
是触发验证码之后,返回的识别标志:
/api/phantom/user_verify
验证接口:
- 验证成功:{‘code’: 0, ‘leftover’: 9, ‘result’: True};
- 验证失败:{‘code’: 3002, ‘leftover’: 9, ‘result’: False};
- 验证时间过长:{‘code’: 1001, ‘leftover’: null, ‘result’: False}。
请求参数与 /api/phantom/obtain_captcha
接口基本相同,多了一个 verify_code
,也就是点击的坐标:
anti_content
参数的解决思路,网上有很多详解文章,跟栈就行了,本文就不对此多加分析了:
逆向分析
验证码图片
一般的验证码,其获取图片的接口,基本都是直接返回的下载链接,或者经过 Base64 编码后的值。本案例中,验证码的背景图片链接、标题都经过了加密处理,需要进行逆向分析。
这些图片内容,在后端进行加密,那必然会在前端解密出真实的链接,然后渲染到页面上,据此,基本就有两种方案。
第一种,跟栈分析,/api/phantom/obtain_captcha
接口调用的堆栈基本都在 _app.js
文件中,是异步的,关于异步跟栈的分析流程,之前的文章写过很多,就不再赘述了。跟栈进去,在下图 return 处下个条件断点 i.pictures
,返回验证图片相关信息时即会断住:
单步调试,分析,寻找解密点。向上跟栈到此处,可以看到,c 就是经过加密后的标题,经过 this.formatSemantics
方法处理后,还原出了明文标题:
跟到 this.formatSemantics
中去,kc.Base64.decode(Oa.a.decode(e[0]))
方法解密出了明文值,最终的结果替换掉特殊字符 @ 即可:
kc.Base64.decode
就是 base64 解码(https://www.kgtools.cn/secret/base64):
跟进到 Oa.a.decode
中,将相关算法扣下来即可:
Python 复现:
# ======================
# -*-coding: Utf-8 -*-
# ======================
import re
import base64
from loguru import logger
c = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1,