【JS 逆向 AES逆向加密】Python爬虫实战,日子越来越有判头了

五包辣条! 2021-10-28 19:10:51
加密 JS aes 逆向

大家好,我是辣条。

这是我爬虫实战项目的第22篇,目标是写到100篇,希望大家能关注这个专栏。

一个建筑行业的堂哥为了搞一些商业数据前前后后花了1w,辣条我半个小时就能解决的事情,这就是技术的魅力【爬取是的公开数据!】

爬取目标

网址:监管平台

image.png

工具使用

开发工具:pycharm 开发环境:python3.7, Windows10 使用工具包:requests,AES,json

涉及AES对称加密问题 需要 安装node.js环境
使用npm install 安装 crypto-js
​

项目思路解析

  1. 确定数据 在这个网页可以看到数据是动态返回的 但是 都是加密的 如何确定是我们需要的?

    123.png

    突然想到 如果我分页 是不是会直接加载第二个页面 然后查看相似度 找到第一个页面, 我真是太聪明了

    234.png

    数据找到了 现在开始寻找加密 但是突然发现没有 加密的关键字? 那我们通过url 下手试试 在All里面全局 搜索 query/comp/list(url后面的参数)

    345.png

    找到这个接口 鼠标右键 可以在源代码查看他

    456.png

    567.png

    678.png

    慢慢调试 中间调试太多了 我就不一一截图出来了 跑到这里 发现data 里面的参数 和我们看到的加密一致

h(t.data) 加密位置

789.png

进去h里面 (鼠标光标放到 h上面 会显示他的 js地址 如果没有显示 就是证明你还没有执行到这里 需要在前面打上断点 刷新页面调试)

8910.png

发现这个采用AES加密算法 使用模型CBC模式 采用填充方式为 Pkcs7

AES.decrypt() # 参数说明 秘钥 模式 偏移值
f = 'jo8j9wGw%6HbxfFn' # 秘钥
m = '0123456789ABCDEF' # 偏移值

证明数据推导正确 在 return r.toString() 打上断点

91011.png

r里面数据正常返回

简易源码分享(后面保存没有写 可以自己尝试 不会的 关注 私聊)

import requests
from Crypto.Cipher import AES
import 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).text
f = '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]) # 得到最后一个字符串的ASCII
result = result[0:length - unpadding]
result = json.loads(result)['data']['list'] # dupms json.dumps() dict 格式 json的
# {"键":"值"}
​
for i in result:
   print(i)

行业资料:关注即可领取PPT模板、简历模板、行业经典书籍PDF。
面试题库:由技术群里的小伙伴们共同投稿,热乎的大厂面试真题,持续更新中。
学习资料:含编程语言、算法、大数据生态圈组件(Mysql、Hive、Spark、Flink)

版权声明
本文为[五包辣条!]所创,转载请带上原文链接,感谢
https://blog.csdn.net/ai19970205/article/details/120184969

  1. Python - 字符串作为文件
  2. Python - 重新格式化段落
  3. 4.Python-常用语句
  4. 【Python】基于FastAPI的Restful规范实践
  5. 【Python】FastAPI脚手架:规范FastAPI后端接口项目开发
  6. 【Python】单元测试实践内部指南
  7. Django开发中使用Cache缓存提升10倍效率
  8. python如何重复执行程序命令而不是一次退出
  9. python 编写程序题使用for循环
  10. 一道简单的python作业题,就是不能运行
  11. 使用python回答,望有人来帮
  12. 用python插入日期格式到mysql数据库中,一直运行不了。
  13. 关于以下Python问题如何解决
  14. Use Python to help the financial sister solve the PDF splitting. The sister said it was great...
  15. Comment résoudre les problèmes Python suivants
  16. 如何使用python建立列表?新手入门
  17. python 3d画图库matplotlib,第一次用
  18. python 3d畫圖庫matplotlib,第一次用
  19. Python 3D painting Library matplotlib, utilisé pour la première fois
  20. Comment créer une liste en utilisant python? Débutant
  21. python定义列表 新手入门级别
  22. Liste de définition Python débutant
  23. 如何用Python实现,急!!xdm
  24. 如何用Python實現,急!!xdm
  25. Comment implémenter en python, urgent!! Xdm
  26. 新猿木子李:0基础学python培训教程 Python操作Redis之hash类型
  27. python导入模块变量后,打印的值固定不变了,大老们怎么破。
  28. Why is my rust slower than Python!
  29. 用Python给喜欢的女孩写一个办公小工具,她说棒极了!
  30. python中\t是空一个tab,那这个1.2后面怎么没空格?
  31. Il y a un onglet vide en python, alors pourquoi n'y a - t - il pas d'espace après ce 1.2?
  32. 关于python中pygame.display.set_mode()的一点小问题
  33. 猜我能否用Python编程抢到茅台?已经全部开源到GitHub了
  34. python数据分析numpy 补充短试题
  35. 2W + word long article, an article on literacy python, numpy and pandas, recommended collection!
  36. Python培训-自动化运维常用库
  37. On the magical usage and principle of weak reference in Python
  38. Formation python - bibliothèques d'exploitation et de maintenance automatisées
  39. Python培训-HTTP与HTTPS之间的区别
  40. Python有哪些高级特性?
  41. Python代码阅读(第25篇):将多行字符串拆分成列表
  42. Quelles sont les fonctionnalités avancées de python?
  43. 运用python程序编写下面的的代码
  44. Python代码阅读(第25篇):将多行字符串拆分成列表
  45. 初学者 可以帮我看一下为什么Python程序运行不了吗
  46. 初學者 可以幫我看一下為什麼Python程序運行不了嗎
  47. Python代碼閱讀(第25篇):將多行字符串拆分成列錶
  48. Les débutants peuvent - ils m'aider à voir pourquoi le programme Python ne fonctionne pas?
  49. Lecture du Code Python (article 25): diviser les chaînes multilignes en listes
  50. Écrivez le code suivant en utilisant le programme Python
  51. Python exercises
  52. Python exercises
  53. Python exercises
  54. 随机试验数据函数统计分析python
  55. Python after class exercises (junior / October 11, 2021)
  56. python使用cv2.imread()读取图片失败
  57. python使用cv2.imread()讀取圖片失敗
  58. Python n'a pas lu l'image en utilisant cv2.imread ()
  59. Error debugging is accurate to lines, match case pattern matching... The official version of Python 3.10 is really friendly
  60. 100 basic Python interview questions Part II (41-60)