Hook+jsdom 解决cookie逆向

前言

记录下如何破cookie逆向

目标

目标网址:https://q.10jqka.com.cn/
目标接口:http://q.10jqka.com.cn/index/index/board/all/field/zdf/order/desc/page/2/ajax/1/
对抗:cookie反爬虫处理,关键字v,如图
在这里插入图片描述

解决步骤

1、JS中关键字查找

如上,我们找到了关键字 v,那么接下来就用hook搜查
点击F12,打开 开发者工具,选择Console直接输入hook代码

(function () {
   
  Object.defineProperty(document, 'cookie', {
   
    set: function (val) {
   
      if (val.indexOf('v') != -1) {
   
        debugger;
      }
      console.log('Hook捕获到cookie设置->', val);
      return val;
    }
  });
})();

# val.indexOf('v') 中输入你要的关键字,回车
# 注意需要等待一会,因为程序加载需要时间
# 回车后,程序执行到v处自动断点,并打印,可一步步向下看js推理

运行后如图,n产出刚好是v的数值
在这里插入图片描述

接着点击右上角的箭头,会一步步执行接下来的js
连续点一遍下来发现n值最后由 function D() 产出
在这里插入图片描述
全局搜索 function D(),最后输出在这,后面可以创建个空值去接收
在这里插入图片描述

2. JS调试技巧

从这里可以发现就是整个的文件只有千多行代码,可以采用全复制方式处理cookie

2.1、扣出所有代码,放入自建js文件中,我这例如: cookie.js

2.2、利用execjs执行

import execjs

with open('qq.js', encoding='utf-8') as f:
    x = f.read()
    
v = execjs.compile(x).call('get_cookie')
print(v)

这时会报错一堆错,而且还要挨个补环境,例如下:

execjs._exceptions.ProgramError: ReferenceError: document is not defined
execjs._exceptions.ProgramError: ReferenceError: window is not defined
execjs._exceptions.ProgramError: ReferenceError: navigator is not defined

这时可以使用 jsdom 这个技术,在 js 文件最上方加入运行js所缺补的环境,例如下(所有通用)

const jsdom = require("jsdom");
const {
    JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);

window = dom.window
document = window.document
navigator = window.navigator

然后python代码需要调用其中的函数,获取到产出的v值

1、在 js上面创建 ==》 var _v = {};
2、在 function D() 后面加入.xialuo 接收 ==》 _v.xialuo = D, 如图
在这里插入图片描述
3、末尾创建个函数好被python调用

function getCookie() {
   
    return _v.xialuo()
}

最后,cookie.js 代码如下:

const jsdom = require("jsdom");
const {
    JSDOM } = jsdom;
const dom = new JSDOM(`<!DOCTYPE html><p>Hello world</p>`);
window=dom.window;
document=window.document;
navigator=window.navigator;

var _v = {
   }
 
var TOKEN_SERVER_TIME = 1656072000.984;
!function(n, t) {
   
    !function() {
   
        var r, e, a;
        r = e = a = n;
        var u, c, s;
        u = c = s = t;
        function v() {
   
            var n = arguments[s[0]];
            if (!n)
                return r[0];
            for (var t = u[1], o = a[1], i = c[2]; i < n.length; i++) {
   
                var v = n.charCodeAt(i)
                  , f = v ^ o;
                o = v,
                t += e[2].fromCharCode(f)
            }
            return t
        }
        var f = c[3]
          , l = s[4]
          , p = Wn(e[3], r[4], s[5])
          , d = a[5]
          , h = Wn(c[6], s[7])
          , g = c[8]
          , w = c[9]
          , m = r[6]
          , I = u[10]
          , y = a[7]
          , _ = (s[11],
        c[12],
        s[13])
          , C = e[8]
          , E = u[14]
          , A = ot(e[9], e[10])
          , b = a[11]
          , T = u[15]
          , B = c[16]
          , R = r[12]
          , k = r[13]
          , S = s[17]
          , P = u[18]
          , M = Wn(s[19], s[20], u[21])
          , O = v(s[22], e[14])
          , D = s[23]
          , x = s[24]
          , N = u[25]
          , L = u[26]
          , W = Wn(s[27], r[15])
          , F = u[28]
          , Y = r[16]
          , j = a[17]
          , H = e[18]
          , $ = e[19]
          , U = r[20]
          , V = v(c[29], e[21], e[22])
          , X = s[30]
          , G = s[31]
          , K = s[32]
          , Q = s[33]
          , Z = r[23]
          , q = r[24]
          , z = v(u[12], u[34], s[35])
          , J = u[36]
          , nn = a[25]
          , tn = s[37]
          , rn = c[38]
          , en = r[26]
          , an = c[39]
          , on = s[40]
          , un = a[27]
          , cn = u[41]
          , sn = ot(s[42], c[43])
          , vn = r[28]
          , fn = u[8]
          , ln = s[44]
          , pn = a[29]
          , dn = s[45]
          , hn = a[30]
          , gn = c[46]
          , wn = a[31]
          , mn = a[32]
          , In = s[47]
          , yn = r[33]
          , _n = a[34]
          , Cn = c[48]
          , En = a[8]
          , An = v(a[35], s[49])
          , bn = c[50]
          , Tn = c[51]
          , Bn = at(r[36], s[52])
          , Rn = ot(r[37], e[38])
          , kn = e[39]
          , Sn = u[53]
          , Pn = r[40]
          , Mn = s[54]
          , On = s[55]
          , Dn = Wn(u[56], r[41], r[42])
          , xn = r[43]
          , Nn = u[57]
          , Ln = e[44];
        function Wn() {
   
            return arguments[u[0]].split(e[0]).reverse().join(c[1])
        }
        var Fn = r[45], Yn = Wn(c[58], e[46]), jn = v(s[59], u[60]), Hn = Wn(r[47], s[61]), $n = s[62], Un = s[63], Vn = u[2], Xn = [new u[27](r[48]), new u[27](c[64])], Gn = [new e[47](ot(a[49])), new u[27](ot(a[50], u[65]))], Kn = c[66][f + l] || r[51].getElementsByTagName(p + d)[r[52]], Qn;
        !function(n) {
   
            n[e[53]] = s[67];
            function t(n) {
   
                var t = r[51][u[68]]
                  , o = u[69] + n + s[70]
                  , i = t.indexOf(o);
                if (i == -e[54]) {
   
                    if (o = n + c[70],
                    t.substr(r[52], o.length) != o)
                        return;
                    i = a[52]
                }
                var f = i + o[v(u[71], s[72])]
                  , l = t.indexOf(r[55], f);
                return l == -a[54] && (l = t[a[56]]),
                t.substring(f, l)
            }
            n[a[57]] = f;
            function o(n, t, a, o, i) {
   
                var c = n + r[58] + t;
                o && (c += e[59] + o),
                i && (c += v(Jn, u[73], s[74]) + i),
                a && (c += u[75] + a),
                u[66][u[68]] = c
            }
            n[s[76]] = t;
            function i(n, t, r) {
   
                this.setCookie(n, u[1], u[77], t, r)
            }
            n[s[78]] = o;
            function f() {
   
                var t = a[60];
                this.setCookie(t, u[67]),
                this.getCookie(t) || (n[r[53]] = e[61]),
                this.delCookie(t)
            }
            n[Wn(N, r[62], c[79])] = i
        }(Qn || (Qn = {
   }));
        var Zn;
        !function(n) {
   
            var t = u[80], o = v(nn, s[81], u[82]), i = s[67], f, l = u[83][Wn(u[84], e[63])], p, d;
            function g(n) {
   
                var t = j;
                return t = dn,
                i ? y(n) : f ? w(n) : void u[2]
            }
            function w(n) {
   
                E(function() {
   
                    return n = R(n),
                    f.getAttribute(n)
                })()
            }
            function m() {
   
                try {
   
                    return !!(o in s[83] && s[83][o])
                } catch (n) {
   
                    return void u[2]
                }
            }
            function I(n) {
   
                try {
   
                    f.removeItem(n)
                } catch (t) {
   }
            }
            n[c[85]] = C;
            function y(n) {
   
                try {
   
                    return f.getItem(n)
                } catch (t) {
   
                    return u[86]
                }
            }
            n[c[87]] = B;
            function _(n, t) {
   
                try {
   
                    f.setItem(n, t)
                } catch (r) {
   }
            }
            function C() {
   
                var n = e[64]
                  , r = u[88];
                if (i = m(),
                i)
                    f = a[65][o];
                else if (l[at(e[66])][at(e[67], a[68])])
                    try {
   
                        p = new ActiveXObject(Wn(a[69], s[89], l)),
                        p.open(),
                        p.write(s[90]),
                        p.close(),
                        d = p.w[e[70]][s[2]][e[71]],
                        f = d.createElement(n + t + r)
                    } catch (c) {
   
                        f = l.createElement(o),
                        d = l[Wn(u[91], a[72])] || l.getElementsByTagName(s[92])[s[2]] || l[a[73]]
                    }
            }
            function E(n) {
   
                return function() {
   
                    d.appendChild(f),
                    f.addBehavior(s[93]),
                    f.load(o);
                    var t = n();
                    return d.removeChild(f),
                    t
                }
            }
            n[c[94]] = g;
            function A(n) {
   
                var t, r, e;
                if (t = r = e = a,
                i)
                    I(n);
                else {
   
                    if (!f)
                        return void e[52];
                    b(n)
                }
            }
            function b(n) {
   
                E(function() {
   
                    n = R(n),
                    f.removeAttribute(n),
                    f.save(o)
                })()
            }
            function T(n, t) {
   
                E(function() {
   
                    n = R(n),
                    f.setAttribute(n, t),
                    f.save(o)
                })()
            }
            n[a[74]] = A;
            function B(n, t) {
   
                if (void 0 === t)
                    return A(n);
                if (i)
                    _(n, t);
                else {
   
                    if (!f)
                        return void u[2];
                    T(n, t)
                }
            }
            function R(n) {
   
                var t = s[95]
                  , e = r[75]
                  , a = new r[47](t + h + e,c[96]);
                return n.replace(new c[27](u[97]), v(s[98], s[99], s[100])).replace(a, c[101])
            }
        }(Zn || (Zn = {
   }));
        var qn = function() {
   
            var n, t, r;
            n = t = r = a;
            var e, o, i;
            e = o = i = s;
            var u = o[15]
              , c = o[102]
              , f = e[103];
            function l(r) {
   
                var a = o[102]
                  , i = e[103];
                this[n[76]] = r;
                for (var u = t[52], c = r[a + g + i]; u < c; u++)
                    this[u] = t[52]
            }
            return l[e[104]][w + m + I + u] = function() {
   
                for (var a = e[105], u = this[a + y], c = [], s = -e[0], v = o[2], f = u[r[56]]; v < f; v++)
                    for (var l = this[v], p = u[v], d = s += p; c[d] = l & parseInt(t[77], n[78]),
   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

etoken是什么意思,有什么作用?

EToken是一种数字货币&#xff0c;它是由以太坊区块链平台发行的智能合约&#xff0c;旨在为以太坊生态系统提供一种安全、可靠、去中心化的交易媒介。EToken具有多种作用&#xff0c;下面将详细介绍。 一、EToken的定义和发行 EToken是由以太坊智能合约创建的数字货币&#xf…

交易宝订单系统使用心得

简介 交易宝是管理订单支付的软件系统&#xff0c;可对多个应用的支付业务进行统一管理和运营&#xff0c;为你节省时间和精力&#xff0c;让你专注于核心业务&#xff0c;实现更高的效率和利润。 特点&#xff1a;无需开发&#xff0c;开箱即用&#xff0c;统一管理支付订单…

【运动规划】191 自适应跟踪kinodynamicrrt的路径

分层法&#xff1a; two layer approach 自适应控制&#xff0c;跟随轨迹。运动规划&#xff1a;扩展自由空间&#xff08;基于速度约束缩小自由空间&#xff09;为控制部分留余量&#xff0c;确保安全。 控制设计&#xff1a; 考虑平移和旋转&#xff0c;速度环控制&#xff…

什么是多要素自动气象监测设备?

WX-CQ12 随着科技的发展&#xff0c;我们对天气的预测和监测能力也在不断提高。其中&#xff0c;多要素自动气象监测设备正成为一种革命性的工具&#xff0c;帮助我们更好地理解和预测天气变化。 一、什么是多要素自动气象监测设备&#xff1f; 多要素自动气象监测设备是一种…

查看sql语句执行计划并重建索引

晚上cpu报警显示当前cpu使用率达到90%以上&#xff0c;不到10%的空闲 先查询当前sql&#xff1a; #&#xff08;ORACLE&#xff09; SQL > set line 200 pages 1000 col event for a30 col program for a30 col username for a12 col sql_id for a15 col INST_ID for 9999 …

【数据结构初阶(4)】栈的基本操作实现

文章目录 Ⅰ 概念及结构1. 栈的概念2. 栈的操作 Ⅱ 基本操作实现1. 栈的定义2. 初始化栈3. 元素入栈4. 元素出栈5. 获取栈顶元素6. 获取栈中有效元素个数7. 判断栈空8. 销毁栈 Ⅰ 概念及结构 1. 栈的概念 栈&#xff1a;栈是一种特殊的线性表&#xff0c;其只允许在固定的一端…

SAP QA11/QA32质检放行时,如何处理产生记账更改通知单时

前提&#xff1a;启用SAP wms仓库管理 场景&#xff1a; 当做移动类型321质检放行的时候&#xff0c;有时候会产生记账更改通知单&#xff0c;这个时候怎么处理&#xff1f; 解决办法&#xff1a; 使用事务码LU04,查看未清的记账更改通知单&#xff0c;进入清单列表之后&…

【深度学习】卷积神经网络(CNN)的参数优化方法

著名&#xff1a; 本文是从 Michael Nielsen的电子书Neural Network and Deep Learning的深度学习那一章的卷积神经网络的参数优化方法的一些总结和摘录&#xff0c;并不是我自己的结论和做实验所得到的结果。我想Michael的实验结果更有说服力一些。本书在github上有中文翻译的…

蓝桥杯每日一题2023.11.23

题目描述 题目分析 本题使用递归模拟即可&#xff0c;将每一个大格子都可以拆分看成几个小格子&#xff0c;先将最开始的数字进行填入&#xff0c;使每一个对应小格子的值都为大格子对应的数&#xff0c;搜索找到符合要求的即可 &#xff08;答案&#xff1a;50 33 30 41&am…

分布式篇---第二篇

系列文章目录 文章目录 系列文章目录前言一、你知道哪些分布式事务解决方案?二、什么是二阶段提交?三、什么是三阶段提交?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你…

第十七章:数据库操作

数据库基础 SQL语言 1、select 语句 select 语句用于从数据中检索数据。语法如下&#xff1a; SELECT 搜选字段列表 FROM 数据表名 WHERE 条件表达式 GROUP BY 字段名 HAVING 条件表达式(指定分组的条件) ORDER BY 字段名[ASC|DESC] 2、insert 语句 insert 语句用于向表中插入…

PTA-用天平找小球

三个球A、B、C&#xff0c;大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。 输入格式&#xff1a; 输入在一行中给出3个正整数&#xff0c;顺序对应球A、B、C的重量。 输出格式&#xff1a; 在一行中输出唯一的那个不一样的球。 输入样例&#xff…

【8】Spring Boot 3 集成组件:安全组件 spring security【官网概念篇】

目录 【8】Spring Boot 3 集成组件&#xff1a;安全组件 spring securitySpring Security 简介先决条件引入依赖身份验证密码存储密码存储历史DelegatingPasswordEncoder密码存储格式密码加解密类自定义密码存储 体系结构 ArchitectureServlet 过滤器DelegatingFilterProxyFilt…

基于element-plus定义表单配置化扩展表单按钮

文章目录 前言一、新增btn.vue组件二、使用总结如有启发&#xff0c;可点赞收藏哟~ 前言 在后台管理系统一般都存在列表查询&#xff0c;且可输入数据进行查询 基于element-plus定义表单配置化 新增按钮配置化 一、新增btn.vue组件 <template><template v-for&qu…

java协程操作mysql数据库

我的项目&#xff1a; nanshaws/nettyWeb: 复习一下netty&#xff0c;并打算做一个web项目出来 (github.com) 最近在项目中分别添加了虚拟线程操作mysql数据库&#xff0c;和用协程操作mysql数据库 同理先跟我这个博客操作一下前面的&#xff1a;就单纯代码的时候进行修改&a…

2014年12月22日 Go生态洞察:Go语言中的代码生成

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

Sui第七轮资助:八个项目共获得超过50万美元的资助

今日&#xff0c;Sui基金会宣布了本月获得资助的项目方&#xff0c;他们将获得超过50万美元的资助金&#xff0c;用于构建项目&#xff0c;推动Sui的采用和发展。要获得资助&#xff0c;项目必须提交提案&#xff0c;详细说明他们正在构建的内容、预算明细、关键里程碑、团队经…

Vue环境的搭建

1.Vue开发的两种方式 &#xff08;1&#xff09;核心包传统开发模式 基于html/css/js文件&#xff0c;直接引入和辛堡&#xff0c;开发Vue。 &#xff08;2&#xff09;工程化开发模式&#xff1a; 主要是基于构建工具&#xff08;例如,webpack&#xff09;的环境中开发Vue…

SpringBoot——感谢尚硅谷官方文档

SpringBoot——感谢尚硅谷官方文档 1 Spring与SpringBoot1、Spring能做什么1.1、Spring的能力1.2、Spring的生态1.3、Spring5重大升级1.3.1、响应式编程1.3.2、内部源码设计 2、为什么用SpringBoot2.1、SpringBoot优点2.2、SpringBoot缺点 3、时代背景3.1、微服务3.2、分布式分…

数据科学导论——数据预处理

第1关:引言-根深之树不怯风折,泉深之水不会涸竭 第2关:数据清理-查漏补缺 import numpy as np import pandas as pd import matplotlib.pyplot as plt def student():train = pd.read_csv(Task1/diabetes_null.csv, na_values=[#NAME?])train[Insulin] = train[Insulin].f…