Python爬虫实战JS逆向AES逆向加密爬取

目录

  • 爬取目标
  • 工具使用
  • 项目思路解析
  • 简易源码分享

爬取目标 网址:监管平台
Python爬虫实战JS逆向AES逆向加密爬取
文章图片


工具使用 开发工具:pycharm
开发环境:python3.7, Windows10
使用工具包:requests,AES,json
涉及AES对称加密问题 需要 安装node.js环境
使用npm install 安装 crypto-js?

项目思路解析 确定数据 在这个网页可以看到数据是动态返回的 但是 都是加密的 如何确定是我们需要的?
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

突然想到 如果我分页 是不是会直接加载第二个页面 然后查看相似度 找到第一个页面, 我真是太聪明了
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

数据找到了 现在开始寻找加密 但是突然发现没有 加密的关键字? 那我们通过url 下手试试 在All里面全局 搜索 query/comp/list(url后面的参数)
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

找到这个接口 鼠标右键 可以在源代码查看他
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

Python爬虫实战JS逆向AES逆向加密爬取
文章图片

Python爬虫实战JS逆向AES逆向加密爬取
文章图片

慢慢调试 中间调试太多了 我就不一一截图出来了 跑到这里 发现data 里面的参数 和我们看到的加密一致
h(t.data) 加密位置
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

进去h里面 (鼠标光标放到 h上面 会显示他的 js地址 如果没有显示 就是证明你还没有执行到这里 需要在前面打上断点 刷新页面调试)
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

发现这个采用AES加密算法 使用模型CBC模式 采用填充方式为 Pkcs7
AES.decrypt() # 参数说明 秘钥 模式 偏移值
f= 'jo8j9wGw%6HbxfFn' # 秘钥
m = '0123456789ABCDEF' # 偏移值
证明数据推导正确 在 return r.toString() 打上断点
Python爬虫实战JS逆向AES逆向加密爬取
文章图片

r里面数据正常返回

简易源码分享
import requestsfrom Crypto.Cipher import AESimport json?url = 'http://jzsc.mohurd.gov.cn/api/webApi/dataservice/query/comp/list?pg=2&pgsz=15&total=0'headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36 Edg/93.0.961.38'}response = requests.get(url, headers=headers).textf = 'jo8j9wGw%6HbxfFn'# 秘钥m = '0123456789ABCDEF'# 偏移值?# 转码utf-8?字节 16进制m = bytes(m, encoding='utf-8')f = bytes(f, encoding='utf-8')?# 创建一个AES算法 秘钥模式 偏移值cipher = AES.new(f, AES.MODE_CBC, m)# 解密decrypt_content = cipher.decrypt(bytes.fromhex(response))result = str(decrypt_content, encoding='utf-8')?# OKCS7 填充length = len(result) # 字符串长度unpadding = ord(result[length - 1]) # 得到最后一个字符串的ASCIIresult = result[0:length - unpadding]result = json.loads(result)['data']['list'] # dupms json.dumps()dict格式 json的# {"键":"值"}?for i in result:print(i)

【Python爬虫实战JS逆向AES逆向加密爬取】以上就是Python爬虫实战JS逆向AES逆向加密爬取的详细内容,更多关于Python爬取JS逆向AES逆向加密的资料请关注脚本之家其它相关文章!

    推荐阅读