手机网站栏目结构图,新乡哪里有做网站的,网站优化建设哈尔滨,图库素材网站声明
本文章中所有内容仅供学习交流使用#xff0c;不用于其他任何目的#xff0c;不提供完整代码#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理#xff0c;严禁用于商业用途和非法用途#xff0c;否则由此产生的一切后果均与作者无关#xff01;
本文章未…声明本文章中所有内容仅供学习交流使用不用于其他任何目的不提供完整代码抓包内容、敏感网址、数据接口等均已做脱敏处理严禁用于商业用途和非法用途否则由此产生的一切后果均与作者无关本文章未经许可禁止转载禁止任何修改后二次传播擅自使用本文讲解的技术而导致的任何意外作者均不负责若有侵权请在公众号【K哥爬虫】联系作者立即删除前言近期有粉丝私信说工作中碰到了某团的验证码他弄了一段时间还是没能很好的解决掉希望 K 哥能帮忙看下出篇文章。对于大伙的疑难站点我这都会记录到文档中抽空逐一解决本期就对该验证码展开逆向分析仅供学习交流逆向目标目标某团人机验证码网址aHR0cHM6Ly93d3cuZGlhbnBpbmcuY29t抓包分析使用无痕浏览器直接打开网址或者百度搜索某众点评点进去都会触发没有就多试几次实在不行的话私信我发更容易触发的站点。触发风控重定向到人机验证码页面后F12 打开开发者人员工具刷新网页抓包分析。page_data接口会返回后续加密所需的一些参数以及触发的验证码类型type例如 163 滑动拼图、71 滑条验证、130 图标点选等等。请求参数中的requestCode参数即验证码标识是目标链接触发风控后响应返回的可以考虑用正则等方法提取上例为拼图滑块验证的响应内容滑条和图标点选会多出两个重要参数session和sign若有这两个参数会走不同的加密算法逻辑info接口响应返回 base64 编码的背景、滑块图片请求参数中有个加密参数_token后文会进行逆向分析verify为校验接口请求参数中包含加密参数behavior、_token以及一些环境参数等该接口请求头中的Authencation参数也加密了一些环境同样需要处理异常会导致校验失败校验成功{“status”:1,“data”:{“response_code”:“f03d1664c5d247988214f5f248eca964”},“error”:null}校验失败{‘status’: 0, ‘data’: None, ‘error’: {‘code’: 121056, ‘message’: ‘请求异常,拒绝操作’}}{“status”:0,“data”:null,“error”:{“code”:121079,“message”:“验证失败,请重新操作”}}本文以拼图滑块验证码为例分析各个加密参数的生成逻辑。逆向分析_token首先我们来看看info接口出现的第一个加密参数_token。从该接口的第一个堆栈处下断刷新验证码图片即会断住向上跟栈到下图处这里是最后一个出现_token参数值的位置。可以看到js 代码经过了混淆使用 ast 技术解混淆或者硬跟都可以接着跟踪一下 LD 参数看其是如何生成的。这块是个switch-case语句图例处是执行到最后一步了我们从前往后看到 case 0 代码块发现LD I2(Li, LF, LC, Lo)鼠标放到 LF 上发现此时_token参数已经生成了那么下一步就在function I4下的 return 处下断点重新刷新分析流程断住后LF 中已存在相关参数值向上跟栈到下图处LE 即_token参数的值其生成算法就在上面几行LE LC[cypher](Lr, Ls[reload]())Lr 为LC[config][isDegrade]LC[config]就是从page_data接口获取到的一些响应参数此处的 isDegrade 为 undefined。Ls[reload]()是一些环境、canvas 参数、自动化检测等加密、编码生成部分参数经过 MD5 加密自行跟栈分析LC[cypher]算法如下最终的 KJ 算法传了三个参数解码还原的Ls[reload]()、requestCode 以及 undefinedfunction(La, LM) { var Lr window[decodeURIComponent](window[atob](LM)); return KJ(Lr, LC[config][requestCode], La); }跟进到 KJ 中算法如下function KJ(Lc, Le, LH) { var Li KA[Kaito](Lc, Le); return KC(Li, LH); }KA[Kaito]即Kq(Km(Ll, Lq))直接都扣下来即可。而 KC 中就是几个验证码存在差异化的点之一在拼图滑块的逻辑流程中由于 Le 为 undefined因此直接 return 了 Li也就是最终的_token值如果是滑条La 为 false逻辑会继续向下走并且图标点选和滑条后续的加密逻辑也并不一样这是需要注意的点。直接单步跟进分析即可都不算复杂behavior接下来分析验证接口的关键参数behavior该参数可以按照前文思路跟栈逐步分析也可以直接搜索behavior关键词没做混淆能够直接定位到。LC[verifyData]包含轨迹、时间戳等参数LM 为 requestCodeLs 此处是 undefinedKB 各算法没有很特别的直接按需扣下来即可LH 若为布尔类型值会多走一步Li Ki(Li)function KB(Lc, Le, LH) { var Li KA[Kaito](JSON[stringify](Lc), Kf(Le)); return (typeof LH ! boolean || LH) (Li Ki(Li)), KC(Li, LH); }Authencation直接搜索关键词无法定位Authencation那就和_token一样一步步跟栈分析。verify接口会校验Authencation参数从该接口的堆栈中向上跟栈分析看哪一步没有到哪一步又有了即可。如下图所示在LD I2(Li, LF, LC, Lo)之后Authencation的值就生成了跟到I2中分析Authencation生成位置如下也就是 Ls 的值也校验了一些环境、版本、请求参数等断点分析即可若触发请求异常是会导致部分参数黑掉的结果验证