Python反反爬之JS混淆---动态Cookie(持续更新详细教程)

写在前面

第一题JS混淆—源码乱码

经过上一题的练习JS混淆—源码乱码,我们已经对JS混淆有了大致的了解,这次我们再来练习一道同类型的题目,只不过这次是动态Cookie

首先,让我们了解一下什么是Cookie
Cookie 并不是它的原意“甜饼”的意思, 而是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能, 而这一切都不必使用复杂的CGI等程序

举例来说, 一个 Web 站点可能会为每一个访问者产生一个唯一的ID, 然后以 Cookie 文件的形式保存在每个用户的机器上。如果使用浏览器访问 Web, 会看到所有保存在硬盘上的 Cookie。在这个文件夹里每一个文件都是一个由“名/值”对组成的文本文件,另外还有一个文件保存有所有对应的 Web 站点的信息。在这里的每个 Cookie 文件都是一个简单而又普通的文本文件。透过文件名, 就可以看到是哪个 Web 站点在机器上放置了Cookie(当然站点信息在文件里也有保存)

简单理解就是,Cookie相当于你浏览Web站点时,相对于这个站点的身份证号,如果说身份证号错误,肯定是不能正常访问这个站点的;这也是这次题目的考察内容

文章原链接https://syjun.vip/archives/279.html

题目

题目部分截图
题目网址点我去刷题
提取全部5页发布日热度的值,计算所有值的加和,并提交答案

分析网页

由于是动态Cookie,为了避免其他Cookie的影响,所以使用浏览器的无痕模式进行调试,按f12并选中【Preserve log】

【Preserve log】:保留请求日志,跳转页面的时候勾选上,可以看到跳转前的请求(可以让我看到更详细的请求)

我们还是首先查看一下【XHR】里面的内容


可以很清楚的看到,页面当中的发布日热度值,就来源于这条链接 【http://match.yuanrenxue.com/api/match/2】

我们尝试着在浏览器中打开这条链接,会得到这么一条信息

通过Unicode编码转换工具,翻译过来是:{“error”: “出错啦~嘤嘤嘤”}
可以看得出,开发者还是挺会玩的,嘿嘿

出现这样的错误,也在意料之中,因为这道题目考的是动态Cookie,你去请求包含信息的链接时,Cookie不对,肯定是会报错的

我们继续查看XHR里面的内容,可以发现确实存在Cookie这么一个值的,而且这个加密的值跟上次的题目很像

那么这个Cookie是怎么生成的呢?

Cookie从何而来

我们回到调试工具,这次我们查看所有的请求信息,看看有没有其他的花样

可以发现,有两个名为【2】的请求
我们分别查看这两个请求,可以发现,第一个请求是不带Cookie的,第二个请求是带Cookie
不带Cookie
带Cookie

那么,我们就可以大胆的猜测,是不是第一个名为2的请求,执行了什么操作,让第二个名为2的请求带了Cookie

使用Fiddler.exe抓包

要想知道,第一个名为2的请求,到底发生了什么,我们可以使用Fiddler抓包软件,进行抓包查看
首先,我们打开这个软件(网上搜索就可以直接下载使用)
接着,打开无痕浏览器,进入到刷题网站,也就是这个链接【http://match.yuanrenxue.com/match/2】
最后,我们回到Fiddler软件,会得到如下的信息

可以看到,熟悉的名为【2】的请求,也在当中

经过上面的猜测,我们知道,很有可能是第一个请求在暗地里做了些不为人知的操作
我们点击第一个【2】请求,点击response里面的Textview按钮,可以看到一段被混淆过的JS代码

看到这里的小伙伴可能就大概明白了,当发起第一个名为2的请求时,服务器端返回了一段JS代码,然后在浏览器里面执行了
现在我们只需要将这段混淆过的JS代码翻译一下,就能知道第一个请求到底做了些什么了

翻译混淆代码

我们将返回的JS代码复制下来,记得不要复制开头的script和结尾的/script
然后,我们来到猿人学提供的翻译混淆代码的工具点我进入工具
我们将复制下来的代码,粘贴到第一个文本框,点击【一键解混淆】就行啦

接着,我们将翻译好的代码,复制到Notepad++里面,使用JS插件格式化一下

整段代码差不多200多行代码,而且这些函数名和变量名都非常奇怪,不过这些都不影响我们静下心来分析整段代码

分析JS代码

我们大致的浏览一下,全部代码,可以发现,大多数都是定义的函数,但是真正执行的只有最后的【 W(X());】

我们分析W()函数可以发现

function W(Y, Z) {
   
        document["cookie"] = "m" + M() + "=" + V(Y) + "|" + Y + "; path=/";
        location["reload"]();
    }

w()函数定义了两个形参,而执行的函数【 W(X());】,是传入一个参数的,而这个参数就是上面的X()函数

function X(Y, Z) {
   
        return Date["parse"](new Date());
    }

我们在谷歌调试工具里面执行X()函数就可以看到,返回的是一个时间戳,那么这个函数也会返回一个时间戳


X()函数我们弄清楚后,我们再来研究一下W()函数

分析W()函数

function W(Y, Z) {
   
        document["cookie"] = "m" + M() + "=" + V(Y) + "|" + Y + "; path=/";
        location["reload"]();
    }

看到【 document[“cookie”] 】,我想大家已经明白了,Cookie是如何被设置的了
而后面的【 location"reload"; 】,非常关键
这行代码的意思就是:刷新当前文档,也就是按了一下浏览器上的刷新页面按钮

现在我们重新理一下思路

  1. 网页向服务器发送请求,返回了两个名为【2】的结果
  2. 第一个没有Cookie,而第二个有Cookie
  3. 第一个虽然没有Cookie,但是却执行了一段JS代码
  4. 而这段JS代码给网页中的Cookie赋了值,接着刷新了整个页面
  5. 最后,呈现在我们眼前的网页,也就是第二个名为【2】的结果,有了Cookie

所以说,Cookie是怎么来的,我就不再赘述了,我们接着分析W()函数里面的代码
在分析代码之前,我们先对比一下,Cookie和这段代码

m=36674c3718305e203ee914bf011045c5|1609132022000
document["cookie"] = "m" + M() + "=" + V(Y) + "|" + Y + "; path=/";

最后面的【"; path=/"】字符串,是页面信息(第几页),在其他地方肯定是会处理的,这里我们可以省略
通过对比,赋值过程和赋值结果,我们可以发现赋值过程中的【 M() 】函数返回的一个应该是个空值
我们可以去分析一下M()函数

分析M()函数

话不多说,直接上代码

function M(Y, Z) {
   
        var a4 = B(this, function () {
   
            var a5 = function () {
   
                var a6 = a5["constructor"]("return /\" + this + \"/")()["compile"]("^([^ ]+( +[^ ]+)+)+[^ ]}");
                return !a6["test"](a4);
            };

            return a5();
        });
        a4();
        K();
        qz = [10, 99, 111, 110, 115, 111, 108, 101, 32, 61, 32, 110,</
03-11
<think>嗯,用户想了解如何配置和使用yum源。首先,我需要回忆一下关于yum源的基本知识。记得yum源是软件仓库,用来管理RPM包的安装和依赖关系。配置yum源通常涉及编辑.repo文件,这些文件位于/etc/yum.repos.d/目录下。还有可能涉及到本地源和网络源的配置。 根据用户提供的引用内容,引用[2]提到yum的配置文件分为main和repository部分,main在/etc/yum.conf,而repository在/etc/yum.repos.d/里的各个文件。所以配置的时候需要关注这两个部分。用户可能遇到的问题包括如何创建新的源文件,如何指向本地或网络路径,以及如何处理GPG检查。 用户的问题可能包括步骤不清晰,比如如何挂载ISO镜像来配置本地源。引用[3]中提到了创建local.repo文件,并指定baseurl为file:///路径。这时候需要确保挂载点正确,并且权限设置没问题。另外,可能需要禁用默认的网络源,避免冲突。 用户还可能关心如何测试配置后的yum源是否生效,比如运行yum clean all和yum makecache。此外,常见问题如无法找到包,可能和baseurl的配置错误有关,或者网络源不可达。需要检查URL是否正确,网络连接是否正常。 可能还需要解释不同的源类型,比如本地、网络(如阿里云、清华源),以及如何备份原有的配置文件,避免出错后恢复。引用[1]提到可以将默认文件移到/opt下或重命名,这样可以禁用默认源,避免干扰。 总结下来,回答的结构应该分步骤,包括备份、创建repo文件、配置内容、清理缓存,然后验证。同时,常见问题部分需要列出可能的问题和解决方法,如GPG检查、路径错误等。还要注意使用正确的格式,行内变量用$符号,独立公式用$$,不过这里可能数学公式不多,但需要确保LaTeX正确。</think>### 如何配置和使用yum源? #### 一、yum源的核心配置方法 1. **备份默认源** 操作前建议备份系统原有源配置: ```bash mv /etc/yum.repos.d/*.repo /opt/backup/ # 将默认源文件移动到备份目录 ``` 这是为了防止原有配置与新配置产生冲突[^1]。 2. **本地yum源配置** - **挂载镜像文件** 将CentOS镜像文件挂载到指定目录: ```bash mount -o loop /path/to/CentOS-ISO /mnt/cdrom ``` - **创建配置文件** 新建`/etc/yum.repos.d/local.repo`并写入: ```ini [local-base] name=Local-CentOS-Base baseurl=file:///mnt/cdrom gpgcheck=0 enabled=1 ``` 关键参数说明: - `baseurl`:本地路径使用`file://`协议头[^3] - `gpgcheck=0`表示跳过数字签名验证 3. **网络yum源配置** 以阿里云源为例,创建`/etc/yum.repos.d/aliyun.repo`: ```ini [aliyun-base] name=Aliyun-CentOS-Base baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=https://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 enabled=1 ``` 注意:`$releasever`和`$basearch`会自动解析为系统版本和架构[^2] #### 二、关键操作命令 1. **清理缓存并更新** ```bash yum clean all # 清除旧缓存 yum makecache # 生成新缓存 yum repolist all # 验证源状态 ``` 2. **典型使用场景** ```bash yum install httpd -y # 安装软件包 yum update # 更新所有软件 yum search python3 # 搜索软件包 ``` #### 三、常见问题排查 | 问题现象 | 解决方案 | |---------|----------| | `Could not resolve host` | 检查网络连接和`baseurl`地址 | | `Package not found` | 确认仓库是否包含该软件包版本 | | GPG签名校验失败 | 设置`gpgcheck=0`或导入正确密钥 | #### 四、进阶配置技巧 1. **多源优先级控制** 安装`yum-plugin-priorities`插件,在`.repo`文件中添加: ```ini priority=1 # 数字越小优先级越高 ``` 2. **仓库分组管理** 通过`[epel]`、`[docker]`等独立仓库配置实现分类管理
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值