Python 爬虫进阶必备 | 某代理站免费代理加密逻辑分析

今日网站

aHR0cHM6Ly93d3cuemRheWUuY29tL0ZyZWVJUExpc3QuaHRtbA==

这个网站来自咸鱼的技术交流群

抓包分析与加密定位

这个网站是某代理商的免费代理页面,我们想要实现的就是这个页面上免费代理的提取。

所以先看看反爬的措施是什么?

可以看到 ip 在 response 中的展示的不全,ip 最后一位显示的是wait,通过排查 css 以及字体文件可以先得出一个结果,这个反爬不是字体反爬或 css 反爬

为了确定这个反爬是不是js反爬,我们可以禁用当前网站的 js文件,查看页面的展示是否有变化。

当禁用了页面的js后,可以看到页面上展示的结果已经无法展示完整的 ip 地址了,所以可以判断页面上的ip展示是由 js 控制的

现在需要定位这个 js 逻辑的位置,先看看检索wait能不能找到有关的内容

这里直接说结果,检索的工作量太大了,90 个匹配项相关性都不大,所以先看看别的方法,如果都没有收获的话再回来继续分析。

通过上面这张图,看到替换的位置有v的值是很特殊的,不过经过上面的检索,想通过这个方法去找到加密的直接可以放弃了。

所以继续回到抓包界面试试看。

在抓包的界面里,认真分析还是可以看到一个相关项,这个请求链接长得很奇特。

这么一长串的链接就很可疑,不过这个请求返回的是一个数值没有太多有价值的信息,所以直接看看这个数值是具体用在哪里

因为是一个 xhr 请求,所以直接用 xhr 断点找就很方便

断点打上之后,就出现一些有意思的地方了

往上两个堆栈可以看到,返回值是需要经过一通操作才可以的

再网上看,可以看到这里的逻辑就比较显眼了,直接对 document 进行操作了

代码拿到 console 中测试可以获取到带wait的值

整个函数运行下来就可以直接获取到完整的ip

现在就只要找到这一套字符串替换的逻辑就可以获取完整的 ip 了

加密分析

先看请求的是怎么发出的,上面的图中前一段的domain是固定的

后一段的链接由两个参数拼接

这里未知的是mkshowmak这三个参数

这里的mk是固定值 = xxxmxxxxxxxxxm398mxxx1m402

后面发现这个值是经过加密的请求 ip

这里的ak是动态的,所以还需要构建一个请求动态获取

再来看看showm这个加密,选中即可跳转

这个比较简单直接扣取到 node 环境下运行即可

本地运算的结果如下

这样就可以得请求的链接获取这个请求返回的值代入运算

拿到这个值之后就可以看看接下来进行的操作了

接下来可以看到out()这个方法获取的是当前这个 ip 列表的长度

function out({
    var myTb = document.getElementById("ipc");
    if (myTb) {
        return myTb.getElementsByTagName("tr").length - 1
    } else
        return 0
}

经过out1()取出每一行 ip 中v的值,这个和我们抓包部分想要从v入手找加密逻辑相印证。

将这个值和上面构建请求获取的值,一起代入dsfgsd运算,就可以得出还原好的 ip 了

所以正确的请求顺序如下

1、请求 base.js 获取mkak这两个值,构造下面的请求,获取返回的值

2、请求免费代理的页面,获取带wait字符的ip还有对应的v

3、将每一个v和 1 中的返回的值,传入dsfgsd中计算,并将结果替换得出正确的 ip

虽然是免费的 ip 代理,不过站方这个思路可以说非常用心了

好了,今天的文章就到这里了,我们下次再会~


(完)