【问题标题】:How to prevent a website from detecting Fiddler如何防止网站检测到 Fiddler
【发布时间】:2020-06-01 13:22:20
【问题描述】:

问题标题可能没有涵盖整个主题,因为我做了很多研究并发现了许多奇怪的东西。

首先,我要实现的是某种类型的网站客户端,它可以代表用户运行(不做任何非法的事情,只是优化用户的一些工作流程)。我已经为许多网站做了这个并且效果很好。但是,现在的有一个问题。

通常,如果我遇到验证码,我只会打开一个嵌入式 Chrome 窗口供用户传递它。但是,对于我正在谈论的网站,它并没有帮助,因为验证码没有显示在浏览器中,而是在我模仿浏览器正在发送的请求时发送给我。

所以我尝试调查 Chrome 发送的请求和我的应用程序使用 Fiddler 发送的请求之间的区别。 但是,如果我启用 Fiddler,即使是真正的 Chrome 发送的请求也会面临相同的验证码。

我在 Chrome 中禁用了 HTTP/2、SPDY 和 IPv6,因为我认为这可能会有所不同。它没有帮助。我尝试使用 Chrome 开发工具比较 Chrome 发送的请求 - 没有区别,它们都使用 HTTP/1.1,都具有完全相同的标头,完全相同的 cookie(或没有 cookie,没有区别) .但是每当我启用 Fiddler 时,网站都会以验证码响应。

这是我第一次遇到这样的事情,我几乎准备把头撞到墙上,因为我看不出网站有任何可能的方式来理解请求正在被 Fiddler 代理因为它没有添加任何自定义标题或其他任何内容。

除非网站以某种方式检测到设置 HTTPS 连接的确切方式,这听起来很疯狂......这应该是不可能的。

寻求有关如何进一步调试的建议。

更新:

我没有找到解决方案,也不了解相关网站如何检测来自 Chrome 的直接连接,但设法找到了解决方法:

我正在获取带有我的代码从网站接收的验证码的页面,并将 CEF 收到的实际页面替换为动态验证码页面,从而允许用户通过它。

由于它没有回答原始问题,因此我不会将其作为答案发布,并将保留此问题。

【问题讨论】:

    标签: http https fiddler chromium-embedded


    【解决方案1】:

    网站本身通常不会检测到任何东西。验证码通常由 Cloudflare 等反 Dos 保护服务商提供。

    根据我的经验,此类系统通过 JavaScript(获取使用的 Web 浏览器名称、版本和使用的操作系统)将浏览器指纹系统与 HTTPS (TLS) 级别的检测相结合:

    在 TLS 协议握手中,客户端发送一条 CLIENT_HELLLO 消息,其中包含有关受支持的 TLS 版本和密码套件的信息以及某些 TLS 扩展中的其他附加数据(例如,如果它支持 HTTP/2)。

    可以再次对这次握手进行指纹识别。例如,如果您现在通过 Fiddler 使用 Firefox,浏览器指纹会显示 Firefox,但 Fiddler 是一个 .Net 应用程序,因此指纹表明使用了 Windows schannel TLS 库。两个指纹不匹配,因此保护系统会将您重定向到验证码对话框。

    【讨论】:

    • 这是有道理的,我曾怀疑过类似的事情。所以基本上唯一的解决方法是实现我自己的 TLS 库,它可以模仿真正的 Chrome 握手......听起来像一个非常复杂的任务。
    • @mephisto 有多种方法:在发送/接收之前直接在 Chrome 中操作流量。或者有时在代理中相应地配置支持的 tls 版本和密码套件就足够了。一些代理允许这样做(不确定这是否可以在 Fiddler 中完成)。
    • 谢谢。我会将您的答案标记为已接受,因为它回答了我问题的主要部分,并提供了有关进一步查看的信息:)
    猜你喜欢
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-16
    • 2010-09-19
    相关资源
    最近更新 更多