V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
shadowfish0
V2EX  ›  程序员

禁用 devtools 的奇技淫巧

  •  
  •   shadowfish0 · 2023-10-10 01:15:22 +08:00 · 4649 次点击
    这是一个创建于 374 天前的主题,其中的信息可能已经有所发展或是发生改变。
    发现一个神奇的库,可以禁用网站 devtools 达到保护源码的目的

    https://github.com/theajack/disable-devtool

    有厉害的老哥有破解思路吗,我记得之前有人发过类似帖子,他那个提前打开 devtools 再输网址可破,但这个法子在这个库也没用了

    装了个禁用 js 的插件,但是 react 貌似就必须跑在 js 环境下,禁用的话整个页面都出不来了

    有点没思路了哈哈
    24 条回复    2023-10-11 16:54:06 +08:00
    zeusho871
        1
    zeusho871  
       2023-10-10 01:22:29 +08:00 via Android
    只要用的谷歌别人就有办法打开,而且我用 playwright 之类的工具,一样可以获取你
    comingnine
        3
    comingnine  
       2023-10-10 01:54:10 +08:00
    不清楚强度怎么样啊?道高一尺,魔高一丈
    Perry
        4
    Perry  
       2023-10-10 06:31:46 +08:00 via iPhone   ❤️ 1
    这跟发明永动机有啥区别?不管什么牛魔鬼怪,能 render 到浏览器上的东西都能看到源码,即使是 uglified 过的。
    yanyao233
        5
    yanyao233  
       2023-10-10 06:51:21 +08:00 via Android
    前端基本没啥秘密,只不过就是恶心程度不同
    k9982874
        6
    k9982874  
       2023-10-10 08:13:40 +08:00
    不如多几层混淆
    sunorg
        7
    sunorg  
       2023-10-10 08:27:39 +08:00 via Android
    这应用场景主要是反扒上面,增加难度而已。

    抛开场景谈技术,没意义
    liuidetmks
        8
    liuidetmks  
       2023-10-10 08:46:41 +08:00
    没什么意义,不如混淆或者 wasm
    Blanke
        9
    Blanke  
       2023-10-10 08:57:37 +08:00
    没什么卵用
    Masoud2023
        10
    Masoud2023  
       2023-10-10 09:38:23 +08:00   ❤️ 7
    与其在前端想方设法保护那点弱智代码,还不如在后端方向想想怎么做一些校验或者风控
    zxcholmes
        11
    zxcholmes  
       2023-10-10 12:23:14 +08:00
    用 fiddler 之类代理,劫持请求,修改 response ,把这个 js 逻辑去掉,随便 devtools ,有人会说 https ?装根证书不就行了,https 改包对 fiddler 也不是难事
    solobat
        12
    solobat  
       2023-10-10 13:42:04 +08:00
    找一个或开发个浏览器扩展,劫持请求,修改 js url 或内容就行了
    Rache1
        13
    Rache1  
       2023-10-10 13:50:02 +08:00
    IT 民科 😆
    AtlantaANiu
        14
    AtlantaANiu  
       2023-10-10 14:21:42 +08:00
    主要还是利用了 log 的惰性执行这个特性,找个脚本注入插件,重写一下 conosle.log 函数就能绕过
    zsh2517
        15
    zsh2517  
       2023-10-10 15:13:13 +08:00   ❤️ 1
    用官方 demo ( https://theajack.github.io/disable-devtool/)测试。我遇到的主要检测方式就是 Date/FuncToString 词数检测和 performance 性能检测。这俩都是依赖 console.log 的机制

    不依赖任何外部工具(即靠页面本身、地址栏注入 JS 、打开 devtools 之后的手速)的情况下,目前我发现的唯一解法是提前打开 devtools ,网速调到慢速 3G/自定义一个高延迟的网络,在浏览器载入 js 之前(最一开始一定是加载 HTML 的,这个时候禁用还没载入),覆盖掉 window.console 。比如 window.console.log = () => { }; window.console.table = () => { }; window.console.clear = () => { };

    如果想自动生效,油猴脚本加一个 `// @run-at document-start` ,声明注入时机把 window.console 干掉就行。上面这种方法比较简单但是没有任何 console.log 内容了。如果还想要打印的东西,可以自己重写 console.log ,检测 e.toString === e.__proto__.toString 或者 e 的内容,过滤掉检测的那个变量或者给他改回去。

    至于性能检测( table 时间 > 10*log 时间),重写 console 函数的时候,给 log 加一个 for 10....0 延迟,或者把 table 改成 settimeout 异步打印就行。如果对于日志顺序有严格要求,可以自己实现一个队列按顺序打印,控制好执行时间就可以

    如果 disable-devtool 还想对 console.log 是否被魔改过进行检测,又是一个新的话题了。可以参考比如 https://zhuanlan.zhihu.com/p/564194625

    ---

    以上方法是从他检测机制直接入手的。简单点的方式,比如直接拦截请求,把脚本生效的地方干掉、字符串替换把 md5 换成自己知道的密码等等。这个脚本、油猴以及抓包都能干,就不试了
    zsh2517
        16
    zsh2517  
       2023-10-10 15:16:35 +08:00
    @zsh2517 补充,这是建立在白盒测试的情况下,我能直接针对检测的方式入手。如果直接给我个用了它的网站(甚至还是混淆代码之后的),我感觉我可能还真弄不出来
    zsh2517
        17
    zsh2517  
       2023-10-10 15:30:36 +08:00
    再补充:我也不知道为啥作者没有添加一种从 console.log 函数本身入手的检测方式。一个是自定义 console.log 加检测,一个是直接检测 console.log 函数本身是否是自己新定义的东西。结合一些反 monkey-patching 的方法,黑盒搞起来会更难入手(不过对于抓包干掉的话一样无效)

    上面我提到的方法本质上就是注入进 console.log 然后破坏 console.log 的默认机制。vconsole 原理差不多,自定义一个新的 console 绕开 devtool
    按照目前作者检测 vconsole 的方法来说,可能换一个作者没处理的 vconsole 也能绕开(性能检测可能会是个问题,但至少不会无解)
    zsdroid
        18
    zsdroid  
       2023-10-10 16:07:38 +08:00
    lete
        19
    lete  
       2023-10-10 16:45:30 +08:00
    Masoud2023
        20
    Masoud2023  
       2023-10-10 17:07:39 +08:00
    js 层面感觉做这种自欺欺人的东西根本没有什么意义。

    真喜欢搞这种那就上 wasm 啊,想办法拿 wasm 加密 js 层再吐给 v8 ,或者干脆你真牛逼就去 wasm 造核心逻辑。

    可惜喜欢提出这种问题的一般都不会这种“高端技术”🤣。
    mmdsun
        21
    mmdsun  
       2023-10-10 17:28:57 +08:00
    油猴注入个脚本就行。
    luckyrayyy
        22
    luckyrayyy  
       2023-10-10 17:41:54 +08:00
    这种真的有啥意义嘛,我个后端都能靠朴素的办法直接 chrome 停用 JS 进去
    Greatshu
        23
    Greatshu  
       2023-10-11 01:51:32 +08:00 via Android
    没法禁用,不过可以检测到 devtools 打开就开始挖矿,如果有用户系统的可以配置检测到 devtools 打卡就封号
    montaro2017
        24
    montaro2017  
       2023-10-11 16:54:06 +08:00
    生产环境上用过这个库,最后因为有反馈误触发,最后取消了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2623 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:23 · PVG 19:23 · LAX 04:23 · JFK 07:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.