吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3822|回复: 6
收起左侧

[Web逆向] 以 aqistudy 为例的无限 debugger 反调试绕过演示(附视频)

  [复制链接]
xianyucoder 发表于 2021-8-17 14:34
本帖最后由 xianyucoder 于 2021-8-19 09:24 编辑

今日网站

aHR0cHM6Ly93d3cuYXFpc3R1ZHkuY24v

这个站是看到读者在其他群里问以为又改版了,所以打开瞅瞅

本篇文章只演示反调试的绕过,其他内容之前文章讲过了。

请自行翻阅

debugger 的绕过

最后附视频演示

打开网站,发现网站禁用了 F12 和 右键

这样的反调试可以通过 Ctrl + Shift + i 打开控制台

打开控制台之后看到提示debugger

这样的 debugger ,可以在堆栈里翻看上一层堆栈看看能否置空函数来防止进入 debugger

通过堆栈可以看到txsdefwsw这个方法调用了debugger

这个方法是在首页调用的,试了下txsdefwsw = function(){}

发现还是会出现调用,再看堆栈,发现原来还有setInterval循环调用了检测逻辑

可以看到上图的堆栈,最顶层是city_realtime.php

在这个堆栈里找到了两个eval

所以这个网站的整套逻辑我猜是下面这样的

1、请求目标网站
2、目标网站加载首页(首页中包含上图的两个 eval)
3、eval 中包含检测逻辑
4、访客打开控制台,被已经加载的检测逻辑检测,完成反调试

知道这个套路之后我们要这么反反调试?

1、本地代{过}{滤}理这个首页,替换首页的eval

这个法子的工具用 Fiddler 或者 Reres ,用规则匹配到这个页面然后替换就好了,网上的资料很多或参考之前的文章

2、使用如下视频的方法调试,可以在 vm 的生命周期内不用理会 debugger

链接:https://pan.baidu.com/s/1mlIzTyLqDTYKF4fjViLqGQ 提取码:c408

有读者试过视频中的方法,但是就是不行,这是为啥?

这里可能是忽略了一个小细节,这个可以在代码中找到答案

这里检测了 window 的内外长宽,当我们打开控制台,原有展示的页面就小了,所以只要把控制台调整成一个新的窗口就可以规避,接着使用视频展示的就可以了。

除此之外,还有读者好奇eval里面的dxYKI84fjg还有d1JR0RXxxgp逻辑在哪,进不到具体逻辑里

可以像我这样在控制台输入函数名,然后点击回显的内容就可以自动跳到对应的逻辑了,这个方法适用于没有重写过toString方法的函数。

关于 debugger 反调试的形式很多,但是检测的方法大同小异,重要的是理解他为什么会出现 debugger ,先知道原理才知道如何绕过。

以上,就是今天的全部内容了,我们下次再会~

免费评分

参与人数 6吾爱币 +5 热心值 +6 收起 理由
gamma + 1 + 1 谢谢@Thanks!
小小宇6 + 1 + 1 我很赞同!
pdwml + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
5omggx + 1 + 1 用心讨论,共获提升!
Lucifer_BW + 1 + 1 热心回复!
fjzry + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| xianyucoder 发表于 2022-5-26 15:44
gamma 发表于 2022-5-26 15:39
方法很有用,谢谢。
不过还有一种函数构造方法:
function aaa(){

var _con = Function.prototype.constructor;
Function.prototype.constructor = function(val){
  if(val = "debugger"){
    return 0;
  }
  return _con(val);
}
或者
(function() {
if (window.__cr_eval) return
window.__cr_eval = window.eval
var myeval = function (src) {
     if (src.indexOf('debugger') != -1) {return window.__cr_eval('') }
     return window.__cr_eval(src)
}
var _myeval = myeval.bind(null)  
_myeval.toString = window.__cr_eval.toString
Object.defineProperty(window, 'eval', { value: _myeval })
})();
Hmily 发表于 2021-8-17 16:19
 楼主| xianyucoder 发表于 2021-8-17 16:40
Hmily 发表于 2021-8-17 16:19
文章编辑下吧,段于段换个行看的舒服一些。

已编辑,感谢大佬的建议
瑾年Lee 发表于 2021-8-18 14:24
今天又去看了一下,定時器那裡似乎是改了
gamma 发表于 2022-5-26 15:39
方法很有用,谢谢。
不过还有一种函数构造方法:
function aaa(){
[constructor] (debugger)
function aaa()
}
或者是从外部解密字符串后拼接过来的应该怎么办呢?
wu2022 发表于 2022-9-24 18:24
666学到了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-24 10:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表