V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
loginv2
V2EX  ›  JavaScript

如何实现像这个网站一样的反调试效果

  •  1
     
  •   loginv2 · 2021-04-23 12:57:26 +08:00 · 6170 次点击
    这是一个创建于 1344 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://www.agefans.net/play/20160120?playid=3_1

    打开控制台就跳转页面了,网上能搜到的信息都是会利用 debugger 停住页面,没有直接跳转的。
    rozbo
        1
    rozbo  
       2021-04-23 13:07:57 +08:00   ❤️ 2
    love
        2
    love  
       2021-04-23 13:13:15 +08:00
    有点意思,console 对象也许有方法能判断是否打开了控制台,也许要先在地址栏改了这对象再开控制台
    Netfix
        3
    Netfix  
       2021-04-23 13:27:16 +08:00
    关闭 运行 js 脚本 就可以调式了
    loginv2
        4
    loginv2  
    OP
       2021-04-23 13:51:18 +08:00
    @Netfix 页面依靠 js 加载的怎么办?关了 js 连内容都不显示
    hi543
        5
    hi543  
       2021-04-23 14:10:44 +08:00
    在有 debug 的地方添加条件断点:false
    domodomo
        6
    domodomo  
       2021-04-23 14:14:36 +08:00
    页面加载完了禁用 js 就能调试了,毫无意义的把戏
    里面的代码还搞了混淆加密,加密代码名叫:“'jsjiami.com.v5'”,笑死我了。
    loginv2
        7
    loginv2  
    OP
       2021-04-23 14:18:04 +08:00
    @domodomo 怎么弄啊,我加载完打开控制台就跳转了,禁用 js 除了控制台还有其他地方可以设置么?
    xiangbohua
        8
    xiangbohua  
       2021-04-23 14:20:04 +08:00   ❤️ 1
    @loginv2 应该是浏览器里面设置,禁止 js 执行吧
    phony2r
        9
    phony2r  
       2021-04-23 14:21:30 +08:00
    safari 并没有任何效果
    loginv2
        10
    loginv2  
    OP
       2021-04-23 14:25:07 +08:00
    @xiangbohua 会了,先添加允许,然后刷新页面再改成禁用。
    7075
        11
    7075  
       2021-04-23 14:31:27 +08:00
    哪里反调试了
    3dwelcome
        12
    3dwelcome  
       2021-04-23 14:45:59 +08:00
    有意思,有高手能指导一下跳转原理吗?没看出来蹊跷的地方。
    darknoll
        13
    darknoll  
       2021-04-23 14:59:17 +08:00
    装个拦截的插件就行了啊
    fjc0k
        14
    fjc0k  
       2021-04-23 15:05:11 +08:00   ❤️ 1
    https://github.com/fz6m/console-ban

    禁止 F12 / 审查开启控制台,保护站点资源、减少爬虫和攻击的轻量方案,支持重定向、重写、自定义多种策略。
    hafuhafu
        15
    hafuhafu  
       2021-04-23 15:46:12 +08:00
    好像效果不是很好。
    chocovon
        16
    chocovon  
       2021-04-23 15:48:28 +08:00
    @loginv2 #10 在哪里改的禁用?我这边改成禁用后,如果不刷新页面,直接打开控制台还是会跳转……禁用 js 的设置好像不对已经打开的页面生效
    Rwing
        17
    Rwing  
       2021-04-23 15:51:34 +08:00
    挺有意思哈
    hcen1997
        18
    hcen1997  
       2021-04-23 16:03:26 +08:00   ❤️ 2
    根据 @domodomo @loginv2 @xiangbohua 的提示, hack 出来了
    1. 去主页 www.agefans.net 给 history.js 加个断点
    2. 回到视频页面, 断点开出来了,
    3. debug 一会, 找到关键文件 cdn.radius-america.com /age/static/js/s_dett.js?ver=202102251329
    4. 代码具体思路应该是 evel 中的函数(最后

    eval(function(p,a,c,k,e,r){e=String;if('0'.replace(0,e)==0){while(c--)r[e(c)]=k[c];k=[function(e){return r[e]||e}];e=function(){return'[0-5]'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(0(){1.addListener(0(2,detail){if(2){3 4=self;3 5=4.location;5.href=decodeURIComponent(\'%2f\')}else{}});1.lanuch()})();',[],6,'function|devtoolsDetector|isOpen|const|_s|_l'.split('|'),0,{}));

    这个 evel 执行一个包裹了几层的字符串(并不是公私钥加密, 只是简单的加密)
    效果应该就是跳转到主页了

    hack 的方式很简单: debug 器可以赋值任意变量, 把执行出来的 p 赋值为 "console.log(1)" 交给 evel
    (这个函数被执行了两次, 所以手工弄两次)

    以上还是使用 chrome 操作的, 如果是专门的黑产浏览器估计都不用这么麻烦

    这就引申出一个很有意思的问题, 开源世界里,一个人可以骗过一群人吗?
    noe132
        19
    noe132  
       2021-04-23 16:17:16 +08:00   ❤️ 1
    其实就是 2 点,1 循环 log 一个 toString 为自定义函数的变量,当这个 toString 被执行了,说明控制台打开了。
    2 循环执行一个 debugger 的空函数,计算每次函数执行的间隔,如果执行间隔超过了 100ms,说明控制台被打开了,触发了断点。
    cyrbuzz
        20
    cyrbuzz  
       2021-04-23 16:30:35 +08:00   ❤️ 1
    1. 到首页或者新开页面,在 Network 区域,选择 slow 3G 。
    2. 加载目标页面,把所有 js block 一遍,一个个开,发现是这个 js https://cdn.radius-america.com/age/static/js/s_dett.js?ver=202102251329
    3. 给这个 JS 打个断点,最后一段发现这个。

    ```javascript
    if (__getCookie_v3('username') != 'admin') {
    eval(function(p, a, c, k, e, r) {
    e = String;
    if ('0'.replace(0, e) == 0) {
    while (c--)
    r[e(c)] = k[c];
    k = [function(e) {
    return r[e] || e
    }
    ];
    e = function() {
    return '[0-5]'
    }
    ;
    c = 1
    }
    ;while (c--)
    if (k[c])
    p = p.replace(new RegExp('\\b' + e(c) + '\\b','g'), k[c]);
    return p
    }....
    ```

    后面是一堆 eval 的 string,会有一个`devtoolsDetector`,然后这个会判断是否打开了 console,判断方式见楼上各位大佬的链接。

    4. 上面代码有个 BUG,__getCookie_v3,试了试就是获取叫 username 的 cookies 的值,这里写的不是 admin 的时候会执行这段代码。

    5. 后面怎么操作不用多说了吧= =...
    LnTrx
        21
    LnTrx  
       2021-04-23 16:36:47 +08:00   ❤️ 1
    这类网站很多都喜欢搞反调试

    还见到过一个更猛的 http://www.otomedream.com/
    Biwood
        22
    Biwood  
       2021-04-23 16:38:28 +08:00   ❤️ 2
    所以只需在调试拦输入 document.cookie = "username=admin;domain=.agefans.net"
    然后 Enter,就破解了,刷新页面可用,亲测有效
    xwcs
        23
    xwcs  
       2021-04-23 17:25:12 +08:00
    @LnTrx 右键检查就搞定了,这种反调试感觉没啥意思
    chuqi
        24
    chuqi  
       2021-04-23 17:49:36 +08:00
    @xwcs 你是用的什么浏览器,我用的 edge 右键,发现层主说的猛了,确实有意思
    overflow99
        25
    overflow99  
       2021-04-23 18:33:19 +08:00   ❤️ 1
    可以通过创建一个 dom 元素,然后利用 defaineProperty 去检测这个元素的 id 有没有被访问,被访问则表示打开了控制台。这方法是曾经在 github 上看到一个人做的控制台检测工具源码发现的,我在本地试了下,果然可用。
    tiancaixiaoshuai
        26
    tiancaixiaoshuai  
       2021-04-23 19:30:10 +08:00
    https://www.mvcat.com/movie/5316.html
    黑客帝国特效的反调试
    gBurnX
        27
    gBurnX  
       2021-04-23 19:47:38 +08:00
    很多年前,连 USB 芯片加密方案都被破解了,hacker 团队直接在驱动层做了个模拟软件。

    js 这种连代码都直接可读的玩意,与其浪费时间研究加密,还不如多学习基础知识,或者好好生活娱乐..
    A3m0n
        28
    A3m0n  
       2021-04-23 23:15:35 +08:00
    原来是这样,我说怎么在 iPhone 上使用 Chrome 根本无法观看里面的动漫,估计是 Chrome 触发了这一块的代码。
    newmlp
        29
    newmlp  
       2021-04-24 11:08:47 +08:00
    edge 没效果,打开了调试也没跳转
    yunyuyuan
        30
    yunyuyuan  
       2021-04-24 11:28:43 +08:00
    edge 亲测没跳转
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 11:00 · PVG 19:00 · LAX 03:00 · JFK 06:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.