【JS逆向02】反调试绕过&事件检测&无限Debug&篡改猴Hook&替换指向&匹配修改&条件断点

反调试

实现防止他人调试、动态分析自己的代码


检测调试方法

  • 无限Debugger技术
  • 键盘监听(F12)
  • 检测浏览器的高度插值
  • 检测开发者人员工具变量是否为true
  • 利用console.log调用次数
  • 利用代码运行的时间差
  • 利用toString
  • 检测非浏览器

案例

站点带有反调试,无法使用F12和右键,否则就卡住不动了


绕过技巧:

前三种方法较为简单,但实用性不高

禁用所有断点

可用性最高,但是最大缺点是自己也无法断点了

禁用局部断点

不执行局部语句

案例:https://antispider8.scrape.center/

设置条件断点

与禁用局部断点差不多

都修改条件为false后,其他部分便可正常断点

替换文件执行(修改文件重定向)

最常使用,最实用

js是前端语言,运行在用户的浏览器上,可以找到反调试代码,将涉及到的js文件进行替换

案例1

案例2

https://www.aqistudy.cn/html/city_realtime.php

这个网站使用的检测调试方法有:无限Debugger技术,键盘监听(F12)

也就是右键,F12都无法使用,并且会一直debug

强行多次尝试,打开F12

找不到可能是因为资源没有刷新完全,或者字符被编码了

做完操作后,发现还是不能进行调试,判断出没有删除干净

这里是由于在某php文件中存在加密编码内容

使用控制台看看是什么东西

代码是反调试操作,所以可以尝试替换删除

通过Burp修改匹配(流量到burp修改返回)

类似于自动替换文件执行

burpsuite -> 代理 -> 代理设置 ->响应替换规则

替换尽量置空,否则可能会报错造成网页无法正常运行

注意:必须保证js文件都加载完了

ctrl+F5强制刷新,获取到所有的js相关文件,防止缓存等问题

油管猴插件配合HOOK(插件对浏览器执行JS删除)

插件:油猴/篡改猴/tampermonkey

案例:https://jishulink.com/video/c246316

// ==UserScript==
// @name         New Userscript
// @namespace   http://tampermonkey.net/
// @version     2025-01-12
// @description 监控Function构造函数调用,并拦截包含'debugger'语句的函数定义,替换为日志记录
// @author       xiaodisec
// @match       https://jishulink.com/video/c246316
// @icon         https://www.google.com/s2/favicons?sz=64&domain=jishulink.com
// @grant       none
// ==/UserScript==
​
// 立即执行函数表达式,返回一个清理函数,用于在必要时恢复Function.prototype.constructor
const cleanup = (function () {
   'use strict';
   // 保存原始的Function构造函数
   const originalConstructor = Function.prototype.constructor;
​
   // 检查Function.prototype.constructor是否可写
   if (typeof Object.getOwnPropertyDescriptor(Function.prototype, 'constructor').writable === 'boolean' &&!Object.getOwnPropertyDescriptor(Function.prototype, 'constructor').writable) {
       console.error('Function.prototype.constructor is not writable. Cannot hook the constructor.');
       return function () {};
  }
​
   // 重写Function构造函数
   Function.prototype.constructor = function (...args) {
       console.log(`Function constructor called on page ${location.href} with arguments:`, args);
       if (args.length && args[0].includes("debugger")) {
           console.warn(`Attempt to use 'debugger' in Function constructor intercepted on page ${location.href}!`);
           args[0] = args[0].replace(/debugger/g, "console.log('debugger intercepted');");
           // 这里需要返回一个函数实例,而不是直接返回,否则会导致函数定义失败
           return originalConstructor.apply(this, args);
      }
       return originalConstructor.apply(this, args);
  };
​
   console.log("Function.prototype.constructor is now hooked!");
​
   // 返回清理函数,用于恢复原始的Function构造函数
   return function () {
       Function.prototype.constructor = originalConstructor;
       console.log("Function.prototype.constructor has been restored.");
  };
})();
​
// 在脚本卸载或页面卸载时调用清理函数
window.addEventListener('unload', function () {
   cleanup();
});

其中@match表示作用的域名

当使用油猴配置如上hook脚本后


本节知识点

JS逆向-反调试检测&方法

JS逆向-反调试案例&绕过

十二亿七千光年
暂无评论

发送评论 编辑评论


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