突破Chrome反调试(debugger指令)

伊始

好多视频VIP解析站点,为了防止其他人爬取解析源,加入了反调试机制防止别人去分析他这个程序调用,反调试机制就是很简单的debugger指令。本身是用于正常调试使用,但是发现如果不开启Chrome的开发者工具,不会触发这个指令,于是通过该指令,衍生出了一系列的反调试方案。

比如

1
2
3
while (true) {
debugger;
}

卡到你起飞。

反反调试

其实反反调试非常简单,网上流传了很多条件断点法,忽略断点等方案,但是不是很有利于我们去分析整个脚本的执行流程。一是如果出现很多的debugger一个一个的去忽略太费事,如果忽略全部debugger有些地方你自己也没法下断分析了不是。于是我们通过代理方案,劫持数据从服务器下发到浏览器,将这些debugger全部patch掉就完事。在这里我使用了Python的一套MITM框架mitmproxy。当然,如果喜欢jJavaScript方案的可以使用anyproxy,阿里巴巴大佬开发的。

1
2
3
4
5
6
7
8
9
10
11
12
13
from mitmproxy import http

def response(flow):
if flow.request.path == '/2/player/ckey.js':
text = flow.response.get_text()
text = text.replace("debugger;", "")
flow.response.set_text(text)

if flow.request.path == '/update.js':
text = flow.response.get_text()
text = text.replace("de", "")
#print(text)
flow.response.set_text(text)

脚本非常简单,破坏掉反调试指令即可。