
UDPack — это расширяемый универсальный обфускатор UDP-пакетов.
UDPack — это расширяемый универсальный обфускатор UDP-пакетов. Цель этого приложения — размещаться на пути потока UDP-данных и обфусцировать, деобфусцировать или иным образом модифицировать пакеты.
Требуется Python 3.4 или выше, так как этот скрипт использует библиотеку asyncio. Настоятельно рекомендуется использовать последнюю версию Python. Базовые функции не требуют сторонних зависимостей, но XChaCha20Poly1305Packer требует PyNaCl.
Предупреждение: Следует подчеркнуть, что цель этого приложения — обфускация, а не шифрование. Многие проектные решения были (и будут) сознательно приняты вопреки лучшим практикам криптографии, поэтому, скорее всего, методы обфускации не устоят перед криптоанализом. НЕ ПОЛАГАЙТЕСЬ на обфускацию для конфиденциальности ваших данных!!!
Текущая версия разделяет сетевую часть на отдельный класс Manager и оставляет обфускацию в упаковщиках, а для создания производных упаковщиков использует фабричные функции вместо примесей. Это упрощает объединение упаковщиков в цепочки, как показано в новом PipelineManager.
Доступны следующие упаковщики:
NoOpPacker, CallSoonPacker: фактически ничего не обфусцируют.
ConstDelayPacker, DelayPacker: задерживает каждую датаграмму на фиксированное / переменное время.
RandomDropPacker: отбрасывает пакеты случайным образом.
ShufflePacker: детерминистически перемешивает порядок байтов данных, используя случайное зерно в качестве ключа.
XorMaskPacker, ReverseOnePlusPacker, XorPtrPosPacker: вдохновлены «XOR-патчем» для OpenVPN, эти 3 упаковщика при совместном использовании могут эмулировать любой метод обфускации из этого патча.
Новое: XChaCha20Poly1305Packer: шифрует каждую датаграмму с помощью XChaCha20Poly1305, делая содержимое неотличимым от случайных байтов. Накладные расходы — 40 байт на каждую датаграмму. Доступен, если установлен PyNaCl.
«Упаковщик» (packer) — это конкретная реализация метода обфускации, обфусцирующая пакеты, движущиеся в восходящем направлении, и деобфусцирующая пакеты, движущиеся в нисходящем направлении. «Распаковщик» (unpacker) — то же самое, но реализованное в обратном направлении.
Обычно распаковщик настраивается рядом с сервером, а его remote_addr указывает на прослушиваемый address:port сервера. Один или несколько упаковщиков настраиваются рядом с клиентами и указывают на прослушиваемый addr:port распаковщика. Конфигурации всех упаковщиков и распаковщиков должны совпадать. Наконец, клиенты подключаются к прослушиваемому addr:port упаковщика. Упаковщик обфусцирует весь принимаемый трафик и отправляет его распаковщику, который деобфусцирует его и пересылает серверу.
исходные данные обфусцированные данные исходные данные
UDP-клиент ---------- Упаковщик =============== Распаковщик ---------- UDP-сервер
восходящий поток ==> <== нисходящий поток
Пишите код, а не конфигурацию. Просто соберите нужный конвейер из доступных упаковщиков и создайте экземпляр упаковщика. См. пример в script.py.