UDPack 是一个可扩展的通用 UDP 数据包混淆器。该应用的目的是位于 UDP 数据流路径中,对数据包进行混淆、去混淆或以其他方式修改。
需要 Python 3.4 或更高版本,因为此脚本使用了 asyncio 库。始终强烈建议使用最新的 Python 版本。基本功能无需第三方依赖,但 XChaCha20Poly1305Packer 需要 PyNaCl。
警告: 必须强调,本应用的目的在于混淆,而非加密。许多设计决策有意违背了密码学最佳实践,因此混淆方法很可能无法抵抗密码分析。切勿依赖此混淆来保障数据的机密性!!!
当前版本将网络部分分离为独立的 Manager 类,并将混淆保留在封装器中,使用类工厂函数代替混入(mixin)来生成派生封装器。这使得封装器可以轻松链式组合,如新的 PipelineManager 所示。
可用的封装器:
NoOpPacker、CallSoonPacker:实际上不混淆任何内容。
ConstDelayPacker、DelayPacker:将每个数据报延迟固定/可变的时间。
RandomDropPacker:随机丢弃数据包。
ShufflePacker:使用随机种子作为密钥,确定性地打乱数据字节顺序。
XorMaskPacker、ReverseOnePlusPacker、XorPtrPosPacker:受 OpenVPN 的“XOR 补丁”启发,这三个封装器组合后可模拟该补丁中的任意混淆方法。
新增:XChaCha20Poly1305Packer:使用 XChaCha20Poly1305 加密每个数据报,使其内容与随机字节无法区分。每个数据报增加 40 字节开销。需安装 PyNaCl。
“封装器”(packer)是一种特定的混淆方法实现,用于混淆上行数据包并去混淆下行数据包。“解封装器”(unpacker)是相同的东西,但方向相反。
通常,解封装器设置在服务器附近,其 remote_addr 指向服务器的监听 address:port。一个或多个封装器设置在客户端附近,指向解封装器的监听 addr:port。所有封装器和解封装器应具有匹配的配置。最后,客户端连接到封装器的监听 addr:port。封装器混淆其接收到的所有流量,并将其发送到解封装器,解封装器去混淆后转发到服务器。
原始数据 混淆数据 原始数据
UDP 客户端 ---------- 封装器 =============== 解封装器 ---------- UDP 服务器
上行 ==> <== 下行
对于此工具:编写代码,而非配置。只需从可用封装器中构建所需的管道,并实例化封装器。参见 script.py 示例。