声明本文所有内容仅供学习交流,抓包内容,敏感网址,并且数据接口已经过脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果与作者无关,如有侵权请联系本人立即删除!本文未经许可禁止转载,修改后禁止二次传播。对于因未经授权使用本文所解释的技术而导致的任何事故,作者概不负责。如有侵权,请第一时间联系作者公众号【K爬虫哥】删除!逆向目标target:某某三四代一键通模式(无感验证)三代主页逆向分析:aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9mdWxscGFnZS5odG1s四代主页:aHR0cHM6Ly9ndDQuZ2VldGVzdC5jb20v:返回通信过程接口相关:完整流程ch三代抓包情况寄存器值,后面会用到。get.php会返回c和s,后面也会用到。此请求还需要w值。在一个测试的点击滑块中,这个请求可以不带w值,但是在三代无感中,必须要有。否则最后会校验失败,w请求可能不包含,返回的s为false值,导致最终校验失败。ajax.php验证是否成功也需要w值,如果成功则返回一个validate。三代逆向分析的第一个w值相信看过K之前关于滑块和点击的文章,对w值的定位非常熟练。这里类似,“\u0077”是“w”,它的值是i+r,如下图:主要是r,o,i的值,关键代码:varr=t[$_CFAGw(1326)](),o=$_BFx()[$_CFAGw(1367)](pe[$_CFAFP(416)](t[$_CFAGw(353)]),t[$_CFAGw(1393)]()),i=O[$_CFAGw(1375)](o)先看r,后续我们熟悉RSA,和前面的处理一样,可以推导出代码或者使用库。还需要注意的是,上图中的this[$_CHCFe(1393)]()也是一个随机字符串,会遇到很多次,但是一次验证后的整体值是一样的,否则会验证失败,点击、滑动一系列块等都是一样的。然后是o的值,跟之前一样,跟进去之后还是AES加密。t[$_CFAGw(1393)]()还是随机字符串。中间的pe[$_CFAFP(416)](t[$_CFAGw(353)])这串没什么特别的,除了gt和challenge,其他都是固定值。最后一个字符串中i的值是实际测出来的,可以写死也可以留空。然后继续跟进i,把o之前的值转成一个大字符串。这里不是很复杂,直接扣代码:那么i+r就是w的值,这里w的第一个值就结束了。第二个w的值第二个w的值和前面的地方不一样,但是跟着栈也很容易找到。来到varn={};的地方,如下图:t[$_CGABi(1436)]是w的值,即t['$_CEDO'],vart=this前面定义了,在第8215行的t[$_CGAAX(1462)]()之后,有w值,所以跟进关注这一行。如上图所示,e、t、n、r涉及到一些浏览器环境值的计算,当然还有鼠标移动等相关数据的计算,如下图:但是实际测试发现那这四个值直接留空也是可以的,在这个例子中,不知道还有没有其他的验证更严格的情况,知道的朋友可以在评论区提出来,以及那么你会遇到很多变量赋值的地方,如下图,G是MD5方式,中间的O[$_CGBFp(948)]和前面的类似。res和end的加法在一个对象中返回,这里不再赘述。i[$_CGBGa(1415)]这里就是把每个变量和值一个一个相加,组成一个大字符串。然后到r,多了一个captcha_token,然后用{}包裹所有的数据。我们来格式化一下数据,大致结构如下图所示:其中ep中的ven和ren是显卡相关的信息,fp和lp是两次鼠标移动的位置信息,也可以直接写itasnull,tm是关于window.performance.timing的东西,自己伪造吧。最后一步是i[$_CGDBA(1436)],随机串为key,前面的数据r经过AES加密得到我们最终的w值,如下图:第三代验证结果第四代抓包。加载接口的返回值如下:captcha_type:验证码类型,aigct_path:gct4文件路径lot_number:生成pow_msg的关键参数,wpayload:验证请求参数datetime:ISO8601扩展格式的日期,生成pow_msg的关键参数process_token:验证请求参数verify接口返回值如下:captcha_id:验证码idcaptcha_output:登录请求参数gen_time:登录请求参数lot_number:登录请求参数pass_token:登录请求参数登录接口验证成功login:第四代逆向解析w参数同三代无意义,四代无w参数也可以直接搜索“\u0077”定位,r为w参数的值:r参数在6237行定义,内容为如下:(0,d[$_CBHHO(84)])(f[$_CBHIE(84)][$_CBHHO(562)](e),i)d["default"])(f["default"]["stringify"](e),i)可以看出f从上面的r是i是通过加密参数和e参数转换成字符串得到的,跟在d[$_CBHHO(84)]中,11669行定义了加密函数,11707行断了,返回值是r参数的值。即w值:(0,d[$_DIEHS(177)])(c)+ud["arrayToHex")(c)+u这里是将c数组转成16进制字符串然后加上u得到的r值,d[$_DIEHS(177)]可以直接跟进扣除,c在11705行定义:varc=s[a][$_DIEIq(1403)][$_DIEHS(1498)](e,i);varc=s[1]["对称"]["加密"](e,i);e在下面的分析中,i是一个16位的字符串:i在第11702行定义,接着在d[$_DIEIq(103)]方法中,i是一个16位的随机数:e参数的内容是如下:device_id,lot_number通过load接口返回,pow_msg为“1|0|md5|”+日期时间+“|”+captcha_id+"|"+批号+"||"+16位随机数,pow_msg是MD5加密后的pow_sign,"l0zs":"53502544"是一个动态变化的key-valuepair,在之前的四代slider文章中有详细介绍,后续在s[a][$_DIEIq(1403)][$_DIEHS(1498)],c为AES加密,扣除代码或直接引用库:u在11704行定义,i为十六位随机串:u=newl[($_DIEHS(84))]()[$_DIEIq(1498)](i);u=newl["default"]()["encrypt"](i);跟进加密函数l[($_DIEHS(84))],在12725行,在12741行设置断点,可以看到这是一个RSA加密,直接扣代码或者直接引用库:四代结果验证
