当前位置: 首页 > news >正文

关于爬虫中的hook(defineProperty,hook cookies, hook载荷数据,hookXHR)

关于爬虫中的hook:

defineProperty
var people = {age: 19,
};
var  count=20;
console.log(people.age)
// 参数:对象 属性名字 函数
Object.defineProperty(people, 'age', {get: function () {console.log('获取值!');return count;},// set: function (val) {//     console.log('设置值!');//     count = val + 1;// },
});
console.log(people.age) 

在这里插入图片描述

我们会发现,调用这个对象的属性的时候会自动调用那个函数,而且并没有直接输出我们的age属性值,age属性值被拦截了。

我们再看下面这个方法:

var people = {age: 19,
};
var  count=20;
// 参数:对象 属性名字
Object.defineProperty(people, 'age', {get: function () {console.log('获取值!');return count;},set: function (val) {console.log('你正在设置一个值');count = val + 1;},
});
console.log(people.age)
people.age = 50
console.log(people.age)

在这里插入图片描述

奇怪吧,原来设置值有的时候可以不对自己进行设置值,设置值可以有输出语句。

hook cookies

网站:

import base64# 解码
result = base64.b64decode('aHR0cHM6Ly9xLjEwanFrYS5jb20uY24v'.encode('utf-8'))
print(result)

在这里插入图片描述

我们会发现这个每一页数据的cookies的v都在发生变化,我们需要找到相应的js文件。

(function () {'use strict';var cookieTemp = '';Object.defineProperty(document, 'cookie', {set: function (val) {if (val.indexOf('__dfp') != -1) {// 存在为0 debugger;}console.log('Hook捕获到cookie设置->', val);cookieTemp = val;return val;//确保其正确返回},get: function () {return cookieTemp;},});
})();

在这里插入图片描述

获得cookie的时候,记着把cookie清空。

在这里插入图片描述

set 是我们hook的代码,所以向下找。

在这里插入图片描述

在这里插入图片描述

然后依次向下找,n的值就是cookie中v的值。

hook载荷数据

js代码中一定有JSON.stringify,将json对象转化为json字符串

在这里插入图片描述

这样的形式可以使用如下hook代码。

(function() {var stringify = JSON.stringify;JSON.stringify = function(params) {console.log("接收到的数据是 ——> ", params);debugger;return stringify(params);//正常返回}
})();

也可以对其进行拦截:

在这里插入图片描述

在这里插入图片描述

hookXHR:

网站:

import base64
# 解码
result = base64.b64decode('aHR0cHM6Ly93d3cucWltYWkuY24v'.encode('utf-8'))
print(result)

在这里插入图片描述
在这里插入图片描述

我们会发现网址里面的数据被加密了。

(function () {var open = window.XMLHttpRequest.prototype.open;//重构window.XMLHttpRequest.prototype.open = function (method, url, async) { // 方式 网址 是否异步if (url.indexOf("login") != -1) { //找到了应该是0 debugger;}// arguments 接受传递的参数,得到的是数组 return open.apply(this, arguments);};
})();

相关文章:

  • 企业办公室信息安全保密办法——推荐用天锐绿盾数据安全防泄密系统 | 防止核心文件数据、资料泄露
  • 〖大前端 - 基础入门三大核心之JS篇㊴〗- DOM节点的关系
  • 威班11月份PMP模拟考试实录
  • 2.5计划任务远程管理
  • C++引用
  • Re50:读论文 Large Language Models Struggle to Learn Long-Tail Knowledge
  • 阿里云服务器公网带宽如何修改?
  • 力扣刷题第二十七天--二叉树
  • Android Serializable / Parcelable
  • 【HCSD大咖直播】亲授大厂面试秘诀【云驻共创】
  • 代码随想录算法训练营Day36 —— 435. 无重叠区间、763.划分字母区间、56. 合并区间
  • 低代码服务商,中小型数字化软件服务商的新出路
  • echarts折线图修改特定点的颜色
  • LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO
  • 键鼠自动化2.0树形结构讲解
  • Brief introduction of how to 'Call, Apply and Bind'
  • Facebook AccountKit 接入的坑点
  • JavaScript新鲜事·第5期
  • JSDuck 与 AngularJS 融合技巧
  • k8s 面向应用开发者的基础命令
  • Meteor的表单提交:Form
  • nginx 负载服务器优化
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Unix命令
  • 百度地图API标注+时间轴组件
  • 创建一个Struts2项目maven 方式
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 数据科学 第 3 章 11 字符串处理
  • 算法之不定期更新(一)(2018-04-12)
  • 因为阿里,他们成了“杭漂”
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • ​插件化DPI在商用WIFI中的价值
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (动态规划)5. 最长回文子串 java解决
  • (二)Eureka服务搭建,服务注册,服务发现
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (一)基于IDEA的JAVA基础1
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ../depcomp: line 571: exec: g++: not found
  • .net 受管制代码
  • .net下的富文本编辑器FCKeditor的配置方法
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • @JsonSerialize注解的使用
  • @RequestBody详解:用于获取请求体中的Json格式参数
  • @vue/cli 3.x+引入jQuery
  • [ 环境搭建篇 ] 安装 java 环境并配置环境变量(附 JDK1.8 安装包)
  • [AIGC] Nacos:一个简单 yet powerful 的配置中心和服务注册中心
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured