JS逆向---极验三代系列详解-最全流程(三)分析JS, w值参数生成最终值


前言

原创文章,请勿转载!
本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。
本文关联文章超链接:
JS逆向—极验三代系列详解-最全流程(一)分析接口,底图还原部分

JS逆向—极验三代系列详解-最全流程(二)分析JS, w值参数生成-RSA算法部分
JS逆向—极验三代系列详解-最全流程(三)分析JS, w值参数生成值最终值
后续更新

滑块验证码是我们在互联网上经常遇见的校验是否人类操作行为的一种检测方式,大概流程就是生成一张图片,然后随机挖去一块,在页面展示被挖去部分的图片,再通过js获取用户滑动距离,以及坐标等信息到后台进行校验。只要用户移动的距离符合,以及移动的轨迹行为检测通过即可视为验证通过。

而大部分开发者做爬虫时经常需要绕过该此类验证码进行下一步的爬虫,本文仅对极验geetest平台下的滑块验证码的图片还原进行分析与研究,试图找到打乱图片到正常图片之间的还原函数以及解析它还原算法的原理。


声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除,请各位自觉遵守相关法律法规。


逆向分析

  • 目标:https://www.geetest.com/demo/slide-float.html(仅使用官方demo案例学习交流)
  • 逆向参数:gt,challenge,w,callback四个值比较可疑 + 底图还原

对于w参数还原逻辑的py分析

对于底图还原部分,我们先挨个分析其接口以及网站发的包,看一下每一部分的具体逻辑,具体逻辑如下:

接口:https://www.geetest.com/demo/gt/register-slide?t=1703038233004
携带载荷-时间戳
返回challenge值,gt值
    challenge: "9196fd975b68171924c9e9c4bdda70cb"
    gt: "019924a82c70bb123aae90d483087f94"
    new_captcha: true
    success: 1
进行滑动-接口:https://api.geetest.com/ajax.php
携带载荷-gt,challenge,w,callback四个值比较可疑
    gt: 019924a82c70bb123aae90d483087f94
    challenge: 9196fd975b68171924c9e9c4bdda70cb8z
    callback: geetest_1703038349899

1. 分析接口
直接先进行刷新
接口:register-slide
    载荷-携带时间戳
    返回---challenge值, gt值
        challenge: "790fc0592dc8a9ebb2c6ca3f3c9774a8"
        gt: "019924a82c70bb123aae90d483087f94"

接口:gettype.php
    载荷-携带gt值(由register-slide接口可得), callback值(geetest_ + 时间戳)
    返回---一些js文件

接口:get.php
    载荷-携带gt值, challenge值(都由register-slide接口可得),w1值(加密值,推测可能为环境校验), callback值(geetest_ + 时间戳)
    返回---c数组(一个9位数组), 一些响应提示语

点击按钮进行验证
接口:ajax.php
    载荷-携带gt值, challenge值(都由register-slide接口可得),w2值(加密值,推测可能为环境校验), callback值(geetest_ + 时间戳)
    返回---result: "slide"
        status: "success"

接口:slide.7.9.2.js
    一个js文件,推测可能是进实现行底图分割的js文件

接口:get.php
    载荷-携带gt值, challenge值(都由register-slide接口可得)type(推测为版本号),  callback值(geetest_ + 时间戳)
    返回---c数组(一个9位数组),
          改变后的challenge值(就在响应里面)
          challenge: 790fc0592dc8a9ebb2c6ca3f3c9774a8hb
          响应提示语,
          图片信息也在这一部分返回,包括bg: 背景缺口图(乱序),fullbg: 背景图(乱序)slice: 缺口图

接口:refresh.php
    载荷-携带gt值, 改变后的challenge值(由get.php接口可得), callback值(geetest_ + 时间戳)
    返回---challenge值(再次改变)
    challenge: 790fc0592dc8a9ebb2c6ca3f3c9774a8c4

拖动滑块完成拼图
接口:ajax.php
    载荷-携带gt值, challenge值(由refresh.php接口可得),w3值(加密值,推测可能为环境校验), callback值(geetest_ + 时间戳)
    返回---validate: "7a30f499241dfa139a3a5d6c5d04a5d5"(也就是我们最终所需要的值)


接口分析完毕
开始对滑块的JS逆向进行调试
    由以上接口分析,进行观察分析调试的过程中需要做什么
        1.理解并获取到三次变换的challenge值
        2.找到并分析背景缺口图(乱序),背景图(乱序),还原的代码
        3.找到并分析w值是如何生成

对于w参数还原部分的js分析

续接上文,已经分析出来了u的值,那我们继续对该部分进行分析,接下来需要分析h的值,但h的值有需要l,所以先分析l的值,打下断点,对该位置进行分析,r$_CAIAK(744)是随机数,跟上一篇的随机数逻辑相同(二者要保持相同才行),接下来分析o的值是怎样生成的
对比下o的多个刷新值,不要忘记本心,我们是要将o的值进行逆向,看看o的值哪个是可以固定的,哪些是需要进行替换的,综上所述分析,基本上值为以下几点

  • userresponse:滑动距离 + challenge 的值
  • passtime:滑块滑动时间—>为滑动结束时间 - 开始时间
  • imgload:图片加载时间
  • aa:轨迹加密
  • ep-tm:window[“performance”][“timing”] 相关
  • mocq:每天 key、value 会变
  • rp:gt + 32 位 challenge + passtime,再经过 MD5 加密
    在这里插入图片描述
    往上翻一下就找到了o的位置,对该位置打下断点进行挨个分析在这里插入图片描述
    太乱了看着,解混淆后效果如下
    在这里插入图片描述
    所以我们挨个分析一下userresponse, aa, ep怎么来的,userresponse直接将H方法扣下来即可,
    aa的值我选择跟栈分析,发现 l 即为aa的生成位置,分析该位置
    在这里插入图片描述
    挨个解混淆分析一下
    在这里插入图片描述

在这里插入图片描述
然后分析这一部分,相当于传入了三个值,后俩个值看了一下,c,s,是一个很明显的值,对比一下前面这两个值是哪个接口获取到的,到时候py文件中获取到直接传入即可
在这里插入图片描述
在这里插入图片描述
然后进行前两个的分析,直接进去,发现前两个都包含在W中
在这里插入图片描述
在这里插入图片描述
把W拿下来,放到node中,然后对其进行进行改写和替换,输出进行测试
在这里插入图片描述
返回ct未定义,如上,再在网页端将ct全拿下来放进去
在这里插入图片描述
发现其实已经跑通了,将轨迹和c,s使用当前的先固定一下,然后对其网页端和自己扣的代码进行对比一下看看是否一致
在这里插入图片描述
在这里插入图片描述
由此,可解决aa的值已解决,接下来分析rp的值,因为前两个,ep和h9s9是可以暂时固定的,回到原来的位置,发现走到这里时候rp的值就已经生成,上下看一下,细心一点,即可确定rp的位置,位置如下:
想要获得rp的值,解混淆一下,o[‘rp’] = X(i[‘gt’] + i[‘challenge’][‘slice’](0, 32) + o[‘passtime’]),gt, challenge值是前面get.php端口响应得到,所以我们对X方法进行分析即可,先简单看一下,可能是一个加密算法,然后在细节看一下该部分长度为32位,推测可能为MD5加密算法,反正不管怎么样,先跟进去看一下,当然你也可以选择全扣下来,直接将替换下混淆的,也没问题,我是直接替换的X方法,然后自己再用变量测试一下,看看对不对,这里是 MD5 加密,也可以直接通过引库复现
在这里插入图片描述
在这里插入图片描述
现在剩下的就是ep-tm参数了,顺着刚才o的值的位置,下面一点就是ep的生成位置,打下断点,一步一步跟进去
在这里插入图片描述
在这里插入图片描述
跟进去,发现是在这一步进行生成值返回
在这里插入图片描述
至此,o的值已全部分析完毕,所以我们的l参数也解决了,接下来回归主线任务,解决h加密情况即可

在这里插入图片描述
跟进去,然后往上看,将m全扣下来

在这里插入图片描述
结果
在这里插入图片描述

写在最后:
本人写作水平有限,如有讲解不到位或者讲解错误的地方,还请各位大佬在评论区多多指教,共同进步.如有需要代码和讲解交流,可以加本人微信18847868809

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
小红书是一个社交电商平台,为了保护用户的数据安全和防止恶意攻击,平台采用了加密算法对一些敏感参数进行加密处理,比如x-s和x-t。逆向工程是指通过对应用程序或代码的逆向分析和解析,以获取其内部的机制、算法或逻辑流程。 要逆向解密小红书的x-s和x-t参数,通常需要进行以下步骤: 1. 获取加密的js文件:首先,我们需要获取小红书的相关js文件,可以通过抓包工具或者浏览器开发者工具获取到与加密相关的js文件。 2. 分析加密算法:通过对js文件的逆向分析,我们可以寻找到相关的加密算法或函数。一般来说,加密参数通常会用到一些常见的加密算法,比如AES、RSA、MD5等。分析加密算法的关键是找到加密所使用的密钥和加密的处理过程。 3. 提取密钥和参数:一旦我们找到了加密算法和处理过程,接下来需要尝试提取出密钥和参数。这需要根据具体的算法和代码逻辑进行实际的代码分析和编写。 4. 解密参数:当我们获取到了正确的密钥和参数后,就可以编写相应的解密函数来对加密的x-s和x-t参数进行解密。 需要注意的是,逆向工程涉及对他人软件的解密和分析,这可能涉及到法律和道德等方面的问题,建议在合法和合规的前提下使用逆向工程技术。此外,小红书作为一款商业应用,也会不断更新其加密算法和安全机制,因此逆向解密可能随着时间的推移需要不断更新和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值