chromium魔改——CDP(Chrome DevTools Protocol)检测01

环境检测网站,www.browserscan.net/bot-detecti...,这是一个检测机器人的网站,检测点很多,可以用来验证自己当前的环境是否正常。

正常打开的状态是这样的,说名环境正常,测试通过

这是非正常状态,就会显示Test Results:Robot,说明知道我们在试图调试

当我们打开网站之后,再打开devtool调试工具,然后再刷新,并且devtool与窗口即便分离状态下,它依然能检测到,通过分析网站源码,发现他的检测位置是在这里,至于如何分析出他的检测点,这里就先略过,不是本章要说的内容。

实现CDP检测

以下是一个简化案例,还原了它的检测过程,我们先通过正向的角度分析完,然后再通过逆向去绕过。

将下面这段代码保存为cdp.html

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=0">
    <title>Chrome DevTools Protocol Detection</title>
</head>
<body>
    <div id="cdp">devTool:<b id="status"></b></div>
    <script>
        const hook = new Error()
        let num = -1
        Object.defineProperty(hook, "stack", {
            get: function () {
                num += 1
                document.getElementById('status').innerText = num ? '打开了' : '关闭了'
                return num;
            }
        });
        function isOpenDevTool() {
            num = -1
            console.debug(hook);
            hook.stack
            requestAnimationFrame(isOpenDevTool);
        }
        requestAnimationFrame(isOpenDevTool);
    </script>
</body>
</html>

正常浏览器中,当我们打开devtool的时候,他就会检测到打开,关闭的时候就会显示关闭

这段代码的检测能力非常强,我们尝试用自动化框架去打开cdp.html,即便我们不打开devtool,他也会检测到你是机器人。

通过查阅MD文档,了解一下console.debug这个API的原理

知道了原理之后,我们就可以修改chromium的源码实现绕过了。

源码怎么找,思路是这样的,首先你要确定这个api是属于哪一类,console我们知道,他是一个很底层的api,所有什么浏览器也好,electron,nodejs也好,他都有一个共同的引擎,就是v8,所以,我们直接在chromium的源码中再他的v8文件夹下找就可以,然后找到console的实现,再进行分析和修改。

先根据官方目录去查关键字,然后一个一个检查

修改的位置在这里

bash 复制代码
/src/v8/src/inspector/v8-console.cc

我们只需要空实现这个函数即可,直接将实现部分注释掉

然后运行以下代码完成编译

sh 复制代码
autoninja -C out/Default chrome

然后再通过自动化程序测试,可以看到是正常了

相关推荐
特立独行的猫A2 分钟前
C++ 异步编程:std::future 与 std::promise 详解(含 RPC 客户端实现实践)
c++·后端
Anymous7 分钟前
支付为什么要验两次签?——从渠道验签到服务间信任边界与 RSA2
后端
福兮说8 分钟前
Base64 遇上中文和 emoji:btoa 报错、解出一串 %E7、URL 里加号变空格,六个坑一次说清
前端·javascript·base64·编码
南归北隐27 分钟前
Spring AI Alibaba Graph框架实现Tools工具调用
java·后端·spring·spring ai·spring ai tools
IMPYLH31 分钟前
HTML 的 <title> 元素
前端·javascript·html
开开心心就好35 分钟前
视频模糊怎么修复?免费工具支持批量处理
java·前端·人工智能·智能手机·pdf·excel
变与不变80635 分钟前
jspost请求详解
前端·javascript
茉莉玫瑰花茶1 小时前
GO [ 并发 · 调度器 ]
开发语言·后端·golang
zhangzeyuaaa1 小时前
深入理解 Ruby 可变对象与不可变对象的原理、坑点与最佳实践
开发语言·后端·ruby
wdfk_prog1 小时前
Wi-Fi Direct 教程 05:control socket 与 eloop——P2P_FIND 怎样进入 wpa_supplicant 命令解析器
运维·服务器·后端·网络协议·ubuntu·p2p·wifi-direct