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, 内核驱动, 移动应用逆向分析, 网络协议, 网络配置提取, 防御绕过