当前位置: 首页 > news >正文

关于spiderdemo第二题的奇思妙想

前言

spiderdemo是练习爬虫案例的网站,如下

反爬虫练习平台https://www.spiderdemo.cn/而第二题需要逆向,但是里面的js代码很麻烦,经过混淆,不想搞怎么办?

直接开始

正文

前置分析

其中参数很容易发现

如下

很明显,sign就是加密参数。

搜索一下关键,很容易发现如下

而其中加密使用的是hex_md5,进去看看

一堆不知道是什么东西

但是笔者发现这个hex_md5都在ob_challenge1.js这个js文件中,于是笔者把这个文件下载来,

添加

let a=hex_md5("17612268353402")
console.log(a)

运行,报错

var ۦۥۥﱠﱣﱟ = WheelEvent, ۥﱣﱠۦﱣۦ = window, ۥﱟۦﱠۥۦ = document, ۥﱟۦﱠۦۥ = navigator, ﱣﱞﱟﱣﱣﱠ = location, ۥﱟۦﱠﱞۦ = history,
             ^

ReferenceError: WheelEvent is not defined

。。。。

笔者看着也不想逆向,然后,笔者问了AI,AI说是node环境没有window。

笔者突然有个想法,放到html里面试试,如下新建一个a.html文件

<!DOCTYPE html>
<html lang="en" xmlns="">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<script src="ob_challenge1.js">
</script>
<script>let a=hex_md5('17612268353402')console.log(a)
</script>
<body></body>
</html>

Pycharm打开页面

啊,哈哈哈哈哈哈

和前面生成sign一模一样,那说明全部的加密都在这里面,那不需要解混淆,解个寂寞

直接调用html获取参数不就可以了,笔者感觉没问题,说干就干。

调用html

如何调用html,可以使用selenium ,但笔者想使用DP,笔者从来没有使用过,正好尝试一下

DrissionPage官网https://drissionpage.cn/安装过程就不必细说。

笔者想使用如下的代码获取结果

如下是two.py文件

from DrissionPage import ChromiumPage
page = ChromiumPage()# 1. 加载本地 HTML(file:// 协议)
html_path = 'file:///' + __import__('os').path.abspath('a.html').replace('\\', '/')
page.get(html_path)
# 2. 执行 JS 并拿结果
md5_val = page.run_js("return hex_md5('17612268353402');")
print('MD5 值:', md5_val)# 3. 退出
page.quit()

文件位置如下

执行two.py文件,结果如下

哈哈哈哈哈,成功了。

绕过逆向。哈哈哈哈哈

笔者还发现在Pycharm中打开html,如下

有个localhost:63342,那么直接不装了,代码如下

from DrissionPage import ChromiumPage
page = ChromiumPage()
page.get("http://localhost:63342/study-spider/src/spiderDemo/a.html")
for i in range(1,101):md5_val = page.run_js(f"return hex_md5('1761226835340{i}');")print('MD5 值:', md5_val)
page.quit()

直接对localhost:63342发送请求,结果如下

没问题。既然如此,搞事情

编写爬虫

细节不必多言,直接看代码

from DrissionPage import ChromiumPage
import time
import requests
html = ChromiumPage()
html.get("http://localhost:63342/.../a.html")
total=0
for page in range(1,101):url=f'https://www.spiderdemo.cn/ob/api/ob_challenge1/page/{page}?'timestamp=int(time.time()*1000)sign=html.run_js(f"return hex_md5('{timestamp}{page}');")print("第"+str(page)+"页的参数sign是"+sign)cookies = {'sessionid': '你的sessionid'}headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36 Edg/143.0.0.0'}params={'challenge_type':'ob_challenge1','sign':sign,'timestamp':timestamp}response=requests.get(url,params=params,headers=headers,cookies=cookies)success=response.json()['success']if not success:print("Failed to get valid response")else:page_total=sum(response.json()['page_data'])total+=page_total
print(total)

笔者html页面路径都去掉了,这个每个人的都不同,看个人。

结果

ok。

总结

感觉卡bug了,没有进行逆向之类的。

就是把那个js文件下载下来,放到html里面,使用DP打开html,调用js函数,获取加密后的结果。

哈哈哈哈哈哈哈哈哈哈哈哈。

http://www.dtcms.com/a/519559.html

相关文章:

  • Python处理指定目录下文件分析操作体系化总结
  • k8s部署自动化工具jenkins
  • YOLOv5 目标检测算法详解(一)
  • No040:陪伴的艺术——当DeepSeek学会在时光中温柔在场
  • 6-1〔O҉S҉C҉P҉ ◈ 研记〕❘ 客户端攻击▸侦查客户端指纹
  • 苏州企业网站设计企业phpstudy如何建设网站
  • 仿站网站域名网站建设数据库实验心得
  • 怎么看电脑的主板BIOS型号
  • 广东省高校质量工程建设网站管理登陆网站开发软件
  • 压缩与缓存调优实战指南:从0到1根治性能瓶颈(一)
  • LeetCode 381: O(1) 时间插入、删除和获取随机元素 - 允许重复
  • 一次RedisOOM 排查
  • MongoDB迁移到KES实战全纪录(下):性能优化与实践总结
  • 【Java 开发日记】我们来讲一讲阻塞队列及其应用
  • 免费网站统计代码农业电商平台有哪些
  • 在长沙做网站需要多少钱手机网页禁止访问解除
  • IEEE754是什么?
  • [lc-rs] 树|建桥贪心
  • 状压DP:从入门到精通
  • Open-webui
  • AIDD - 前沿生物科技 自主决策实验 (Autonomous Experimentation) 的简述
  • 网络管理员教程(初级)第六版--第5章网络安全及管理
  • 怎么创建自己的公司网站开发公司总工程师职责
  • AI问答:rust自定义Drop如何手动释放内存?
  • JetPack 6.0 / Ubuntu 22.04 (L4T 36.x )一键彻底关闭自动更新脚本
  • 【展厅多媒体】展厅小知识:VR体感游戏推动展厅数字化转型
  • MySQL部署
  • ubuntu中为什么查看CPU的步进?查看命令是什么?
  • 【2025】libtorch_cpu.so: undefined symbol: iJIT_NotifyEvent
  • 广告设计网站免费樟树市建设局网站