【JS逆向03】HOOK钩子&脚本开发&注入逻辑&油管猴配置&绕过Debug&定时循环&构造函数

概念

JS Hook(钩子)是一种通过拦截和修改JavaScript函数或对象行为的技术

钩子、注入劫持

主要用于:

  • 动态分析网页行为
  • 修改页面功能
  • 调试和逆向工程
  • 自动化测试
  • 安全研究

HOOK原理

hook类似于在浏览器控制台中执行想要的代码,注入到当前js执行流程中,干扰原本进程

hook类似于这里把变量覆盖写在控制台中,这里写debugger则会停止进程


HOOK开发前置

每个hook脚本必须写,并非注释可有可无

  • @name:定义脚本的名称
  • @namespace: 用于区分不同脚本的作用域(重要)在油猴使用就写http://tampermonkey.net/
  • @version : 定义脚本的版本号
  • @description :描述脚本的功能或用途
  • @author :定义脚本的作者
  • @match : 定义脚本的运行匹配规则(重要)全匹配:http://*/*针对http下的所有网站(不建议)精确匹配:https://abc.com/*针对这个域名,包括其下所有目录
  • @icon :定义脚本的图标
  • @grant :定义脚本所需的特殊权限默认为none当需要调用自带js中的window类时,写unsafeWindow

案例1:HOOK改宽高

在控制台中查看当前浏览器窗口宽高:

宽:window.innerHeight

高:window.innerWidth

hook脚本固定宽高

// ==UserScript==
// @name         Fixed_window_size
// @namespace   https://github.com/0xsdeo/Hook_JS
// @version     2025-01-11
// @description js获取浏览器高度或宽度时获取到的是脚本中设置的固定值,如果网站js尝试去设置高度和宽度值会直接去设置固定值,并不会按照网站js设置的值去设置。
// @author       0xsdeo
// @match       http://*/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant       none
// ==/UserScript==
​
(function () {
   'use strict';
​
   let height = 660; // 固定的高度值
   let width = 1366; // 固定的宽度值
​
   let innerHeight_property_accessor = Object.getOwnPropertyDescriptor(window, "innerHeight"); // 获取innerHeight属性访问器描述符
   let innerHeight_set_accessor = innerHeight_property_accessor.set; // 获取setter
​
   Object.defineProperty(window, "innerHeight", {
       get: function () {
           // 在这里写你想让hook后的属性在被获取值时执行的代码
           return height;
      },
       set: function () {
           // 在这里写你想让hook后的属性在被设置值时执行的代码
           innerHeight_set_accessor.call(window, height);// 将网站js设置目标属性值时所传入的内容传给原setter设置并返回结果
      }
  });
​
   let innerWidth_property_accessor = Object.getOwnPropertyDescriptor(window, "innerWidth"); // 获取innerWidth属性访问器描述符
   let innerWidth_set_accessor = innerWidth_property_accessor.set; // 获取setter
​
   Object.defineProperty(window, "innerWidth", {
       get: function () {
           // 在这里写你想让hook后的属性在被获取值时执行的代码
           return width;
      },
       set: function () {
           // 在这里写你想让hook后的属性在被设置值时执行的代码
           innerWidth_set_accessor.call(window, width);// 将网站js设置目标属性值时所传入的内容传给原setter设置并返回结果
      }
  });
})();

添加到油猴中

此时无论如何调整窗口大小,控制台打印出的宽高都是固定值


案例2:本地Debug绕过

找到过滤代码机制

function enableDebugProtection() {
​
   var dbg = new Function("debugger");
​
   setInterval(dbg, 3000); // 每3秒触发一次debugger
​
}

配合AI和基础开发hook

让ai写一个hook脚本:“写一个篡改猴应对如上反调试的hook代码,作用域为http://x.x.x.x”

拦截Function构造函数及替换

拦截setInterval及替换

油管猴配合HOOK脚本测试

打开油管猴进行测试,看反调试是否绕过成功


案例3:真实Debug绕过

全局搜索找到过滤代码机制

function() {}.constructor("debugger")()

配合AI和基础开发hook

拦截Function构造函数

找到debugger并实现替换

油管猴配合HOOK脚本测试

开启后可进行正常调试


本节知识点

JS逆向-JS Hook原理&Hook脚本&开发前置

JS逆向-Hook开发&绕过Debug

十二亿七千光年
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇