Bootstrap

【逆向爬虫实战】--某视综数据(MD5、AES加密)

🤵‍♂️ 个人主页:@rain雨雨编程

😄微信公众号:rain雨雨编程

✍🏻作者简介:持续分享机器学习,爬虫,数据分析
🐋 希望大家多多支持,我们一起进步!
如果文章对你有帮助的话,
欢迎评论 💬点赞👍🏻 收藏 📂加关注+

目录

一、数据接口分析

1. 抓包分析

2. 加密参数检查

二、加密位置定位

1. sign参数

2. 响应数据

三、JavaScript代码提取与分析

JavaScript源码分析


本详细介绍了对“某视综”网站进行爬虫逆向分析的过程,重点关注了MD5和AES加密算法的应用。

一、数据接口分析

1. 抓包分析

某视综主页

  • 目的:通过网络抓包工具捕获网站的数据传输过程。

  • 发现:确定了网站的关键数据接口为/rank/waiting/fans

2. 加密参数检查
  • 请求参数加密:在请求的“载荷”部分发现了一个sign参数,表明存在加密。

  • 请求头加密:没有发现请求头被加密。

  • 响应数据加密:在“响应”部分发现数据被加密。

  • Cookie加密:没有发现Cookie被加密。

二、加密位置定位

1. sign参数
  • 启动器分析:检查启动器中的异步调用,发现无法直接定位加密位置。

  • 关键字搜索:通过搜索关键字sign=,找到了sign参数的生成位置,并在此打下断点。

  • 断点调试:再次获取数据时,成功在断点处捕获到sign参数的加密过程。

    控制台查看加密后sign,同network(网络)处的sign对比

2. 响应数据
  • HookJSON.parse:考虑到响应数据通常是JSON格式,解密后会使用JSON.parse,因此对JSON.parse进行Hook。

var my_parse = JSON.parse;
JSON.parse = function (params) {
    debugger
    console.log("json_parse params:",params);
    return my_parse(params);
};

  • 明文处断住 运行hook代码,再次获取数据,成功捕获到明文数据,并追踪到解密位置。

  • 跟栈 通过跟栈就可以找到解密位置

  • 控制台查看 通过控制台查看解密后数据data

三、JavaScript代码提取与分析

  • sign参数加密:分析发现sign参数使用标准的MD5加密方法,因此可以直接使用标准模块进行加密,无需提取JS代码。

进入疑似加密函数,并重新打上断点

  • 响应数据解密:网站使用的是标准的AES算法进行解密,同样可以- 接使用标准模块,无需提取JS代码。

JavaScript源码分析
  • getSign函数:用于生成sign参数,通过将对象键排序并拼接,然后使用MD5算法生成签名。

  • get_data函数:用于解密响应数据,使用AES算法和固定的密钥及IV进行解密。

const CryptoJS = require('crypto-js')

function getSign(e) {
    delete e.sign;
    for (var t = [], n = Object.keys(e).sort(), r = 0; r < n.length; r++) {
        var i = n[r]
            , a = e[i];
        t.push(i),
            t.push(a)
    }
    t.push("iIndex");
    var s = t.join("_")
        , c = CryptoJS.MD5(s).toString();
    return c
}

function get_data(lastFetchTime, r) {
    var i = CryptoJS.enc.Utf8.parse(lastFetchTime + "000")
        , a = CryptoJS.enc.Utf8.parse(lastFetchTime + "000")
        , s = CryptoJS.AES.decrypt(r.toString(), i, {
        iv: a
    })
    return s.toString(CryptoJS.enc.Utf8);
}

文章持续跟新,可以微信搜一搜公众号  rain雨雨编程 ],第一时间阅读,涉及数据分析,机器学习,Java编程,爬虫,实战项目等。

;