文章目录

  • 一、简介
    • JS加密的分析步骤:
  • 二、案例:有道翻译
    • 步骤一:常规操作。找到url,简单分析
    • 步骤二:更改参数为变量,找到参数变化规律
    • 步骤三:(关键一步)使用Python代码生成sign

一、简介

“加密”的过程,就是把“明文”变成“密文”的过程。反之:“解密”的过程,就是把“密文” 变为“明文”。网页数据加密的方式有很多种,比如:JS 加密、Base64 加密、CSS 加密等。

下面让我们一起来探讨一下JS加密!并借助于案例感受解密思维逻辑。

JS加密:是一个非常常见的加密,大部分的页面都会存在

JS加密一般都是对参数进行加密(比如:salt、sign、token、signature等)

JS加密的分析步骤:

  1. 找到哪些参数在影响数据的获取?
    需要做不同的请求,对比参数,找出不同的参数即可
  2. 找到参数之后,需要查找这些参数从哪里获得的/生成的原理是什么?
    (1) 这些参数可能是通过之前的一些请求传递过来的
    (2) 参数是在某个JS文件中生成的 —> 找出对应的JS文件,分析JS代码,得到参数生成的原理

二、案例:有道翻译

需求:用户输入,得到翻译

步骤一:常规操作。找到url,简单分析


代码:

import time,randomimport requests,hashlib# 定义请求头
headers = {'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Connection': 'keep-alive',
'Content-Length': '236',
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': 'OUTFOX_SEARCH_USER_ID=986208581@10.108.160.102; JSESSIONID=aaaLdHZ6LoWe0bYE2Fiyx; OUTFOX_SEARCH_USER_ID_NCOO=1300305255.7828863; SESSION_FROM_COOKIE=unknown; ___rl__test__cookies=1606460419940',
'Host': 'fanyi.youdao.com',
'Origin': 'http://fanyi.youdao.com',
'Referer': 'http://fanyi.youdao.com/',
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36',
'X-Requested-With': 'XMLHttpRequest',
}# 自定义输入单词
word = input('请输入想要查询的单词:')# 定义参数字典
data = {'i': as,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': '16068273407898',
'sign': 'c33d66c41999155f58283feceaf151dd',
'lts': '1606827340789',
'bv': '1dfc4dfa8627abec379e26d41735b09a',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}# 发起请求,接收响应
response = requests.post(url='http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule',headers=headers,data=data)
print(response.json()['translateResult'][0][0]['tgt'])

发现问题:
单词只能查询as,其余单词的都不行


分析问题:可能是参数不同,到页面上查看其它单词的参数。
分析得到:

不同单词有不同的参数:

  1. i:输入的单词
  2. salt:可能是时间戳
  3. sign:看不懂
  4. lts:可能是时间戳,但比salt少一位

步骤二:更改参数为变量,找到参数变化规律

此时判定为使用了JS加密,故去网页中的JS文件查找

通过开发者工具的Initiator可以发现,当前文件仅仅使用了一个JS文件,所以我们要找的参数就在其中。点击查看js文件

通过查找,发现sign所在的位置及代码

如何确定这个sign就是我们需要的?
在这一行打上断点,刷新页面重新请求,如进入debug模式则为目标参数

找到目标参数,分析代码

var r = function(e) {var t = n.md5(navigator.appVersion), r = "" + (new Date).getTime(), i = r + parseInt(10 * Math.random(), 10);return {ts: r,bv: t,salt: i,sign: n.md5("fanyideskweb" + e + i + "]BjuETDhU)zqSxf-=B#7m")}};

分析结果:
sign是经过md5加密后的值,加密参数有e,i两个
其中e可以发现是我们输入的单词
i也就是salt,是由r一级一位随机数组成,其中的r是时间戳。

步骤三:(关键一步)使用Python代码生成sign

salt = str(int(round(time.time()*1000))) + str(random.randint(0,9))# 获取sign
def get_sign(sign):# 1. 初始化md5md5 = hashlib.md5()# 2. 加密md5.update(sign.encode('utf-8'))# 3. 返回加密数据return md5.hexdigest()sign = get_sign("fanyideskweb" + word + salt + "]BjuETDhU)zqSxf-=B#7m")

步骤四:更改参数字典,完成需求

# 定义参数字典
data = {'i': word,
'from': 'AUTO',
'to': 'AUTO',
'smartresult': 'dict',
'client': 'fanyideskweb',
'salt': salt,
'sign': sign,
'lts': str(int(round(time.time()*1000))),
'bv': '1dfc4dfa8627abec379e26d41735b09a',
'doctype': 'json',
'version': '2.1',
'keyfrom': 'fanyi.web',
'action': 'FY_BY_REALTlME',
}

Python(爬虫篇)--- 破解加密【一】JS加密破解相关推荐

  1. Python爬虫神器pyppeteer,对 js 加密降维打击

    爬虫神器pyppeteer,对 js 加密降维打击 pyppeteer 是对无头浏览器  puppeteer 的 Python 封装.无头浏览器广泛用于自动化测试,同时也是一种很好地爬虫思路. 使用 ...

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

    1.环境搭建 通过python代码模拟js去生成加密数据完成数据破解,需要用到PyExecJS模块 ①安装模块pip install pyexecjs通过模块的方法来读取js代码,也可以用js2py( ...

  3. Python爬虫-中华英才网登陆JS加密登陆

    声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 0x00 抓包分析 1.参数分析 参数 数据来源 password 登陆密码加密参数 callback 固定 finger ...

  4. 破解网易云js加密,爬虫获取网易云评论

    破解网易云js加密,爬虫获取网易云评论 抓包 这里是对网页版的网易云音乐进行抓包,分析网络请求,url https://music.163.com/#/song?id=36229055 然后可以发现 ...

  5. Python爬虫入门之淘宝JS逆向解析请求参数Sign加密(一)

    关于JS逆向,相信这是很多小伙伴学习爬虫的一个门槛之一,如果你是初学者入门,开发一款爬虫,要以思路为主,代码是其次的 这里所说的思路指两个方面,一,分析观察目标站点思路,二,代码开发思路,二者缺一不可 ...

  6. 电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分

    电影天堂APP项目开发之Python爬虫篇,共18课时/5时33分,是电影天堂APP项目开发课程的第一篇章,讲解使用requests和bs4库,爬取和解析电影天堂网站数据,并讲数据保存到SQLite数 ...

  7. python 爬虫+selenium 全自动化下载JS动态加载漫画

    ** python 爬虫+selenium 全自动化下载JS动态加载漫画 最近刚学的python,代码可能并不规范,希望大家见谅! 爬取之前,我们首先需要做一些准备工作,因为很多网站都有反爬检索,为了 ...

  8. JS加密,JS混淆,JS混淆加密,JS不可逆加密,JS加密压缩

    分享一个JavaScript加密,JS加密,JS混淆,JS混淆加密,JS不可逆加密,JS加密压缩 ,JS加密. 使用方式 / 注意事项 1.本工具是本站长结合了64个组件(大部分为开源组件),开发出来 ...

  9. 爬虫:破解同花顺网js加密动态生成请求中所需要的cookie

    看了半天帖子都是都是通过selenium破解js加密的,个人感觉用selenium破解js加密效率太低,而且繁琐,根据目前业务需求就自己研究了一下同花顺的js加密. 通过接口测试工具直接请求接口发现获 ...

  10. 二.爬虫--破解网站通过js加密生成cookie(二)

    1. 引言 在上一篇,我分析了中国土地市场网如何通过js加密获得cookie.进而得到网站的正确响应内容.这一次,接着再分析一个网站是如何通过js加密获得cookie的.会更复杂一些. 2. 分析过程 ...

最新文章

  1. 11gR2 GI和DB安装目录权限属主被修改后的恢复方法
  2. 固件模块之间的关系 C语言里面的模块
  3. 一些安全相关的HTTP响应头
  4. 有氧运动 无氧运动
  5. java redis使用卡死_jedispool连redis高并发卡死的问题
  6. ACL 2021 | 结构化知识蒸馏方法
  7. 链表数据结构图解 和 代码实现
  8. C# OOP 重要部分全解
  9. 错误请联系管理员文件 index.php,帝国CMS订单、反馈信息、投稿与留言发邮件通知管理员的方法...
  10. git pull和push整理和归纳
  11. JAVA中基本类型Boolean占几个字节
  12. (50)System Verilog 类中约束数组元素
  13. JPA与Hibernate的优缺点
  14. js动态产生对象push进数组,发现数组所有元素(element or object)一样
  15. 搭建VUE环境、安装npm、node.js
  16. bootcamp opencore_macbook pro用启动转换助理(bootcamp)安装win10踩的坑 | ZPY博客
  17. Java、JSP教务排课系统
  18. D - Frodo and pillows CodeForces - 760B
  19. SSD固态硬盘和机械硬盘的区别
  20. 时空复杂度(时间复杂度/空间复杂度)O(1)、O(n)、O(n^2)、O(log n)、O(n log n)是什么意思

热门文章

  1. 【券后价12.90元】【包邮】植护婴儿湿巾纸宝宝湿纸巾儿童手口专用80抽家用大包装特价实惠装...
  2. OpenJudge- 1789:算24
  3. OK6410上裸机点亮LED程序
  4. RT-Thread操作系统
  5. VirtuoZo:航摄影像的处理及拼接
  6. 重学Elasticsearch第3章 : ElasticSearch高级查询、索引库原理、倒排索引、DSL高级检索
  7. 来看看你踩坑没有,新手做自媒体却没有收益?原因都在这5点
  8. 某乎x-zse-96、x-zst-81最新通杀方案
  9. 防线 2020/3/31
  10. 【模块】MAX31865 铂电阻温度检测器模块 RTD传感器PT100-PT1000