爬虫逆向实战(四)--猿人学第一题

news2024/11/22 6:38:34

一、数据接口分析

主页地址:猿人学第一题

1、抓包

当我们打开F12时会发现直接debugger了,是一个无限debugger,我们直接右键debugger那一行,然后选择“一律不再此处暂停”就可以了
在这里插入图片描述
通过抓包可以发现登录接口是api/match/1
在这里插入图片描述

2、判断是否有加密参数

  1. 请求参数是否加密?
    查看“载荷”模块可以发现有一个m加密参数
    在这里插入图片描述
  2. 请求头是否加密?
  3. 响应是否加密?
  4. cookie是否加密?

二、加密位置定位

1、看启动器

查看启动器发现有一个调用堆栈中request,点进去查看
在这里插入图片描述
点进去之后,发现代码是混淆的,虽然是混淆的,但是格式有点类似jQuery发ajax请求,所以打断点尝试一下
在这里插入图片描述
点击翻页,发现可以断住,此处就是ajax请求,并且m参数的生成就在此行上方
在这里插入图片描述
查看m的加密时,发现m的生成是将window中的f与时间戳进行拼接,所以我们还需要找到f是如何生成的

2、hook

因为代码是混淆的,并且f无法作为关键字进行搜索,所以我们可以对window.f进行hook
hook代码:

(function () {
    var window_f = '';
    Object.defineProperty(window, 'f', {
        set: function (val) {
            debugger;
            window_f = val;
            return val;
        },
        get: function () {
            return window_f;
        },
    });
})();

执行hook代码之后,我们再次点击翻页,此时hook代码断住了,接着往下方跟,可以找到window.f的赋值位置
在这里插入图片描述

三、扣js代码

上方找到的f的加密方法是hex_md5,此时我们可以推测此处可能是标准md5加密,在控制台中使用此方法加密字符串’1’进行尝试,结果发现并不是标准的md5加密 在这里插入图片描述
所以我们只能扣网站的加密方法了,可以看到加密所在的这个js文件中代码并不是很多,所以我们可以直接全扣。
源代码:

var hexcase = 0;
var b64pad = "";
var chrsz = 16;
function hex_md5(a) {
    return binl2hex(core_md5(str2binl(a), a.length * chrsz))
}
function b64_md5(a) {
    return binl2b64(core_md5(str2binl(a), a.length * chrsz))
}
function str_md5(a) {
    return binl2str(core_md5(str2binl(a), a.length * chrsz))
}
function hex_hmac_md5(a, b) {
    return binl2hex(core_hmac_md5(a, b))
}
function b64_hmac_md5(a, b) {
    return binl2b64(core_hmac_md5(a, b))
}
function str_hmac_md5(a, b) {
    return binl2str(core_hmac_md5(a, b))
}
function md5_vm_test() {
    return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72"
}
function core_md5(p, k) {
    p[k >> 5] |= 128 << ((k) % 32);
    p[(((k + 64) >>> 9) << 4) + 14] = k;
    var o = 1732584193;
    var n = -271733879;
    var m = -1732584194;
    var l = 271733878;
    for (var g = 0; g < p.length; g += 16) {
        var j = o;
        var h = n;
        var f = m;
        var e = l;
        o = md5_ff(o, n, m, l, p[g + 0], 7, -680976936);
        l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586);
        m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819);
        n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330);
        o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897);
        l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426);
        m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341);
        n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983);
        o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416);
        l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417);
        m = md5_ff(m, l, o, n, p[g + 10], 17, -42063);
        n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162);
        o = md5_ff(o, n, m, l, p[g + 12], 7, 1804660682);
        l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101);
        m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290);
        n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329);
        o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510);
        l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632);
        m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713);
        n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302);
        o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691);
        l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083);
        m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335);
        n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848);
        o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438);
        l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690);
        m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961);
        n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501);
        o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467);
        l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784);
        m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473);
        n = md5_gg(n, m, l, o, p[g + 12], 20, -1921207734);
        o = md5_hh(o, n, m, l, p[g + 5], 4, -378558);
        l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463);
        m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562);
        n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556);
        o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060);
        l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353);
        m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632);
        n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640);
        o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174);
        l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222);
        m = md5_hh(m, l, o, n, p[g + 3], 16, -722881979);
        n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189);
        o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487);
        l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835);
        m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520);
        n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651);
        o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844);
        l = md5_ii(l, o, n, m, p[g + 7], 10, 11261161415);
        m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905);
        n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055);
        o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571);
        l = md5_ii(l, o, n, m, p[g + 3], 10, -1894446606);
        m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523);
        n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799);
        o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359);
        l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744);
        m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380);
        n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649);
        o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070);
        l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379);
        m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259);
        n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551);
        o = safe_add(o, j);
        n = safe_add(n, h);
        m = safe_add(m, f);
        l = safe_add(l, e)
    }
    return Array(o, n, m, l)
}
function md5_cmn(h, e, d, c, g, f) {
    return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)
}
function md5_ff(g, f, k, j, e, i, h) {
    return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h)
}
function md5_gg(g, f, k, j, e, i, h) {
    return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h)
}
function md5_hh(g, f, k, j, e, i, h) {
    return md5_cmn(f ^ k ^ j, g, f, e, i, h)
}
function md5_ii(g, f, k, j, e, i, h) {
    return md5_cmn(k ^ (f | (~j)), g, f, e, i, h)
}
function core_hmac_md5(c, f) {
    var e = str2binl(c);
    if (e.length > 16) {
        e = core_md5(e, c.length * chrsz)
    }
    var a = Array(16)
      , d = Array(16);
    for (var b = 0; b < 16; b++) {
        a[b] = e[b] ^ 909522486;
        d[b] = e[b] ^ 1549556828
    }
    var g = core_md5(a.concat(str2binl(f)), 512 + f.length * chrsz);
    return core_md5(d.concat(g), 512 + 128)
}
function safe_add(a, d) {
    var c = (a & 65535) + (d & 65535);
    var b = (a >> 16) + (d >> 16) + (c >> 16);
    return (b << 16) | (c & 65535)
}
function bit_rol(a, b) {
    return (a << b) | (a >>> (32 - b))
}
function str2binl(d) {
    var c = Array();
    var a = (1 << chrsz) - 1;
    for (var b = 0; b < d.length * chrsz; b += chrsz) {
        c[b >> 5] |= (d.charCodeAt(b / chrsz) & a) << (b % 32)
    }
    return c
}
function binl2str(c) {
    var d = "";
    var a = (1 << chrsz) - 1;
    for (var b = 0; b < c.length * 32; b += chrsz) {
        d += String.fromCharCode((c[b >> 5] >>> (b % 32)) & a)
    }
    return d
}
function binl2hex(c) {
    var b = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
    var d = "";
    for (var a = 0; a < c.length * 4; a++) {
        d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15)
    }
    return d
}
function binl2b64(d) {
    var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var f = "";
    for (var b = 0; b < d.length * 4; b += 3) {
        var e = (((d[b >> 2] >> 8 * (b % 4)) & 255) << 16) | (((d[b + 1 >> 2] >> 8 * ((b + 1) % 4)) & 255) << 8) | ((d[b + 2 >> 2] >> 8 * ((b + 2) % 4)) & 255);
        for (var a = 0; a < 4; a++) {
            if (b * 8 + a * 6 > d.length * 32) {
                f += b64pad
            } else {
                f += c.charAt((e >> 6 * (3 - a)) & 63)
            }
        }
    }
    return f
}
function hex_md5(a) {
    return binl2hex(core_md5(str2binl(a), a.length * 16))
}


function get_m() {
    var time_str = Date.parse(new Date()) + 100000000

    var str_a = hex_md5(time_str.toString())

    return str_a + '丨' + time_str / 1000
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/888346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一条提示词等同于多少个数据点?

数据点&#xff08;data points&#xff09;通常用于描述单个信息单位或观测值&#xff0c;在本文中&#xff0c;它被用来量化“提示词”方法相对于传统方法的效率和效果。文章比较了两种训练&#xff08;微调&#xff09;机器学习模型的方法&#xff1a;一种是使用提示 (promp…

python——案例23:创建一个按钮

案例23&#xff1a;创建一个按钮from tkinter import * def xinlabel():global xinsLabel(xin,text完成)s.pack() xinTk() blButton(xin,text下一步,commandxinlabel) bl.pack() xin.mainloop()

【golang】函数(func)正确使用姿势

函数不但可以用于封装代码、分割功能、解耦逻辑&#xff0c;还可以化身为普通的值&#xff0c;在其他函数间传递、赋予变量、做类型判断和转换等等&#xff0c;就像切片和字典的值那样。 而更深层次的含义就是&#xff1a;函数值可以由此成为能够被随意传播的独立逻辑组件&…

使用PyMuPDF库的PDF合并和分拆程序

PDF工具应用程序是一个使用wxPython和PyMuPDF库编写的简单工具&#xff0c;用于合并和分拆PDF文件。它提供了一个用户友好的图形界面&#xff0c;允许用户选择源文件夹和目标文件夹&#xff0c;并对PDF文件进行操作。 C:\pythoncode\blog\pdfmergandsplit.py 功能特点 选择文…

高速数据采集卡---AD采集FMC子卡模块产品资料下载

FMC152是一款基于VITA57.1标准的&#xff0c;实现2路14-bit、2GSPS/2.6GSPS/3GSPS AD采集FMC子卡模块。该模块可直接与FPGA载卡配合使用&#xff0c;板卡ADC器件采用ADI公司的AD9208芯片&#xff0c;与ADI公司的AD9689可以实现PIN脚兼容。该模块全功率模拟输入带宽&#xff08;…

【FAQ】安防监控视频云存储平台EasyNVR频繁离线的原因排查与解决

有用户反馈&#xff0c;在使用EasyNVR时会出现通道频繁离线的情况。针对该反馈我们立即进行了排查。 安防视频监控汇聚EasyNVR视频集中存储平台&#xff0c;是基于RTSP/Onvif协议的安防视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端分发&#xff0c;分发的视频流…

(二)结构型模式:6、外观模式(Facade Pattern)(C++实例)

目录 1、外观模式&#xff08;Facade Pattern&#xff09;含义 2、外观模式的UML图学习 3、外观模式的应用场景 4、外观模式的优缺点 5、C实现外观模式的简单实例 1、外观模式&#xff08;Facade Pattern&#xff09;含义 外观模式&#xff08;Facade Pattern&#xff09;…

气象监测设备——分类与应用

气象监测设备多种多样&#xff0c;不同的应用场景选择适合的气象监测设备才能事半功倍。 在植保站中&#xff0c;可以 选择农林植保小气候气象站&#xff0c;它可以帮助植保站的工作人员完成气象监测工作&#xff0c;对天气环境进行预报预测&#xff0c;为植物的健康生长提供保…

Windows系统如何查看端口被占用程序和停止占用端口程序

windows系统如何查看端口被占用程序和停止占用端口程序&#xff0c;以及windows常用的网络命令详解 打开命令窗口 电脑右下方&#xff0c;搜索框&#xff0c;输入“cmd”,回车打开dos命令窗口 查看系统所有被占用的端口命令 netstat -ano 查看指定端口是否被占用命令 netst…

CS144 计算机网络 Lab1:Stream Reassembler

前言 上一篇博客中我们完成了 Lab0&#xff0c;使用双端队列实现了一个字节流类 ByteStream&#xff0c;可以向字节流中写入数据并按写入顺序读出数据。由于网络环境的变化&#xff0c;发送端滑动窗口内的数据包到达接收端时可能失序&#xff0c;所以接收端收到数据之后不能直…

Windows Server --- RDP远程桌面服务器激活和RD授权

RDP远程桌面服务器激活和RD授权 一、激活服务器二、设置RD授权 系统&#xff1a;Window server 2008 R2 服务&#xff1a;远程桌面服务 注&#xff1a;该方法适合该远程桌面服务器没网络状态下&#xff08;离线&#xff09;&#xff0c;激活服务器。 一、激活服务器 1.打开远…

Spring学习笔记之Bean的循环依赖问题

文章目录 什么是Bean的循环依赖singleton下的set注入产生的循环依赖prototype下的set注入产生的循环依赖singleton下的构造注入产生的循环依赖Spring解决循环循环的机理&#xff08;面试题&#xff09; 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。…

leetcode 1614.括号的最大嵌套深度

⭐️ 题目描述 &#x1f31f;leetcode链接&#xff1a;括号的最大嵌套深度 ps&#xff1a; 使用数据结构栈来存储 ( 在使用 maxDepth 变量记录栈顶 top 的最大值&#xff0c;当遇到 ) 时删除栈顶元素。举个例子 (1)((2))(((3)))&#xff0c;当遇到第一个 ( 时 top 1&#xff…

对dubbo的DubboReference.check的参数进行剖析

背景 在使用dubbo的时候&#xff0c;发现当消费者启动的时候&#xff0c;如果提供者没有启动&#xff0c;即使提供者后来启动了&#xff0c;消费者也调不通提供者提供的接口了。 注册中心使用都是nacos dubbo版本是3.0.4 例子 接口 public interface DemoService {String…

中期国际:外汇交易的利器:善用挂单技巧优化交易策略

在外汇交易中&#xff0c;挂单技巧是提高交易效率和灵活性的重要利器之一。善用限价单和止损单可以帮助交易者有效规避风险、控制入场点和出场点&#xff0c;从而提高交易效果。本文将介绍一些MT4挂单技巧&#xff0c;以帮助交易者优化交易策略&#xff0c;提高交易效率。 1. 了…

猿辅导设立“青少年科学探索基金”,鼓励天才少年投入科学研究

“少年智则国智&#xff0c;少年富则国富&#xff0c;少年强则国强。”国家发展离不开人才的培养。伴随我国进入高质量发展轨道&#xff0c;科学、人才、教育三位一体融合发展已经刻不容缓。我国基础学科人才紧缺成了不争的事实。目前&#xff0c;中国的GDP目前已是世界第二位&…

nginx创建和监听套接字分析

https://cloud.tencent.com/developer/article/1859856 简介 nginx作为一个web服务器&#xff0c;肯定是有listen套接字对外提供服务的&#xff0c;listen套接字是用于接收HTTP请求。 nginx监听套接字的创建是根据配置文件的内容来创建的&#xff0c;在nginx.conf文件中有…

视频音乐如何转换成mp3?教你超简单的转换方法

MP3文件通常比视频文件更小。因此&#xff0c;通过将音乐从视频中提取并转换为MP3格式&#xff0c;您可以更轻松地存储和传输它们。如果计划在手机或其他设备上存储音乐&#xff0c;转换为MP3格式可以帮助我们节省存储空间。而且&#xff0c;如果需要将音乐发送给朋友或上传到互…

基于JAVA高校校园点餐系统-lw+ppt

文章目录 前言一、主要技术javaMysql数据库JSP技术 二、系统设计1. 系统结构图 三、功能截图总结 前言 21世纪的今天&#xff0c;随着社会的发展与进步&#xff0c;人们对信息科学的认识已从低层次提升到高层次&#xff0c;从感性认识逐渐转变为理性认识。管理工作的重要性也逐…

新生录取查询系统怎么制作?

在制作新生录取查询系统前&#xff0c;先跟老师们介绍一下招生录取的详细流程&#xff0c;以便老师们更好的完成录取工作的筹备&#xff0c;顺利过渡招生季&#xff01; 1. 招生宣传和报名&#xff1a;学校通过各种途径进行招生宣传&#xff0c;向学生和家长介绍学校的特色、教…