返回

文章详情

通过在MitM代理后使用GitHub Copilot我学到的东西

Hacker News2026年8月11日 10:40

你好,我是拉法埃尔——每周我都会通过建立AI系统的工程师的视角来介绍最近遇到的有趣挑战和发展。订阅以获取每周的期刊 👇 在过去的几年中,出现了一大批基于AI的应用程序和AI功能。像Slack这样的老牌玩家迅速为其产品添加了AI功能。对于像Cursor、Notion、ChatGPT Desktop和Claude Desktop这样的AI原生应用,AI一直是其存在的根本原因。这些应用发布的AI功能越多,我就越想研究它们的内部工作原理。希望至少能揭开一些运行机制,至少我能学到一两件关于桌面应用开发的知识。巧合的是,我发现我每个月开始越来越早地耗尽Copilot的积分。这让我选择了一个主要候选者进行实验。我决定深入探索VS Code和Copilot。以上提到的所有应用共同之处在于,它们都是使用Electron构建的。Electron是一个JavaScript框架,它帮助开发者构建和分发桌面应用程序。通俗来说,它通过将Node.js运行时与HTML、CSS和JavaScript工件捆绑在一起,并通过Chromium进行渲染来工作。使用Electron的应用列表。我知道,这个列表很长。来源 这消除了在不同平台上使用本机语言编写多个代码库的需要(例如,Windows使用C#,macOS使用Swift),使开发者更容易从单一代码库创建多个平台上运行的桌面应用程序。(原生模块和某些打包步骤仍然通常需要每个平台的处理,但大部分应用逻辑是共享的。)因为它们共享Electron,所以它们共享一个粗略的架构,这意味着我在一个应用中学习到的任何知识都应该可以转移到其他应用上。Lighthouse Newsletter是免费的 :) 如果你喜欢我的工作,请与可能感兴趣的朋友和同事共享 👇 分享 我最初的想法是快速浏览VS Code的源代码,看看它是否能回答我的问题。问题是我还没有一整套问题——在数百万行代码中寻找它们将花费我太多时间或太多积分。源代码告诉你一个应用可以做什么;了解它在运行时实际上做了什么更具挑战性。尤其是当你甚至还不知道自己在寻找什么时。还有第二个问题。VS Code是我开始的应用中的一个例外:它的源代码(或至少大部分)是开放的。而Claude、ChatGPT、Codex、Notion和Slack并非如此。这开始让我朝反向工程的方向推进:先被动观察流量,让请求和响应告诉我哪些问题值得询问,然后再去源代码确认(或反驳)我所看到的。这意味着我需要深入研究Electron的架构和网络栈——这些技能在之后会有所帮助。到现在为止,我们知道Electron应用程序是与Chromium一起交付的。浏览器为应用程序的基于Web的用户界面提供渲染引擎,但它也提供渲染进程可以用来进行HTTP和WebSocket连接的网络栈。这是使应用程序能够与远程后端通信的常见(且推荐的)选项,但并不是唯一的。应用程序还可以使用Node的http/https/fetch发起HTTP请求。当你试图拦截它时,请求采取的路径变得重要。在某些情况下,例如在VS Code的情况下,应用程序将具有解耦的架构,其中有一组独立的进程作为扩展主机。这有助于在不同的职责之间保持清晰的界限;在VS Code的例子中,UI、代码IDE功能和插件/扩展之间有明确的界限。拦截应用程序网络流量的经典方法之一是搭建一个代理服务器,并配置该应用程序使用它。代理充当中间人(MITM):它拦截来自客户端的HTTP请求,将其转发给服务器,并将服务器的响应传回客户端。有趣的是,这种类似的方法在企业网络环境中用于流量检查是相当常见的,尤其是在高度监管的行业中。正好,被广泛使用的开源工具之一叫做mitmproxy,我们将在接下来的步骤中使用它。一个重要的细节是,如今大部分网络流量通过安全HTTP(HTTPS)发生。这意味着流量通过TLS加密。通过信任mitmproxy本地生成的证书授权(CA),客户端可以接受mitmproxy为每个目标动态生成的证书。这样,你得到的不是单一的端到端加密连接,而是两个连接:一个在应用程序和mitmproxy之间,另一个在mitmproxy和目标服务器之间。因此,mitmproxy可以解密请求。

赞助内容

NordVPN Next-gen Antivirus

本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。

请我喝杯咖啡