今日网站
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
是固定的
后一段的链接由两个参数拼接
这里未知的是mk
、showm
、ak
这三个参数
这里的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 获取mk
和ak
这两个值,构造下面的请求,获取返回的值
2、请求免费代理的页面,获取带wait
字符的ip
还有对应的v
3、将每一个v
和 1 中的返回的值,传入dsfgsd
中计算,并将结果替换得出正确的 ip
虽然是免费的 ip 代理,不过站方这个思路可以说非常用心了
好了,今天的文章就到这里了,我们下次再会~