python爬虫二十四:js逆向破解(一)

1、环境搭建

通过python代码模拟js去生成加密数据完成数据破解,需要用到PyExecJS模块
①安装模块pip install pyexecjs通过模块的方法来读取js代码,也可以用js2py(不更新维护了)、selenium(driver.wxecute_script(js代码))去执行js文件,这里以pyexecjs为例
②python调用js代码的时候需要nodejs的环境(安装步骤如下)
nodejs下载地址:点解对应版本下载,我选择64位msi
在这里插入图片描述
选择msi它可以自动配置环境变量,不用手动配置环境变量,选择zip需要先解压,后手动配置path环境变量(增加nodejs配置)
在这里插入图片描述
无脑next按照默认选项操作,直到finish,通过命令行来验证是否成功安装,按ctrl+c退出node交互模式
在这里插入图片描述
③写一个js文件通过python来读取它的数据初步进入js逆向的学习
在这里插入图片描述

2、浏览器知识点补充

浏览器抓包工具在什么是爬虫中有过介绍,这里再补充一点常用小技巧,框中的代表保留日志信息,比如一些ajax请求,如果不勾选它,一旦页面刷新,那么他不会保留之前的信息,不利于爬取数据查看api信息
在这里插入图片描述
键盘按住shift鼠标悬停再对应的文件之上,可以查看到他们之间对应的层级依赖关系会以颜色显示
在这里插入图片描述

3、哈希类JS加密(一般处理登录过程中的加密)

3.1MD5:模拟登录一品威客

先找到加密的数据是哪些数据再通过search搜索加密文件是再那个js文件里面,然后通过断点调试找到数据加密的方法,将js文件复制进入pycharm,通过excejs引入js进行解密破解该加密数据,进行模拟登录。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2有道词典

有道词典也是一个post请求,通过对比翻译两个不同单词form_data表单携带不同的数据来比较出哪些数据是变化的比较发现i、salt、sign、its发生变化,下图没有写全,自己比较,将不同的加密参数模拟出来传入通过requests获得结果,js代码自己去分析,或者私聊我,py代码我放下面
在这里插入图片描述

from day01 import get_js_function
import requests
dic = get_js_function('youdao.js', 'youdao', 'ordinary')
dic['i'] = 'ordinary'
dic['from'] = 'AUTO'
dic['to'] = 'AUTO'
dic['smartresult'] = 'dict'
dic['client'] = 'fanyideskweb'
dic['doctype'] = 'json'
dic['version'] = '2.1'
dic['keyfrom'] = 'fanyi.web'
dic['action'] = 'FY_BY_CLICKBUTTION'
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36',
    'Referer': 'http://fanyi.youdao.com/',
    'Host': 'fanyi.youdao.com',
    'Cookie': 'OUTFOX_SEARCH_USER_ID=-1063838233@10.169.0.82; JSESSIONID=aaa6LVCQlOvoh7aoDIXux; OUTFOX_SEARCH_USER_ID_NCOO=518038871.14423877; ___rl__test__cookies=1602854040845'
}
r = requests.post('http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule', data=dic, headers=header)
print(r.json())

3.3模拟登录唯品会

通过分析发现它的密码是md5加密,search密码,找到对用的js文件发现他是匿名函数,将他改写,通过execjs将js转换为python可以获得加密的密码,携带data模拟登录唯品会
在这里插入图片描述

from day01 import get_js_function
import requests
pwd = get_js_function('weipin.js','md5','666666')
data = {
'loginName': 18329520409,
'password': pwd
}
url = 'https://www.epwk.com/index.php?do=login'
res = requests.post(url,data=data).json()
print(res)
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值