
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【K哥爬虫】联系作者立即删除!
aHR0cHM6Ly9mdy5zY2pnai5zaC5nb3YuY24vbm90aWNlc2gvaG9tZQ==众所周知某验是首家 ”行为式验证“ 安全技术服务提供商,其摒弃了扭曲复杂的字符图片验证码,大大增强了用户的体验感。某验最初代的验证码,是在2012年年底完成的,产品还在内测时,最早的种子用户,大都来自于创始人吴渊母校武汉大学的珞珈山水BBS站:

2014年年中,极验正式开放服务,武汉本土互联网企业尤其是游戏类企业给予了“力挺”。武汉265G是全国最大的网页游戏资讯网站,率先使用了极验“点一下拖一下就能完成验证”的全新验证方式。后来,通过口口相传,武汉17173、电玩巴士等游戏门户网站,也陆续使用其产品。“行为式验证”上线后从游戏行业开始,逐步取代互联网上各种形式的传统验证码,推广到全国各地。
下图为早年市面上的初代产品,时过境迁,是否还存在网站使用无从得知,如果有了解的欢迎私聊 K 哥:

真正的初代产品无从分析,上一篇 K 哥写的为二代滑块在线模式,可以阅读:【验证码逆向专栏】某验二代滑块验证码逆向分析,本案例为二代滑块离线模式分析,与常规的某验产品还是有较大区别的,主页输入企业名称点击搜索会弹出滑块验证码,register 接口返回熟悉的 challenge 和 gt 参数:

如果对某验其他产品了解的话,图片下载路径及加密参数是通过类似 get.php 接口返回的,并且 validate 参数是校验 w 参数后得到的,而当前过掉滑块后,validate 参数直接生成并完成校验了,所有流程都是在本地直接执行的:

session.token 及 validate ,未通过则和一开始的 home 接口返回内容一致,通过则会多出相关企业信息。主页搜索生成验证码后,从验证接口 validate 处跟栈,跟进到 u1G.<computed> 中:

格式化,进入到 geetest.0.0.0.js 文件的第 5689 行,该行打下断点滑动滑块即会断住,可以看到 H2Y 为 fail,此时已经校验完成,并显示失败了:

继续向上跟栈,在第 3273 行打下断点,这里即为校验的位置:

关键部分如下:
W1Y[f2Z.S3C(60)](m1Y, f1G[f2Z.t3C(537)](f2Z.t3C(551), R1Y[f2Z.S3C(278)])[f2Z.t3C(155)]() - f1G[f2Z.S3C(537)](f2Z.S3C(633), R1Y[f2Z.S3C(278)]), R1Y)
于控制台打印一下,初步推测 W1Y[f2Z.S3C(60)] 方法校验了滑动距离、滑动时间及其他的一些参数:

跟进 W1Y[f2Z.S3C(60)],跳转到 offline.6.0.0.js 文件中,格式化后,打断点会发现这里就是 validate 参数的加密位置:

validate: b.A(c, e.d.challenge) + "_" + b.A(a.b("rand0", e.c), e.d.challenge) + "_" + b.A(a.b("rand1", e.c), e.d.challenge)
c 为滑动距离,e.d.challenge 为 challenge 参数的值,e.c 为13位时间戳,加密方式为 b.A 及 a.b,扣下来即可,不过经测试 a.b("rand0", e.c) 即 d,a.b("rand1", e.c) 为 e 的值,分别定义在下图第 173、174 行,分析过程中发现采集了滑块轨迹,不过并没有校验,validate 参数分析完了,那图片路径在哪呢,就在这部分的上面,f、g 经过了 MD5 加密,同样直接扣下来:

不过直接这样下载的图片是乱序的,还原代码同三代滑块及二代滑块在线模式基本一致,宽度需要改动,可参考 【验证码逆向专栏】某验三代滑块验证码逆向分析:

还原后如下:

滑块验证:

搜索结果验证,需要先从 home 接口中获取到 session.token,再加上 validate 等参数即可:


给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我希望我的UserPrice模型的属性在它们为空或不验证数值时默认为0。这些属性是tax_rate、shipping_cost和price。classCreateUserPrices8,:scale=>2t.decimal:tax_rate,:precision=>8,:scale=>2t.decimal:shipping_cost,:precision=>8,:scale=>2endendend起初,我将所有3列的:default=>0放在表格中,但我不想要这样,因为它已经填充了字段,我想使用占位符。这是我的UserPrice模型:classUserPrice回答before_val
我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss
我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试使用正则表达式验证美元金额:^[0-9]+\.[0-9]{2}$这工作正常,但每当用户提交表单并且美元金额以0(零)结尾时,ruby(或rails?)将0砍掉。所以500.00变成500.0,因此正则表达式验证失败。有没有办法让ruby/rails保持用户输入的格式,而不管尾随零? 最佳答案 我假设您的美元金额是小数类型。因此,用户在字段中输入的任何值在保存到数据库之前都会从字符串转换为适当的类型。验证适用于已转换为数字类型的值,因此在您的情况下,正则表达式并不是真正合适的验证过滤器。不过,您有几种可能性可以解决这个问
关于这个有很多问题,但似乎都没有帮助。是的,我看过thisrailscast.我有一个作者,他有很多书,像这样:作者:classAuthor书:classBook我创建了以下表单以在authors#show中向作者添加一本书:#labelsandbuttons......使用以下authors_controller方法:defshow@author=Author.find(params[:id])@book=@author.books.buildend...以及以下books_controller方法:defcreate@author=Author.find(params[:autho