爬虫 京东登录协议分析

最近在研究京东登录的协议,这里简单记录下分析过程

京东登录的流程可分解如下:

  1. 请求登录界面(url是京东-欢迎登录 (jd.com)
  2. 输入用户名密码
  3. 点击登录
  4. 滑块验证码验证
  5. 登录成功

协议报文分析用Fiddler抓包,这里直接从最后一步登录作为切入点

  • 登录请求

从抓包中可以明显发现登录的请求url是:https://passport.jd.com/uc/loginService

请求的报文如下

一个个字段来看看:

uuid:可以在登录页面请求中得到

r:是一个时间戳,写死也可以

version:版本号,可以写死

eid:每次请求都一样,通过调试,发现是JS生成的,大概是根据环境生成的,这里可写死

fp:每次请求都一样,通过调试,发现也是JS生成的,可写死

_t:每次请求都一样,可写死

loginType:每次请求都一样,可写死

loginname:登录的用户名

nloginpwd:这个肯定是密码了,加密算法需要再分析

authcode:查询报文,是url:https://iv.jd.com/slide/g.html中返回的,猜测是滑块验证码

pubKey:可以在登录页面请求中得到

sa_token:可以在登录页面请求中得到

seqSid:查找抓包文件,可以在https://seq.jd.com/jseqf.html?bizId=passport_jd_com_login_pc&platform=js&version=1请求中得到

useSlideAuthCode:每次请求都一样,可写死

综上所诉,需要继续分析的字段是滑块验证码authcode和密码nloginpwd

  • 滑块验证码

请求url:https://iv.jd.com/slide/g.html

请求的报文如下:

一个个字段来看看:

callback:回调函数,可写死

lang:每次请求都一样,可写死

o:登录的用户名

s:与登录请求中的seqSid一致

e:与登录请求中的eid一致

product:每次请求都一样,可写死

scence:每次请求都一样,可写死

appId:可以在登录页面请求中得到

w:每次请求都一样,可写死

最后就是最难的两个字段d和c了

d:这个字段通过查找js,有如下代码

通过设置断点可以看到具体值:

通过多次断点,可以发现以下规律

  1. 数组的长度和滑块缺口距离成正比
  2. 数组的第0组不变
  3. 数组第一列最后一个值减去第一个值,恰好是滑块缺口的位移,可以确定是横向的轨迹
  4. 数组第二列变化不大,可以确定是纵向的轨迹
  5. 数组第三列是时间戳

可以确定这里就是滑块轨迹的代码,其中c参数就是滑块的轨迹,d就是轨迹通过gc函数运算得出的

c:查找报文,是https://iv.jd.com/slide/g.html?appId=1604ebb2287请求获取的,报文如下:

appid:可以在登录页面请求中得到

scene:每次请求都一样,可写死

product:每次请求都一样,可写死

e:与登录请求中的eid一样

lang:每次请求都一样,可写死

callback:回调函数,可写死

可以看到请求返回的challenge就是我们要的值,同时返回的还有bg和patch,应该就是滑块验证码的图片和滑块了,可以利用该图片计算出缺口的位置,作为生成滑块轨迹的参数

  • 密码加密

通过查找js文件,发现是如下代码生成的:

因此只需要知道pubkey就可以计算出密码的值,这个pubkey可以在登录界面得到

至此,所有登录过程的协议都已经破解,相信能看到这里的朋友,也能写出对应的代码了,只是轨迹的部分,由于京东的人工智能校验,不容易通过,需要不停的维护更新才可以。欢迎有兴趣的朋友来技术交流。

原创不易,转载请注明出处,谢谢!

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值