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

2021-04-23 12:57:26 +08:00
 loginv2
https://www.agefans.net/play/20160120?playid=3_1

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

禁止 F12 / 审查开启控制台,保护站点资源、减少爬虫和攻击的轻量方案,支持重定向、重写、自定义多种策略。
hafuhafu
2021-04-23 15:46:12 +08:00
好像效果不是很好。
chocovon
2021-04-23 15:48:28 +08:00
@loginv2 #10 在哪里改的禁用?我这边改成禁用后,如果不刷新页面,直接打开控制台还是会跳转……禁用 js 的设置好像不对已经打开的页面生效
Rwing
2021-04-23 15:51:34 +08:00
挺有意思哈
hcen1997
2021-04-23 16:03:26 +08:00
根据 @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
2021-04-23 16:17:16 +08:00
其实就是 2 点,1 循环 log 一个 toString 为自定义函数的变量,当这个 toString 被执行了,说明控制台打开了。
2 循环执行一个 debugger 的空函数,计算每次函数执行的间隔,如果执行间隔超过了 100ms,说明控制台被打开了,触发了断点。
cyrbuzz
2021-04-23 16:30:35 +08:00
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. 后面怎么操作不用多说了吧= =...

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

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

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

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

© 2021 V2EX