python爬虫逆向|某手web滑块逆向分析笔记

网站链接

这里就不放链接了,某手web端的滑块,清理下cookie就会出

滑块流程

在请求数据的接口内,result出现400002,就是出现滑块了,这里url就是滑块链接

然后取出滑块链接里的captchaSession,去请求config这个链接

就会得到滑块的各种信息,如下图

最后是,请求kSecretApiVerify接口,验证加密参数verifyParam

加密参数verifyParam逻辑

全局搜索verifyParam:,发现只有一处

进到文件内,观察verifyParam,发现是变量a赋值的,a值又是在e[Jt(“0x37”)]这里赋值的,并且值是我没最终想要的,那就好办了,开始看堆栈吧

经过分析,会发现,verifyParam就是根据这些参数加密得到的

{
  "captchaSn": '上面config里的captchaSn',
  "bgDisWidth": 316, # 可以写死,根据config里的值*0.46,四舍五入得来
  "bgDisHeight": 184, # 同上,可以写死
  "cutDisWidth": 56, # 同上,可以写死
  "cutDisHeight": 56, # 同上,可以写死
  "relativeX": '需要自己识别滑块的距离',
  "relativeY": '同上config里的值*0.46,四舍五入,但不可以写死',
  "trajectory": "滑块拖动轨迹",
  "gpuInfo": '显卡信息,可以写死',
  "captchaExtraParam": '浏览器信息和指纹什么的'
}

trajectory

综合而言,只有轨迹信息trajectory是需要知道怎么生成的,其实就是a.slice(1),a值是上方这里生成的

大致跟一下,其实逻辑不难,可以直接py还原下,代码如下。

def trajectory_calculation(trajectory: list):
    """
    快手滑块轨迹计算算法
    :param trajectory: 轨迹,上图c=n[Na("0x124")]的值
    :return: 计算后的轨迹
    """
    r = trajectory[0][2]
    c = ''
    for t in trajectory:
        c += f',{t[0]}|{t[1]}|{t[2]-r}'
    c = c[1:]
    return c

verifyParam

verifyParam加密的入口在这里

主逻辑在这里,首先先把参数c处理下

py可以直接处理,代码如下

from urllib import parse


def 懒得起名了():
  captcha_data = {
      "captchaSn": '上面config里的captchaSn',
      "bgDisWidth": 316, # 可以写死,根据config里的值*0.46,四舍五入得来
      "bgDisHeight": 184, # 同上,可以写死
      "cutDisWidth": 56, # 同上,可以写死
      "cutDisHeight": 56, # 同上,可以写死
      "relativeX": '需要自己识别滑块的距离',
      "relativeY": '同上config里的值*0.46,四舍五入,但不可以写死',
      "trajectory": "滑块拖动轨迹",
      "gpuInfo": '显卡信息,可以写死',
      "captchaExtraParam": '浏览器信息和指纹什么的'
  }
  captcha_str = ''
  for k, v in captcha_data.items():
      captcha_str += f'&{k}={parse.quote(str(v))}'
  return captcha_str[1:].replace('/', '%2F')

还是这张图,看处理逻辑,i就是上面py处理过的captcha_str,先h(i)赋值给o,在x(o)

一个个看,先h(i),还是蛮简单的,扣下来运行或者py还原下都可以

处理好得到第一个大数组,赋值给o

再看x(o),e是刚才的o,l是一个固定值

往下跟,发现到了一个加密文件里,可以把这个文件直接拿出来

这里先暂停,回溯一下,看看Jose是什么,如图

搜下Jose,发现是在加密文件里的这个o()

然后根据逻辑处理下加密文件,删除一些无用的函数,和对node检测的代码,也就是上图的这一大行,改成如下

然后下方,自己写个函数照抄就好,这里注意js里的Promise是要用then接收值的,得到了第二个大数组,也是就上面的x(o)

最后就是加密结果了,u就是刚才的大数组,e.from(u).toString(‘base64’),就是最后的加密结果了

最后的加密结果想跟的可以跟一下,就是根据Uint8Array,ArrayBuffer的一些操作,和环境检测,不想跟的话,直接node里new Buffer.from(u).toString(‘base64’),结果是一样的

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。


二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

六、面试宝典

简历模板
若有侵权,请联系删除
转载请说明出处内容投诉
CSS教程_站长资源网 » python爬虫逆向|某手web滑块逆向分析笔记

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买