96SEO 2026-02-19 12:09 18
atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’)

拿到网址浏览器打开网站F12打开调试工具清除cookie、storage刷新页面
在Network中找到api/v2/getconf、v3/d请求后续扣代码会用到响应结果返回的值这两个请求中只有v3/d中的d参数是需要扣代码的api/v2/getconf中的id是网站id每个网站是唯一的写固定即可
输入账号密码点击登录找到v3/b、api/v3/get请求其中v3/b请求中的d参数是需要解密的api/v3/get请求中的acToken、fp、cb等参数是需要解密的api/v3/get返回的是图片信息
验证滑块找到api/v3/check请求该请求中data、cb等参数是需要解密的验证成功validate是有值的后续登录会用到会用到响应结果中的值
根据上面分析破解滑块需要解密这些请求api/v2/getconf、v3/d、v3/b、api/v3/get、api/v3/check中的参数其中api/v2/getconf是没有加密参数的鼠标右击请求找到CopyCopy
cUrl(cmd)打开网站https://spidertools.cn/#/curl2Request把拷贝好的curl转成python代码新建
修改yiduSlider.py吧request请求替换成requestSession请求并把id参数单独拿出来点击运行yiduSlider.py请求响应成功
新建getCb.js文件用于放扣下的js代码清除cookie、storage刷新页面随便输入账号密码登录找到api/v3/get请求从请求堆栈中找到第一个文件点击进去搜索cb:搜到的地方全部下断点
刷新滑块会进入其中一个断点而且在断点位置处会发现很多请求参数说明参数生成的的逻辑都在该文件
ast编译js文件自己随便写的ast就不贴代码了如果没有ast编译可忽略此步骤该文件加载时候后面有个时间戳是会动态改变的时间戳改变js回重新加载所以要把时间戳值固定下来找到load.min.js本地替换下搜索script:会找到时间戳赋值的地方我这里改成了1刷新页面输入账号密码登录找到api/v3/get请求会发现该文件加载是时间戳已变为1点击进去该文件右击文件名点击Override
content本地替换文件把编译好的ast代码替换该文件文件替换之后需要刷新页面刷新页面后如果滑块图片不能正常加载说明ast加载有问题如果没问题就找到之前的位置下断点
刷新滑块会进入该断点在断点处会发现cb是n2()调用生成的鼠标悬浮到n2找到该方法分析方法内部nl经过nz处理并return出去而nl是一个uuid方法生成且参数是32在return处断点并把代码拷贝到getCb.js未混肴的js鼠标悬浮到对应位置可查看具体信息
点击跳过断点会进入刚才的断点鼠标悬浮到nk[“uuid”]、nz会在找到方法方法拷贝到getCb.js并在uuid内部断点
调用getUuid(32)执行getCb.js会发现无报错如果是未经过ast转换这里是会报错函数内部经过G函数调用获取n的值虽然最上面n已赋值但是在红圈圈的地方n值又重新排序这些都是文件记载时初始化的把正确的n值、G函数拷贝到getCb.js即可
调用getCb执行getCb.js会发现报nZ的错误在nG方法内部断点
点击跳过断点会进入该断点鼠标悬浮到nZ会发现该方法是B函数调用把B拷贝到getCb.jsB方法内部基本也是经过G函数调用获取的n中的值再运行getCb.js会发现window的错误window[“encodeURIComponent”]这里可以直接使用encodeURIComponent©做替换
点击跳过断点会进入刚才的断点鼠标悬浮D找到该函数把该函数拷贝到getCb.js运行getCb.js报的其他错误说明nZ已扣成功
就这样重复运行getCb.js按照报错的提示把代码扣完即可每个函数都要点进去查看有时候可能扣到了该函数但是调用的时候可能不是该函数因为可能会在其他地方重新命名该函数要注意上下文代码
新建getFp.js用于放扣下的代码刷新滑块找到cb断点处会发现fpnananU[“fingerprint”]鼠标悬浮nU[“fingerprint”]查看值并把cookie输出到控制台会发现取得是cookie中的gdxidpyhxdE
清除cookie刷新页面会进入油猴拦截cookie的断点点击跳过断点直到看到val有值点击跳过当前函数执行看到类似cookie的值后停下分析代码会发现gdxidpyhxdE
Go而GoGIGI的生成依赖与GYGY在上面赋值了一个空数组说明Go的生成就在GY
扣代码的方法和按照扣cb参数时的方法就行其中大部分都在初始化生成直接复制到getFp.js文件即可
新建acToken.js用于放扣下的js代码刷新滑块找到cb断点处在断点处的下面会看到acToken
G7而G7是由getToen方法生成鼠标悬浮getToken找到该方法
进入该方法后会看到另外getToken方法这其中传了一个参数bid、函数函数返回值T就是acTokken把值在bid在控制台输出在Network中搜索一下会发现这个值是api/v2/getconf请求响应结果那么只要分析出这个getToken方法就可以鼠标悬浮到acToken会找到该方法位置然后遇到函数就在函数处下断点直到找到真正生成acToken的位置
经过几次断点调试会发现r.prototype.ka函数函数内部的pE({C:
d})就是生成acToken的位置其中传的参数中的u、d是在r.prototype.ka函数内部生成的d是f布尔值fasle不用管u是kE函数生成的直接扣到js文件就行
鼠标悬浮到PE方法会找到PE函数分析里面代码会发现是return是经过OE方法调用的结果而OE参数是经过JSON.stringify转换的E把E输出到控制台会发现E里面有三个值r、b、d其中b是之前的u复制d的值在Network中搜索会发现d是v3/d请求返回的这里会发现虽然在最初传了bid参数但是在最终生成acToken中并没有用到r是固定值
修改yiduSlider.py初步验证api/v3/get请求会发现图片已经获取成功
清除缓存刷新页面会进入刚才的断点控制台输出r的值并复制给test
在Network中找到v3/d请求把参数复制到控制台并赋值给test1控制台输出
test1会发现返回true说明刚才的断点就是d参数生成的位置
清除缓存刷新页面再出进入刚才的断点分析代码会发现生成加密方法的参数传了
回调函数返回过来的把分析得代码复制到getD.js先把af()、to(!0)代码补全再去扣JE(u,
运行getD.js会发现报wa[h[420]][Y[75]]在f()函数内断点清除缓存刷新页面找到f()断点把wa[h[420]][Y[75]]在控制台输出会发现包含很多信息在文件内搜索productNumber会找到这个json信息赋值得地方在赋值得地方打上断点
清除缓存刷新页面会进入刚才得断点把E在控制台输出在Network中找到api/v2/getconf请求对比请求响应结果会发现E中得有些字段是请求中返回这些字段不能写死除了这些字段其他都是固定的值
写死就行断点调试的时候会发现里面的函数调用返回的都是固定值只不过取值的时候顺序是随机返回的把t值替换成固定的清除缓存刷新页面查看v3/d请求会发现一样可以请求成功
arguments)其实是执行了iE而参数是a.concat(r,
t)合并后的数组所以只把iE扣出来就行IE函数中没什么特别注意的直接断点扣就行
情况类似写死就行还有一种验证方法就是取两次值排序后对比下会发现值都是一样的只是顺序不一样排序方法r.sort()
修改yiduSlider.py替换v3/d请求中的d参数会发现依然可以请求获取成功
分析api/v3/check加密cb和分析api/v3/get加密cb过程一样找到api/v3/check请求通过请求栈进入js文件搜索cb:在搜索到的地方全部打断点然后验证滑块会进入其中一个断点会发现这个cb参数和api/v3/get一样同样调用的是n2方法生成而data
在文件内搜索data:找到带有d赋值的data打断点并把JSON[“stringify”]生成的data值用赋值给window.test用于测试给位置是否是生成data的位置把之前的G5替换成window.test拖动滑块验证会进入断点到G5断点的时候在控制台把G5的值赋值给test1点击跳过断点会发现api/v3/check请求成功在控制台对比test1、window.test中d的值
会发现是一样的说明data参数就是在刚才的断点生成然后还原之前window.test代码
再次拖动滑块验证会进入data生成的断点会发现几个关键的值this[“
store][state][token]、this[traceData]、this[atomTraceData]、this[
store][state][token]、this[traceData]、this[atomTraceData]、this[jigsaw”][“style”][“left”]、this[“mouseDownCounts”]、this[“width”]其中this[“
store][state][token]是api/v3/ge请求响应成功中的token、this[atomTraceData]轨迹、this[traceData]是轨迹经过处理后的字符串、this[mouseDownCounts]固定值1、this[width]是图片宽、this[
store][state][token]是api/v3/ge请求响应成功中的token、this[atomTraceData]轨迹、this[traceData]是轨迹经过处理后的字符串、this[mouseDownCounts]固定值1、this[width]是图片宽、this[jigsaw”][“style”][“left”]是滑动的距离而这些值生成的地方分别在onMouseMove、onMouseMoving方法中其中轨迹可以暂时写死通过滑块距离模拟出来就行在扣代码时候会发现很多和cb一样的函数这时候可以直接在getCb.js中扣代码这里为了更好识别文件可以把getCb.js换成getCorePar.js需要注意的是扣代码时要确定已经在getCb.js扣过的函数是否和正在扣的一样如果函数名一样就要确定函数内部逻辑是否不同如果不一样需要重新命名歌函数名避免和之前的冲突
距离计算可采用PIL、opencv等库也可以自己搞个训练模型距离计算https://github.com/sml2h3/ddddocr可使用ddddocr开源库距离计算https://zhuce.jfbym.com可以使用打码平台如云码轨迹计算要模拟轨迹轨迹中包含移动距离x、鼠标上下偏移y、移动时间拖动的大概过程开始拖动的时候一般速度会很快越接近目标点会越慢而且到最后可能还有细小的移动调整在松开手的时候也许会出现停顿的情况这时候的x是一样的按照这个思路写代码即可最好能找几组验证成功的数据使用折线图表现出来更直观些时间为x轴移动的距离为y轴下面是我自己写的一个虽然轨迹虽然不是太相似但是能验证通过
slide.slide_match(target_bytes,
模拟快到目标点时调整滑块时的轨迹一般会左右移动几下对齐elif
get_track(260)draw_line_chart(track)八、验证结果
修改yiduSlider.py验证滑块其中dt参数是api/v2/getconf请求返回的token是每次获取验证码api/v3/get时响应返回的。
这里就不破解知乎的登录了有兴趣的可以自己尝试下
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback