关于spiderdemo第二题的奇思妙想

前言

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

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

直接开始

正文

前置分析

其中参数很容易发现

如下

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

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

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

一堆不知道是什么东西

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

添加

javascript 复制代码
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文件

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文件

python 复制代码
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,那么直接不装了,代码如下

python 复制代码
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发送请求,结果如下

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

编写爬虫

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

python 复制代码
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函数,获取加密后的结果。

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

相关推荐
ZC跨境爬虫3 小时前
跟着 MDN 学CSS day_3:(为一个传记页面添加样式)
前端·javascript·css·ui·音视频·html5
夜雪闻竹3 小时前
sql.js WASM 实战:浏览器里跑 SQLite
javascript·sql·wasm
小白学大数据3 小时前
Scrapling:极简高效的 Python 智能爬虫框架
开发语言·爬虫·python·数据分析
爱喝铁观音的谷力景辉3 小时前
在Cesium中实现带箭头方向路线样式的技术详解
javascript·cesium
Qhappy3 小时前
AI逆向实战:从零还原某航空App的AES加密
javascript·后端
安妮的小熊呢4 小时前
CRMEB开源商城系统 & 标准版系统(PHP)开发规范
开发语言·javascript·php
坚定信念,勇往无前5 小时前
electron-vite 安装better-sqlite3
javascript·数据库·electron
@菜菜_达5 小时前
jquery.inputmask插件介绍
前端·javascript·jquery
深蓝电商API5 小时前
爬虫任务调度系统:基于Celery的定时+触发式采集方案
爬虫
摸鱼小李上线了5 小时前
vue项目页面添加水印实现方法
前端·javascript·vue.js