上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇。抠一下某品会的JS代码,接着使用抠取的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即为密码,keyrawundefined。接下笨一点的办法就是一步一步运行,把跳转的所有代码都扣下来,如果是刚开始学习抠代码,这个方法能增加很多调试"感觉",慢慢抠得越来越顺手。取巧一点的无非就是找到大括号:

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

这样里面的代码其实就是本次要抠的代码,但是要使用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,还有originhost也是可能会携带的。

正式登录

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

Created with Raphaël 2.2.0开始输入账号密码执行js代码加密密码组装formdata把formdata post到登录url分析返回结束

好了,流程知道了开始写代码,友情提示:由于可能引起一些不必要的纷争,代码中的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代码的文章,当然不关注也无所谓。

VIP品会密码加密解密与登录相关推荐

  1. python中字符移位加密_1.1 移位密码加密解密python实现

    例题1.1 移位密码加密解密 1.1.使用穷尽密钥搜索法破译如下利用移位密码加密的密文: ESPESTCOPIPCNTDPYPPODACZRCLXXTYR. 1.1答案: K=11,明文序列为: th ...

  2. php加密密码解析,php密码加密解密

    php密码加密解密 龙行    PHP    2020-3-19    1002    0评论 function MD5PWD($data) { $pwd = md5($data); //把密码分割成 ...

  3. 维吉尼亚密码加密/解密在线工具

    维吉尼亚密码加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=856 维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移 ...

  4. 凯撒密码加密解密C语言详细代码

    凯撒密码加密解密C语言详细代码 凯撒密码 又叫循环移位密码.它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代.它的加密过程可以表示为下面的函数: E(m)=(m+k) mod ...

  5. 凯撒密码加密解密——Java代码(密码学)

    凯撒密码加密解密--Java代码(密码学) 凯撒密码: 恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文 ...

  6. 单表代换密码加密解密

    单表代换密码加密解密原理: 单表代换是指英文字母在进行密码编码替换的时候,有一张对照表,也就是说,对于每一个字母,都是唯一对应的,如: 26个源字母表为:abcdefghijklmnopqrstuvw ...

  7. Python-摩斯密码加密解密

    文章目录 前言 一.摩斯密码表 [1]. encode.txt [2]. decode.txt 二.代码 前言 密码表只写了英文字母和数字,在百度的时候发现不同地方写的符号转换方式不大一样. 你也可以 ...

  8. Python编程:实现凯撒密码加密解密

    凯撒密码 原理: 通过把字母移动一定的位数来实现加解密 明文中的所有字母从字母表向后(或向前)按照一个固定步长进行偏移后被替换成密文. 例如: 当步长为3时,A被替换成D,B被替换成E,依此类推,X替 ...

  9. [bcrypt]密码加密解密

    1.密码加密 password:{ type:String, //默认查的时候查不出来(密码不修改,bcrypt就不会每次都修改) //相当于修改密码不显示原始密码 select:false, //密 ...

最新文章

  1. 【廖雪峰python入门笔记】list添加元素_append()和insert()
  2. ios计算机隐藏功能,7个iOS14隐藏功能,看完想立马更新,有你不知道的
  3. 一个可以在github上搜代码段的网站
  4. JSON.stringify() 格式化 输出log
  5. 点击模型:达观数据提升算法精度的利器
  6. 在VMware Workstation中设置双网卡实现SSH使用固定IP登录并且在虚拟系统中任意访问Internet...
  7. 深入理解kestrel的应用
  8. Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
  9. linux 常用正则表达式,Linux中基本正则表达式
  10. Callback、Listener、Worker、Manager的命名说明
  11. android微博表情条,类似新浪微博EditText,可@某人,#插入话题,表情
  12. smartDNS让你的网络一触即达
  13. SuperCard与GBA
  14. 史陶比尔机器人的 LLI (Low Level Interface)
  15. log4j日志整合输出(slf4j+commonslog+log4j+jdklogger)
  16. 服务器装win10系统,win10服务器系统
  17. 精彩回顾 | NDBC 2021华为参会回顾
  18. excel 行列互换 绿色工具(怎么把行变成列,把列变成行)
  19. 应用html的DIV+CSS制作牛顿摆
  20. 平均股价的时间序列图形_数据可视化——pandas绘制股票走势图

热门文章

  1. Android 放图片背景的时钟
  2. 快速订单号生成(两秒左右10万条数据无重复)
  3. 劳动经济学-试题及答案汇总
  4. STM32CubeMX实现串口通信(中断方式)
  5. 至联云讲解《IPFS会成为数据的守护者吗?》
  6. 电信增值彩信平台软件模块清单(sp专用)
  7. 域名重定向的解决方案(1)
  8. 学习笔记|强化学习(Reinforcement Learning, RL)——让AlphaGo进化得比人类更强
  9. Mac小白必备技巧3—Mac截图快捷键分享
  10. Vue中关于[__ob__:Observer]数据问题