禁用 devtools 的奇技淫巧

2023-10-10 01:15:22 +08:00
 shadowfish0
发现一个神奇的库,可以禁用网站 devtools 达到保护源码的目的

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

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

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

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

抛开场景谈技术,没意义
liuidetmks
2023-10-10 08:46:41 +08:00
没什么意义,不如混淆或者 wasm
Blanke
2023-10-10 08:57:37 +08:00
没什么卵用
Masoud2023
2023-10-10 09:38:23 +08:00
与其在前端想方设法保护那点弱智代码,还不如在后端方向想想怎么做一些校验或者风控
zxcholmes
2023-10-10 12:23:14 +08:00
用 fiddler 之类代理,劫持请求,修改 response ,把这个 js 逻辑去掉,随便 devtools ,有人会说 https ?装根证书不就行了,https 改包对 fiddler 也不是难事
solobat
2023-10-10 13:42:04 +08:00
找一个或开发个浏览器扩展,劫持请求,修改 js url 或内容就行了
Rache1
2023-10-10 13:50:02 +08:00
IT 民科 😆
AtlantaANiu
2023-10-10 14:21:42 +08:00
主要还是利用了 log 的惰性执行这个特性,找个脚本注入插件,重写一下 conosle.log 函数就能绕过
zsh2517
2023-10-10 15:13:13 +08:00
用官方 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
2023-10-10 15:16:35 +08:00
@zsh2517 补充,这是建立在白盒测试的情况下,我能直接针对检测的方式入手。如果直接给我个用了它的网站(甚至还是混淆代码之后的),我感觉我可能还真弄不出来
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
2023-10-10 16:07:38 +08:00
lete
2023-10-10 16:45:30 +08:00
Masoud2023
2023-10-10 17:07:39 +08:00
js 层面感觉做这种自欺欺人的东西根本没有什么意义。

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

可惜喜欢提出这种问题的一般都不会这种“高端技术”🤣。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/980448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX