首页 > 其他分享 >JS逆向之常用Hook方法

JS逆向之常用Hook方法

时间:2024-08-17 09:50:00浏览次数:10  
标签:function 逆向 DOM window JS Hook JSON eval

  1. DOM操作:通过修改DOM元素的属性和样式,来实现对网页的控制和修改。
  2. 事件监听:通过监听网页上的事件,来触发自定义的操作和行为。
  3. AJAX拦截:通过拦截网页上的AJAX请求,来实现对数据的控制和修改。
  4. 函数替换:通过替换网页上的函数,来实现对函数的控制和修改。

 

DOM操作

在JS逆向油猴脚本中,DOM操作是最常用的一种Hook方式。通过修改DOM元素的属性和样式,我们可以实现对网页的控制和修改。

在实际应用中,我们可以使用以下代码来修改DOM元素的属性和样式:

 
// 修改DOM元素的属性
document.getElementById('elementId').setAttribute('attrName', 'attrValue');
 
// 修改DOM元素的样式
document.getElementById('elementId').style.property = 'value';

 

这样,我们就可以通过修改DOM元素的属性和样式,来实现对网页的控制和修改。

事件监听

除了DOM操作之外,事件监听也是JS逆向油猴脚本中常用的一种Hook方式。通过监听网页上的事件,我们可以触发自定义的操作和行为。

在实际应用中,我们可以使用以下代码来监听网页上的事件:

 
// 监听按钮点击事件
document.getElementById('buttonId').addEventListener('click', function() {
// 自定义操作和行为
});

 

AJAX拦截

除了DOM操作和事件监听之外,AJAX拦截也是JS逆向油猴脚本中常用的一种Hook方式。通过拦截网页上的AJAX请求,我们可以实现对数据的控制和修改。

在实际应用中,我们可以使用以下代码来拦截网页上的AJAX请求:

 
// 拦截AJAX请求
XMLHttpRequest.prototype._send = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function() {
// 自定义操作和行为
this._send.apply(this, arguments);
};

 

函数替换

最后,函数替换也是JS逆向油猴脚本中常用的一种Hook方式。通过替换网页上的函数,我们可以实现对函数的控制和修改。

在实际应用中,我们可以使用以下代码来替换网页上的函数:

 
// 替换原有函数
var originalFunction = window.functionName;
window.functionName = function() {
// 自定义操作和行为
originalFunction.apply(this, arguments);
};

 

这样,当网页上调用原有函数时,就会执行我们自定义的操作和行为。

Hook Cookie

Cookie Hook 用于定位 Cookie 中关键参数生成位置,以下代码演示了当 Cookie 中匹配到了 token 关键字, 则插入断点:

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

 

Hook Header

Header Hook,顾名思义,是一种用于定位 Header 中关键参数生成位置的工具。它能够方便地进行调试和优化,让开发者能够更加轻松地定位问题。以下代码演示了当 Header 中包含 Authorization 关键字时,工具会自动插入断点,方便开发者进行调试。

 
(function () {
  var org = window.XMLHttpRequest.prototype.setRequestHeader;
  window.XMLHttpRequest.prototype.setRequestHeader = function (key, value) {
    if (key == 'Authorization') {
      debugger;
    }
    return org.apply(this, arguments);
  };
})();

 

 

Hook URL

URL Hook是一种用于定位请求URL中关键参数生成位置的工具。当请求的URL中包含关键字”login”时,以下代码可以演示如何使用URL Hook。

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

 

Hook JSON.stringify

JSON.stringify()方法是将 JavaScript 数据转换成 JSON 字符串的常用方法。在某些网站的加密过程中,也可能会遇到它。,以下代码演示了遇到 JSON.stringify() 时,则插入断点:

 
(function() {
  var stringify = JSON.stringify;
  JSON.stringify = function(params) {
    console.log("Hook JSON.stringify ——> ", params);
    debugger;
    return stringify(params);
  }
})();

 

Hook JSON.parse

JSON.parse() 方法常用于将 JSON 字符串转换为 JavaScript 对象。在某些网站的加密过程中,也可能会遇到它。以下代码演示了遇到 JSON.parse() 时,则插入断点:

 
(function() {
  var parse = JSON.parse;
  JSON.parse = function(params) {
    console.log("Hook JSON.parse ——> ", params);
    debugger;
    return parse(params);
  }
})();

 

Hook eval

JavaScript 中的 eval() 函数常用于计算 JavaScript 字符串,并将其作为脚本代码来执行。如果参数是一个表达式,eval() 函数将执行表达式。如果参数是 JavaScript 语句,eval() 将执行 JavaScript 语句,经常被用来动态执行 JS。以下代码执行后,之后所有的 eval() 操作都会在控制台打印输出将要执行的 JS 源码:

 
(function() {
  // 保存原始方法
  window.__cr_eval = window.eval;
  // 重写 eval
  var myeval = function(src) {
    console.log(src);
    console.log("=============== eval end ===============");
    debugger;
    return window.__cr_eval(src);
  }
  // 屏蔽 JS 中对原生函数 native 属性的检测
  var _myeval = myeval.bind(null);
  _myeval.toString = window.__cr_eval.toString;
  Object.defineProperty(window, 'eval', {
  value: _myeval
  });
})();

 

Hook Function

以下的代码执行后,所有的函数操作都会在控制台打印输出将要执行的 JavaScript 源码。这是一种常见的调试方法,可以帮助开发人员更好地了解代码的执行过程。示例代码如下:

 
(function() {
  // 保存原始方法
  window.__cr_fun = window.Function;
  // 重写 function
  var myfun = function() {
    var args = Array.prototype.slice.call(arguments, 0, -1).join(","),
    src = arguments[arguments.length - 1];
    console.log(src);
    console.log("=============== Function end ===============");
    debugger;
    return window.__cr_fun.apply(this, arguments);
  }
  // 屏蔽js中对原生函数native属性的检测
  myfun.toString = function() {
    return window.__cr_fun + ""
  }
  Object.defineProperty(window, 'Function', {
    value: myfun
  });
})();

 

     

标签:function,逆向,DOM,window,JS,Hook,JSON,eval
From: https://www.cnblogs.com/xingxia/p/18364068/js_reverse

相关文章

  • jsonunit 比较jsondiff
    https://github.com/lukas-krecan/JsonUnitimportstaticnet.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;importstaticnet.javacrumbs.jsonunit.assertj.JsonAssertions.json;...//comparestwoJSONdocuments(notelenientparsingofexpected......
  • 最短路(DJsktra,spfa,flyd).md
    最短路弗洛伊德:全源最短路:\[\LargeDP方程:\\dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j])\]#include<cstdio>#include<algorithm>#include<iostream>#include<cstring>#defineintlonglong#defineiosstd::ios::sync_with_stdio(false);s......
  • 【超详细】Node.js搭建服务器之路由基础与实践并实现模块化
    Node.js路由基础与实践简介在Web开发中,路由是处理客户端请求并将其映射到服务器端资源的一种机制。Node.js提供了灵活的方式来处理HTTP请求,并通过路由来响应不同的URL。环境搭建在开始之前,请确保您的开发环境已经安装了Node.js。接着,创建一个新的项目文件夹,并在其中创建......
  • jsp底层运行原理分析
    jsp一、jsp的概念JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。更直观的就是html代码可以与java代码同时存在一个页面中。二、jsp的九大内置对象resquest——请求域对象request对象是javax.servlet.httpServletRequest类型的对象。......
  • golang json inline用法
    packagemainimport( "encoding/json" "fmt")typeProjectstruct{ Keystring`json:"key"` Valuestring`json:"value"`}typeJiraHttpReqFieldstruct{ Project`json:",inline"` Summarystring`jso......
  • 【python学习】为什么你应该放弃标准 JSON 库,转向更智能的 CommentJSON?
    在软件开发中,JSON是不可或缺的数据交换格式。然而,标准的json库并不支持注释,这使得开发者在处理复杂配置文件时感到束手束脚。本文将详细介绍commentjson库,它不仅能解析标准JSON格式,还支持带注释的JSON文件。通过对比commentjson和标准json库的用法及优势,帮助你......
  • TMDOG的微服务之路_06——Nest.js 的守卫、修饰器,并集成 MongoDB
    TMDOG的微服务之路_06——Nest.js的守卫、修饰器,并集成MongoDB博客地址:TMDOG的博客在上一篇博客中,我们探讨了如何在Nest.js中使用管道进行数据验证和转换。本篇博客,我们将深入了解如何在Nest.js中使用守卫和修饰器进行权限控制,并展示如何将MongoDB集成到Nest.js......
  • JsonPath断言
    JsonPath断言1、Maven引入依赖<!--JsonPath依赖项--><dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.7.0</version>......
  • docker配置文件daemon.json
    docker配置文件daemon.json1.配置文件的作用  1)可以配置下载的镜像源,即镜像加速器:常见的有配置阿里云镜像源,因为docker的官方镜像源下载镜像很慢  2)可以配置连接到不安全的私有仓库2.配置文件存放的路径  /etc/docker3.配置下载的镜像源地址和允许连接到不安全的私......
  • js 二进制、十进制、十六进制的互相转换
      1、十进制转二进制letx=8x.toString(2)//'1000'x=2x.toString(2)//'10'2、十进制转十六进制letx=8x.toString(16)//'8'x=14x.toString(16)//'e'3、二进制转十进制letx='1011'parseInt(x,2)//114、二进......