从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取

本文主要提供中间模拟生成Cookie中wzwschallenge字段来破解wzws_cid的反爬虫机制

前后通过postman模拟代替代码实现

一 需求

http://nanjing.pbc.gov.cn/nanjing/117606/3834479/index.html

需要爬取其内容裁判文书网同原理(侵权删除)

二 分析请求

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第1张图片

发现3个请求构造一个完整页面,

第一个请求返回了 一个通用交互cookie,同时返回加密js

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第2张图片

第二个请求302 一般就是返回正确cookie(与一开始cookie有区别),url后面get参数显然是前面请求加密的

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第3张图片

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第4张图片

第三个请求刚好带上正确cookie能够访问到想要的页面。

三 实操

第二步细节请求头 构造就跳过了,分析关键字段 自行用postman模拟。

1 模拟cookie

首先我先把响应拿到










2 代码实现js 第一次解密(第一个eval函数我们自带js引擎是不能直接执行的)

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第5张图片

参考前面几篇经验先解密 解密结果(裁判文书网需要这些参数继续做函数带入)

var dynamicurl="/WZWSREL25hbmppbmcvMTE3NjA2LzM4MzQ0NzkvaW5kZXguaHRtbA==";
var wzwsquestion=")^UjMZ*3";
var wzwsfactor="5469";
var wzwsmethod="WZWS_METHOD";
var wzwsparams="WZWS_PARAMS";

3 js初步调试发现可以看到地址栏可以跳转到url 后面内容正是我们想要的

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第6张图片

4 参数定位 我们先要找wzwschallenge这个关键字

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第7张图片

可以发现_0x358b35和_0xcd071f很有可能是真正的值(这步很繁琐),最后发现是_0xcd071f

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第8张图片

我们打印一下这个值看看结果

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第9张图片

从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取_第10张图片

正是这个

5 js改造

首先我们拿到_0xcd071f就可以直接返回所以后面js 能不走就不走,

但是改完之后我发现会报错atob这个函数找不到,然而网站给的js也没有,所以这个肯定是window自带的原生函数

查完资料发现是一个特殊base64解密函数,一开始直接改成base64自带发现与atob解密函数不同,所以果断手写

一个原生atob函数更为简单

atob函数

var base64hash = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  function _atob (s) {
            s = s.replace(/\s|=/g, '');
            var cur,
                prev,
                mod,
                i = 0,
                result = [];


            while (i < s.length) {
                cur = base64hash.indexOf(s.charAt(i));
                mod = i % 4;


                switch (mod) {
                    case 0:
                        //TODO
                        break;
                    case 1:
                        result.push(String.fromCharCode(prev << 2 | cur >> 4));
                        break;
                    case 2:
                        result.push(String.fromCharCode((prev & 0x0f) << 4 | cur >> 2));
                        break;
                    case 3:
                        result.push(String.fromCharCode((prev & 3) << 6 | cur));
                        break;
                        
                }


                prev = cur;
                i ++;
            }


            return result.join('');
        }

所以下面atob函数也替换成_atob函数

6 改造js结果 (中间含有比较代码)

 

四 代码回溯

完整测试代码(中间省略http请求)

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class CookieTest {
	public static void main(String[] args) throws Exception {
		//原请求响应
		String html = "\r\n" + "  \r\n" + "  \r\n" + "  \r\n" + "  \r\n" + "    \r\n"
				+ "    \r\n" + "  \r\n" + "\r\n" + "";
		html = html.split("")[0];
		String resHtml = "function getClearance(){" + html.trim() + "};";
		resHtml = resHtml.replace("", "");
		resHtml = resHtml.replace("eval", "return");
		resHtml = resHtml.replace("
                    
                    

你可能感兴趣的:(从头学习爬虫(四十四)高阶篇----wzwschallenge破解及其wzws_cid的获取)