爬虫基础-hook技术

原理

在这里插入图片描述

方法hook

我们知道在 JavaScriptJSON.stringify() 方法用于将 JavaScript 对象或值转换为 JSON 字符串,JSON.parse() 方法用于将一个 JSON 字符串转换为JavaScript 对象,某些站点在向 web 服务器传输用户名密码时,会用到这两个方法

// JSON.parse('{name:xxx}')
(function() {
    var _parse = JSON.parse;
    JSON.parse = function(ps) {
        console.log("Hook JSON.parse ——> ", ps);
        debugger;
        return _parse(ps);  // 不改变原有的执行逻辑 
    }
})();

有两处需要处理,避免麻烦的是返回的加密数据
在这里插入图片描述
在这里插入图片描述
现在控制台执行上面的hook函数,然后出发翻译
在这里插入图片描述
在这里插入图片描述
o是密文,通过第二个红框的处理就变成了明文
在这里插入图片描述

hxr hook

案例地址:https://www.qimai.cn

定义了一个变量 open 保留原始 XMLHttpRequest.open 方法,然后重写 XMLHttpRequest.open 方法,判断如果 rnd 字符串值在 URL 里首次出现的位置不为 -1,即 URL 里包含 analysis字符串,则执行 debugger 语句,会立即断下。

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

var xhr= new XMLHttpRequest(),
    method = "GET",
    url = "https://developer.mozilla.org/";

xhr.open(method, url, true);
xhr.onreadystatechange = function () {
  if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
    console.log(xhr.responseText)
  }
}
xhr.send();
示例一:

搜索不到想要的关键字
分析
在这里插入图片描述
在这里插入图片描述
解决:

// 如果是正数 表示存在里面
// 如果是-1 表示不在里面

(function () {
    var open = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function (method, url, async) {
        if (url.indexOf("analysis") != -1) {
            debugger;
        }
        return open.apply(this, arguments);
    };
})();

在控制台执行上面的函数,然后触发请求,会被断住
在这里插入图片描述
断点跟踪
跟到then,就进入
在这里插入图片描述

在这里插入图片描述
向上找,一定会找到request
在这里插入图片描述

示例二

在这里插入图片描述

示例三 模拟发请求

在这里插入图片描述
前提是需要浏览器环境, 提前打开网站
在这里插入图片描述

cookie hook

原理

Object.defineProperty 为对象的属性赋值,替换对象属性

基本语法:Object.defineProperty(obj, prop, descriptor),它的作用就是直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,接收的三个参数含义如下:

  1. obj:需要定义属性的当前对象;
  2. prop:当前需要定义的属性名;

在这里插入图片描述
逆向的作用:
在这里插入图片描述
在这里插入图片描述
示例:监听后,修改属性的值:
在这里插入图片描述
访问属性时,会访问get
在这里插入图片描述
设置值的时候,会访问set方法
在这里插入图片描述
cookie 钩子用于定位 cookie 中关键参数生成位置,以下代码演示了当 cookie 中匹配到了 v, 则插入断点:

注:正常hook cookie操作的时候需要清除下cookie

示例:

在这里插入图片描述
在这里插入图片描述
监听cookie里面的v的变化

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

执行hook, 翻页数据
在这里插入图片描述
在这里插入图片描述
可以看到已经有加密结果了,在往上找栈,看这个方法是谁调用的
在这里插入图片描述
可以看出,只有n是需要逆向的,其他都是固定值
在这里插入图片描述
根据rt.update, 点击控制台的函数,可以定位到上面的D()函数, 最终结果是通过O()函数返回的,定位到大O函数
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值