爬虫逆向实战(二十一)-- 某某点集登录与获取数据

登录

一、数据接口分析

主页地址:某某点集

1、抓包

通过抓包可以发现登录接口是phonePwdLogin

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看"载荷"模块可以发现有pwd和sig两个加密参数
  2. 请求头是否加密?
    无
  3. 响应是否加密?
    无
  4. cookie是否加密?
    无

二、加密位置定位

1、pwd

(1)看启动器

查看启动器发现里面包含异步,所以无法正确找到加密位置

(2)搜索关键字

通过搜索关键字pwd:可以找到一个pwd的加密位置

在此处打上断点,再次登录,发现可以断住,并且此处是将明文转换为了密文,所以可以确定此处是加密位置

2、sig

(1)搜索关键字

通过搜索关键字sig:可以找到一个sig的赋值位置

在此处打上断点,再次登录,发现可以断住,并且sig的生成就在上方,所以可以确定此处是加密位置

三、扣js代码

1、pwd

通过控制台测试可以发现,pwd参数加密是使用的标准MD5加密,所以可以不扣js,使用标准MD5模块进行加密

2、sig

通过控制台测试可以发现,sig参数同样是使用的MD5加密,只不过,在加密前对参数进行了处理,所以我们可以将处理方法H和S扣出,然后再使用标准MD5加密即可。

数据

一、数据接口分析

1、抓包

通过抓包可以发现数据接口是api/dy

2、判断是否有加密参数

  1. 请求参数是否加密?
    通过查看"载荷"模块可以发现有一个sign加密参数,还有一个token是登录成功后服务器返回的,不需要关心
  2. 请求头是否加密?
    无
  3. 响应是否加密?
    无
  4. cookie是否加密?
    无

二、加密位置定位

1、看启动器

查看启动器发现里面包含异步,所以无法正确找到加密位置

2、搜索关键字

通过搜索关键字sign:可以发现sign的生成位置

在此处打上断点,再次获取数据,发现可以断住,所以确定此处就是加密位置

三、扣js代码

通过加密位置可以看出,sign是由E方法生成的,调试执行进入E方法可以发现,是对数据进行加盐,然后使用sha256进行加密。其中加盐参数C经过多次生成,发现都是一样的,所以可以写死。

javascrapt源码

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

function H(n) {
    var e = []
        , t = "";
    for (var a in n)
        e.push(n[a]);
    for (var i = 0; i < e.length; i++)
        t += e[i] + "";
    return t += "JzyqgcoojMiQNuQoTlbR5EBT8TsqzJ",
        t
}

function S(n) {
    for (var e = Object.keys(n).sort(), t = {}, a = 0; a < e.length; a++)
        t[e[a]] = n[e[a]];
    return t
}

function E(n, e) {
    return CryptoJS.SHA256("param=" + JSON.stringify(n) + "&timestamp=" + e + "&tenant=1&salt=" + 'kbn%&)@<?FGkfs8sdf4Vg1*+;`kf5ndl$').toString()
}


function get_login_params(phone, password) {
    var s = {
        "phoneNum": phone,
        pwd: CryptoJS.MD5(password).toString(),
        "t": (new Date).getTime(),
        "tenant": 1
    };
    var sig = CryptoJS.MD5(H(S(s))).toString()
    s['sig'] = sig
    return s
}


function get_data_params(token) {
    var e = (new Date).getTime()
    var n = {
    "no": "dy0002",
    "data": {
        "days": 1,
        "rankType": 5,
        "liveDay": "2023-08-24"
    }
}
    return  {
        param: JSON.stringify(n),
        sign: E(n, e),
        tenant: "1",
        timestamp: e,
        token: token
    }
}

Python源码

python 复制代码
"""
Email:912917367@qq.com
Date: 2023/8/25 14:25
"""
import execjs
import requests


class Spider:
    def __init__(self):
        self.session = requests.session()
        self.session.headers = {
            "Accept": "application/json, text/plain, */*",
            "Accept-Language": "zh-CN,zh;q=0.9",
            "Cache-Control": "no-cache",
            "Connection": "keep-alive",
            "Content-Type": "application/json",
            "Origin": "http://www.hh1024.com",
            "Pragma": "no-cache",
            "Sec-Fetch-Dest": "empty",
            "Sec-Fetch-Mode": "cors",
            "Sec-Fetch-Site": "cross-site",
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36",
            "sec-ch-ua": "^\\^Chromium^^;v=^\\^116^^, ^\\^Not)A;Brand^^;v=^\\^24^^, ^\\^Google",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "^\\^Windows^^"
        }
        with open('get_params.js', 'r', encoding='utf-8') as f:
            self.js_obj = execjs.compile(f.read())
        self.token = ''

    def login(self):
        url = "https://user.hrdjyun.com/wechat/phonePwdLogin"

        data = self.js_obj.call('get_login_params', '账号', '密码')
        response = self.session.post(url, json=data)
        self.token = response.json()['data']['token']
        print('token:', self.token)
        print(response.text)

    def get_data(self):
        url = "https://ucp.hrdjyun.com:60359/api/dy"
        data = self.js_obj.call('get_data_params', self.token)
        print(data)
        response = self.session.post(url, json=data)

        print(response.text)
        print(response)


if __name__ == '__main__':
    s = Spider()
    s.login()
    s.get_data()
相关推荐
深蓝电商API19 小时前
从爬虫到Agent:数据采集的下一个形态是什么
爬虫
xiangjiaodalishi19 小时前
主流 AI 爬虫 User-Agent 清单大全:分组、配置与持续维护(2026 版)
人工智能·爬虫·python
深蓝电商API2 天前
用向量数据库存储爬取内容:语义检索的高级玩法
爬虫·向量数据库
深蓝电商API2 天前
Playwright+多模态大模型:让AI自己“看”页面并决策
人工智能·爬虫·playwright
远航计算机2 天前
收录从分钟级变 3 到 7 天,抢首发为什么失效了
大数据·人工智能·爬虫·chatgpt·aigc·1024程序员节
嫂子的姐夫3 天前
052-滑块验证码:丰巢登录
爬虫·js逆向·滑块验证码·aes加密
东鹏特饮3 天前
A 股创历史新低筛选器phthon爬虫脚本
爬虫·股票·phthon
深蓝电商API5 天前
用GPT-4o解析无结构网页:提示词工程实战
爬虫·gpt-4o
数据狐(Datafox)6 天前
一文读懂京东商品详情 API:返回字段解读与 JSON 样例
开发语言·数据库·爬虫·json
傻啦嘿哟6 天前
百度图片爬虫:爬取海量图片数据,搭建图像识别训练集
爬虫·百度