某乎登录x-zse-96

559 阅读2分钟

前言

​ 仅作学习交流,非商业用途,如侵删

目标地址 aHR0cHM6Ly93d3cuemhpaHUuY29tL3F1ZXN0aW9uLzYyMDkwNzk5Ng==


一、分析登录流程

  1. 清除浏览器cookie,刷新页面,找到set-cookie d_c0参数,获取最初始,也最重要的参数(后面用来生成zse96)
  2. 输入账号密码,点击登录后会出现某盾的滑块,处理后获取ticket参数(滑块加密的算法网上很多,轨迹感觉不校验,我随机的轨迹成功率100%)
  3. 进行滑块成功校验,这里通过上一步的滑块成功后返回的validate生成一个新的 "ticket": '{"validate": "' + ticket + '"}' 这里 ticket 的生成要注意,被加密的字符串中fp 要和申请滑块的fp相同,否则会报错,校验成功后会返回 {success:true}
  4. 接下来就是提交账号密码,验证,密码并没有被加密处理,下面是提交的参数和一个时间戳加密算法
login_data = {
    "client_id": "c3cef7c66a1843f8b3a9e6a1e3160e20",
    "grant_type": "password",
    "timestamp": 1694077667109,
    "source": "com.zhihu.web",
    "signature": get_signature(1694077667109),
    "username": "+8613845622536",
    "password": "11111111",
    "captcha": "",
    "utm_source": "",
    "ref_source": "search",
}
def get_signature(timestamp):
    a = hmac.new(b'd1b964811afb40118a12068ff74a12f4', digestmod=sha1)
    a.update(b'password')
    a.update(b'c3cef7c66a1843f8b3a9e6a1e3160e20')
    a.update(b'com.zhihu.web')
    a.update(str(timestamp).encode('utf-8'))
    signature = a.hexdigest()
    return signature
  1. 接下来将 logind_data urlencode 之后进行和zse96一样的加密处理,生成一个长的加密字符串,作为data参数进行提交验证,完成登录操作

二、登陆成功示例

在这里插入图片描述

总结

滑块相关: b,d 请求, acToken, fp, cb, data 登录相关: zse81可固定,zse96, sign_in的formdata, oauth的ticket

参考文章
【JavaScript 逆向】网易易盾滑块逆向分析 jsvmp-某乎 x-zes-96 算法还原