Wack0/librefreevpn

GitHub: Wack0/librefreevpn

逆向工程驱动的 .NET 工具库,从「免费 VPN」移动应用的后端服务器提取原始 VPN 配置,使用户无需官方客户端即可在任意设备上使用这些 VPN 节点。

Stars: 27 | Forks: 0

# librefreevpn 获取“免费 VPN”移动应用所使用的 VPN 配置,无需信任或运行它们的官方客户端。 可在任何支持这些协议客户端的设备上使用这些 VPN。 这些客户端中实现的任何用于绕过 DPI 等的自定义代码(例如 websocket + 域前置 CDN)在此并未实现。 库的目标框架是 .NET Standard 2.0,命令行应用程序的目标框架是 .NET Core 3.1、.NET 6、.NET 8 和 .NET Framework 4.7.2,winforms 应用程序的目标框架是 .NET 6、.NET 8 和 .NET Framework 4.7.2。 (所有针对 .NET Framework 4.7.2 的构建版本也应该能在 mono 上运行。) ## 为什么? 我是一名逆向工程人员。有时候我会觉得无聊,而“免费 VPN”移动应用是挺有趣的逆向分析目标。 它们通常是典型 VPN/混淆代理协议客户端(或在某些情况下为 SSH 隧道)的套壳应用,从某个远程 C2 服务器获取配置。 因此,我决定编写一个小型库,重新实现这些客户端的核心功能(即获取配置)。并实现了一些示例(包含 Android 和 iOS 目标平台)。 ## 库文档 获取 `VPNProviders.Providers`,运行你想要的任何 LINQ 查询,然后调用 `GetServersAsync()` 来实际发起网络请求,从该提供商获取配置。 请注意,各种字符串都经过了轻微的混淆处理,以此来阻止他人使用搜索引擎等工具在此处寻找“有趣”的常量字符串。 如果 C2 是由相关样本的开发者运行或为其运行的服务器,则 `RiskyRequests` 会被设置为 true。如果不为 true,则说明 C2 是第三方服务器,例如大型 Git 托管平台、博客、社交网络等。 ## 命令行文档 提供了命令行帮助,请查看 `freevpnc help` 等命令。 如果使用了 `-r` 选项,`freevpnc list` 将只显示包含风险请求的提供商,而 `freevpnc getall` 将只发起风险请求。 然而,`freevpn get` 始终会发起风险请求(如果该提供商需要的话),因为在这种情况下,要获取配置的提供商是在命令行中明确指定的。 ### 示例 获取所有不带风险请求的 OpenVPN 配置:`freevpnc getall -i openvpn` 获取所有不带风险请求的 OpenVPN 和 v2ray 配置:`freevpnc getall -i openvpn v2ray` 获取除 OpenVPN 以外的所有配置,且不带风险请求:`freevpnc getall -e openvpn` 列出所有提供 OpenVPN 服务器或 SSH 隧道的提供商,包括那些会发起风险请求的提供商:`freevpnc list -i openvpn ssh -r` 获取来自 `BeautyBird` 提供商的所有配置:`freevpnc get BeautyBird` ## 用户界面文档 - 从左侧框中选择想要的协议 - 可选地,启用风险请求 - 从右侧框中选择想要的提供商 - 点击“获取”按钮 - 选择相应的服务器,并将配置复制到剪贴板或保存到文件中。 ## 许可证 本仓库中的所有代码均采用 AGPLv3 许可证,尽管其中的 XXTEA 实现源自 (采用 MIT 许可证)。 选择 AGPLv3 许可证是为了阻止某些特定人群使用此代码库。 如果你想在任何类型的“盈利站点”或充满广告的移动应用中使用此代码库——说的就是你!
标签:VPN, 内核驱动, 移动应用逆向分析, 网络协议, 网络配置提取, 防御绕过