逆向微博热搜时光机(js逆向)

直接分析,我们需要先查询一下网络请求的方式,通过使用反页请求,我们可以知道这个时光机的本质上是通过ajax请求进行的数据传输,所以这里我们可以减少查询的范围,可以直接调试查找XHR类型的数据传输内容,这里我推荐大家使用翻页后的数据查询,主要是为了鉴定一下该参数的携带加密位置(timeid)

直接使用浏览器抓包,我们会发现这里出现了一个无限debugger,直接找的这行使用右键直接一律不在此执行,跳过这个debugger,或者使用js代码在控制台中直接修改这个函数的内容,这里我感觉使用右键比较方便。

我们可以发现这个网页返回的数据是经过加密的数据,但是这个加密的数据想要呈现出这种效果肯定的使用解密函数,那么又因为没有返回的改数据的名称,所以我们可以直接使用搜索来确定,大家可以使用搜索来解决这个问题,常见的解密函数是decrypt,直接搜索。开始找这个解密函数的位置。

在此调试,我们来验证一下这个参数的传递是什么。

你可以查看到没有一个参数是加密的数据,所以并不是这个

这里当你一致尝试这个不同的decrypt后,到最后一个你会发现这就是你需要的数据位置了。

打上断点进行调试,没意外就是这个。

直接将代码扣下来,发现n是一个加密对象,直接使用js中的进行验证。这个结构一眼加密。所以直接用js中的crypto-js将n替换。

直接扣下来补一个环境

javascript 复制代码
var CryptoJS = require('crypto-js');

let s = CryptoJS.SHA1(CryptoJS.enc.Utf8.parse("tSdGtmwh49BcR1irt18mxG41dGsBuGKS"))
    , a = CryptoJS.enc.Hex.parse(s.toString(CryptoJS.enc.Hex).substr(0, 32));

function h(t) {
    let e = (i = t = String(t),
        o = CryptoJS.enc.Base64.parse(i),
        r = a,
        CryptoJS.AES.decrypt({
            ciphertext: o
        }, r, {
            mode: CryptoJS.mode.ECB,
            padding: CryptoJS.pad.Pkcs7
        }).toString(CryptoJS.enc.Utf8));
    var i, o, r;
    return JSON.parse(e)
}

function main(data){
    return h(data)
}

将python代码联立,获取加密数据,然后传递进行解密。

python 复制代码
import requests
import execjs

headers = {
    "authority": "api.weibotop.cn",
    "accept": "*/*",
    "accept-language": "zh-CN,zh;q=0.9",
    "origin": "https://www.weibotop.cn",
    "referer": "https://www.weibotop.cn/",
    "sec-ch-ua": "\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"",
    "sec-ch-ua-mobile": "?0",
    "sec-ch-ua-platform": "\"Windows\"",
    "sec-fetch-dest": "empty",
    "sec-fetch-mode": "cors",
    "sec-fetch-site": "same-site",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36"
}
url = "https://api.weibotop.cn/currentitems"
response = requests.get(url, headers=headers)

data = response.text

result_data = execjs.compile(open('D:\桌面\pythoncode\微博时光机.js', 'r', encoding='utf-8').read()).call(('main'),data)
print(result_data)

效果如下

相关推荐
ccchen88810 小时前
Discuz X5.0 免登录采集发布插件 - 免费使用指南
经验分享·爬虫·火车头·disucz论坛采集发布·自动采集发布
小白学大数据12 小时前
Python 爬虫爬取应用商店数据:请求构造与数据解析
前端·爬虫·python·数据分析
深蓝电商API14 小时前
电商网站滑块验证码破解:OpenCV图像识别+轨迹模拟方案
爬虫·滑块验证码
Land032916 小时前
指纹浏览器自动化集成方案|多浏览器RPA适配实战记录
运维·人工智能·爬虫·python·selenium·自动化·rpa
深蓝电商API18 小时前
淘宝反爬升级应对:从Selenium到Playwright的迁移实践
爬虫·淘宝
WL_Aurora19 小时前
Python爬虫实战(二):百度热搜榜单爬取
爬虫·python
Marvel__Dead20 小时前
微调 Gemma 4 识别腾讯天御全系列验证码【解决方案-一个模型识别 滑块|文字点选|图标点选|空间点选】
人工智能·爬虫·python·验证码识别·ai 大模型
跨境数据猎手21 小时前
反向海淘代购集运系统三种搭建路径对比:自研、开源二开、SaaS
爬虫·系统架构·开源
川冰ICE1 天前
Python爬虫实战⑲|Pandas数据合并与重塑,多数据源整合
爬虫·python·pandas
feasibility.1 天前
反爬十层妖塔:现代爬虫攻防的立体战争
爬虫·python·科技·scrapy·rust·go·硬件