上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇。抠一下某品会的JS代码,接着使用抠取的JS代码加密密码进行登录。友情提示:为避免不必要的纠纷,本文中所有网址都进行了一定隐藏。

目标

标题已经阐明了本文的目的:

  1. 密码加密解密;
  2. 利用第一步加密方法加密后进行登录;
  3. 完整代码中尝试了多账号号批量登录(由于篇幅有限,移动到了 阅读原文 中);

抠出代码

找到目标网站,进入登录页面(对各位来说都很easy):

像以往一样输入错误的账号密码,看看提交的数据,点击登录后,提交账号密码 url 如下:

继续看 FormData ,如下图:

图中的 loginName 为你输入的用户名, password 为密码,可以看出被加密了,如果你熟悉了各类JS加密方式,心里应该能大概确定这就是 MD5 加密结果。暂时不用管其它的四个参数,接下来无非就是把加密JS代码抠出来,可以通过调用栈进去,也可以全局搜索 password 来定位JS文件,具体使用哪种方法就看各位看官的喜好了,我这里是从调用栈进去的(既然我们是在登录,那就点带有 login 字样的js文件进去好了):

进来后你可以搜一下 password 关键字,应该马上就能定位到想要的位置,定位的时候别忘了挂上一个断点,就像下图一样:

一看加密方法名就是熟悉的 MD5 ,接下来的操作应该更加熟悉了,激活断点(输入账号密码,点击登录,前提是你挂上了断点)。

点击后就进入了加密方法里:

function md5(string, key, raw) {if (!key) {if (!raw)return hex_md5(string);return raw_md5(string)}if (!raw)return hex_hmac_md5(key, string);return raw_hmac_md5(key, string)}

可以看出md5方法一共有三个参数,第一个 striing 即为密码, key 和 raw 是 undefined。接下笨一点的办法就是一步一步运行,把跳转的所有代码都扣下来,如果是刚开始学习抠代码,这个方法能增加很多调试”感觉”,慢慢抠得越来越顺手。取巧一点的无非就是找到大括号:

一直往上找到,应该马上就能找到正括号:

这样里面的代码其实就是本次要抠的代码,但是要使用 python 调用,还要进行一点改动。本次要抠的加密代码其实很简单,毕竟只是 md5 。经过稍微改写后,我们尝试使用python里 execjs 库执行:

成功运行出结果,抠取完毕。

登录

FormData

通过上一节,我们已经可以得到加密后的密码,既然要登录,那就要回到 FormData 中,看看几个参数的含义与取值,经过一番测试,总结如下,感兴趣的也可以自己去试一下。

参数取值loginName用户名password加密后的密码remUser是否记住用户名(0或者1)whereFrom可为空captchaId验证码(可为空)captchaTicket可为空

Cookies

现在的登录都需要携带 cookies ,看一下本站登录时候的Cookies:

看起来很多,但是经过测试并不需要全部携带,cookies应该是服务端产生的,所以还是老老实实带上吧,没有捷径。经过粗略测试,携带以下几个即可登录:

cookies = {' mars_pid': '你的',' cps': '你的',' mars_sid': '你的','times_XXXXX': '你的',' VipRUID': '你的',' VipRNAME': '',' VipDegree': '你的',' user_class': '你的',' VipCI_te': '你的','mars_cid': '你的'}

有兴趣的可以继续试试这里面还有没有可以不用携带的。

Header

不管是登录还是爬取某个网页,请求头是绝对绕不过的,现在一起看看本站的请求头都有哪些:

好家伙,各种都有,不过大家不用担心,经过测试在本文实际爬取过程中只用携带 user-agent,平时的爬取过程中,有些可能会检查上一个网页是在哪里,即要携带 referer ,还有 origin 和 host 也是可能会携带的。

正式登录

本次登录的几个要点在前面应该算已经阐述清楚了,现在要做的无非就是把 FormData 里的数据 post 到 login_url 。

flowchat
st=>start: 开始
e=>end: 结束
op0=>operation: 输入账号密码
op1=>operation: 执行js代码加密密码
op=>operation: 组装formdata
op2=>operation: 把formdata post到登录url
op3=>operation: 分析返回st->op0->op1->op->op2->op3->e

好了,流程知道了开始写代码,友情提示: 由于可能引起一些不必要的纷争,代码中的url和cookies值都隐藏了,大家按照自己的添加即可 。创建了一个 VipLogin 类,下面是部分模块的代码。

执行js代码

@propertydef exec_js(self):"""你自己的js路径:return:"""with open('..//js//weipinhui.js', encoding='utf-8') as f:weipinhui = f.read()js = execjs.compile(weipinhui)return js

加密密码

def get_pwd(self,password):key = ""raw = ""pwd = self.js.call('md5', password, key, raw)logger.info("加密结果为:{}".format(pwd))return pwd

用户名加密

def encrypt_phone(self,phone):return phone[:3]+"*"*5+phone[-3:]

提交数据

def login(self,user,passwd):if not user.isdigit or len(user) != 11:logger.error("目前仅支持手机号方式登录:{}".format(user))return Falsesession = requests.Session()vip_name = self.encrypt_phone(user)times_key = "times_"+userdata = {"loginName": user,"password": passwd,"remUser": "0","whereFrom":"","captchaId":"" ,"captchaTicket":"",}ck_dict = {' mars_pid': '你的',' cps': '你的',' mars_sid': '你的',times_key: '你的',' VipRUID': '你的',' VipRNAME': vip_name,' VipDegree': '你的',' user_class': '你的',' VipCI_te': '你的','mars_cid': '你的'}requests.utils.add_dict_to_cookiejar(session.cookies,ck_dict)resp = session.post(self.login_url,headers=self.headers,data=data,verify=False)ret = json.loads(resp.text)logger.info("账号{}返回结果为:{}".format(self._encrypt_phone(user),ret))if ret.get("result","") == "success":return Truereturn False

登录结果

登录成功的标志为 'result': 'success ‘如下:

{'result': 'success', 'errorCode': 0,'data': {'redirectUrl': 'https://www.xxx.com', 'captchaFlowData': None, 'extend': None,                  'bindMobile': True, 'illegalState': False}, 'redirectUrl': 'https://www.xxx.com'}

完整项目代码获取点这里

唯品会密码JS解密与python模拟登录!相关推荐

  1. 唯品会密码JS解密与python模拟登录

    上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇.抠一下某品会的JS代码,接着使用抠取的JS代码加密密码进行登录.友情提示:为避免不必要的纠纷,本文中所有网址 ...

  2. 唯品会密码JS解密与python登录!

    上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇.抠一下某品会的JS代码,接着使用抠取的JS代码加密密码进行登录.友情提示:为避免不必要的纠纷,本文中所有网址 ...

  3. python模拟登录网站_Python模拟登录淘宝都实现了,你还怕模拟登录?

    文章转载自公众号 :裸睡的猪 , 作者 猪哥66 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录淘宝的文章! 看了下网上有很多关于模拟登录淘宝,但是 ...

  4. 2019年最新 Python 模拟登录知乎 支持验证码

    2019年最新 Python 模拟登录知乎 支持验证码和保存 Cookies 知乎的登录页面已经改版多次,加强了身份验证,网络上大部分模拟登录均已失效,所以我重写了一份完整的,并实现了提交验证码 (包 ...

  5. Python模拟登录某橙色软件并获取所有订单,康康买了啥奇奇怪怪的东西?

    温馨提示 现在宝换成了滑块验证了, 比较难解决这个问题,以下的代码没法用了, 仅作学习参考研究之用吧. 本篇内容 python模拟登录宝网页 获取登录用户的所有订单详情 学会应对出现验证码的情况 体会 ...

  6. python模拟登录详细教程_Python模拟登录requests.Session应用详解

    最近由于某些原因,需要用到Python模拟登录网站,但是以前对这块并不了解,而且目标网站的登录方法较为复杂, 所以一下卡在这里了,于是我决定从简单的模拟开始,逐渐深入地研究下这块. 注:本文仅为交流学 ...

  7. 使用python模拟登录

    使用python模拟登录 运行环境 步骤 浏览器阶段 思路 编码 使用Java模拟登录 该方法是一个比较麻烦的方法,但是它不需要浏览器的配合,适合爬虫之类. 而另一种,使用webdriver的,使用比 ...

  8. Python学习教程:用Python模拟登录淘宝

    今天跟大家出的Python学习教程,Python模拟登录淘宝,我知道,肯定是吸引了你,一起来看看吧! 最近想爬取淘宝的一些商品,但是发现如果要使用搜索等一些功能时基本都需要登录,所以就想出一篇模拟登录 ...

  9. python模拟登录人人网

    模拟登录人人网 代码: #_*_ coding=utf8 _*_ import urllib import urllib2 import cookielib import time import lx ...

最新文章

  1. Nginx反向代理负载均衡时,验证码不正确
  2. 费曼学习法:为何被称为史上最牛的学习法,它的本质究竟是什么?
  3. 编写登录成功和失败的处理器
  4. 2021年春季学期期末统一考试 成本管理 试题
  5. 【算法分析与设计】快速排序
  6. 西安电子科技大学833真题_【2019更新版】西安电子科技大学计算机软件考研信息汇总...
  7. app怎么调用mysql数据_数据库: 安装配置数据库,使用Navicat for MySQL和手机APP 连接测试...
  8. jmeter-Java关于MD5加密方法 以及16位32位互转
  9. 右值引用、移动构造函数和move
  10. [Asp.net]缓存简介
  11. java命令生成jdk文档(jdk文档)-jdk文档是通过命令生成
  12. POJ题目分类(转)
  13. NetWork location failed because baidu location service can not decrypt the request query, please che
  14. 计算机二级c语言考试显示未作答,计算机二级等级考试交卷时显示我的ppt未做答,但是我做了的,是不是我ppt就没有成绩了...
  15. 公司不是家——联想员工亲历2004年联想大裁员【转载】
  16. 工业互联网是什么?发展有多厉害?
  17. [附源码]计算机毕业设计JAVA景区门票系统
  18. 【优化布局】基于粒子群算法求解带出入点的车间布局优化问题附matlab代码
  19. 下载Macromedia FLASHPAPER
  20. UNITY3D报错 bug reporter

热门文章

  1. 计算机主机不启动的原因,电脑开不了机怎么办 电脑不能开机的原因与解决办法 (全文)...
  2. Cortex-a8 arm11 arm9 xscale powerpc 嵌入式处理器实测性能
  3. 健康呵护 放心聆听 飞利浦儿童骨传导耳机K4607上市
  4. 大数据004——Hadoop
  5. 设置阴影box-shadow与text-shadow
  6. 对批改网的fuzz测试
  7. 机器视觉LED光源类型及技术简介
  8. _beginthreadex 创建多线程解读
  9. 前端面试题-clearfix(清除浮动)
  10. 视频教程-虚幻4 VR开发指南-其他