
UDPack es un ofuscador genérico y extensible de paquetes UDP.
UDPack es un ofuscador genérico de paquetes UDP extensible. El propósito de esta aplicación es situarse en el camino de un flujo de datos UDP, y ofuscar, desofuscar o modificar de otro modo los paquetes.
Se requiere Python 3.4 o superior, ya que este script utiliza la librería asyncio. Siempre se recomienda encarecidamente usar la última versión de Python. Las funciones básicas no requieren dependencias de terceros, pero XChaCha20Poly1305Packer necesita PyNaCl.
Advertencia: Hay que destacar que el propósito de esta aplicación es la ofuscación, no el cifrado. Muchas decisiones de diseño se han tomado (y se tomarán) deliberadamente en contra de las buenas prácticas criptográficas, por lo que es muy probable que los métodos de ofuscación no resistan un análisis criptográfico. NO confíe en la ofuscación para la confidencialidad de sus datos.
La versión actual separa la parte de red en una clase Manager independiente y mantiene la ofuscación en los packers, y utiliza funciones de fábrica de clases en lugar de mixins para producir packers derivados. Esto facilita el encadenamiento de packers, como se demuestra en el nuevo PipelineManager.
Estos packers están disponibles:
NoOpPacker, CallSoonPacker: en realidad no ofuscan nada.
ConstDelayPacker, DelayPacker: retrasa cada datagrama durante un tiempo fijo/variable.
RandomDropPacker: descarta paquetes aleatoriamente.
ShufflePacker: reordena el orden de los bytes de datos de forma determinista, usando la semilla aleatoria como clave.
XorMaskPacker, ReverseOnePlusPacker, XorPtrPosPacker: inspirados en el "XOR Patch" para OpenVPN, estos 3 packers combinados pueden emular cualquier método de ofuscación de ese parche.
Nuevo: XChaCha20Poly1305Packer: Cifra cada datagrama usando XChaCha20Poly1305, haciendo que el contenido sea indistinguible de bytes aleatorios. 40 bytes de sobrecarga por datagrama. Disponible si PyNaCl está instalado.
Un "packer" es una implementación particular de un método de ofuscación, que ofusca los paquetes que viajan upstream y desofusca los paquetes que viajan downstream. Un "unpacker" es lo mismo, implementado en la dirección opuesta.
Normalmente, un unpacker se configura cerca del servidor, con su remote_addr apuntando al address:port de escucha del servidor. Uno o más packers se configuran cerca del cliente (o clientes), apuntando al addr:port de escucha del unpacker. Todos los packers y unpackers deben tener configuraciones coincidentes. Finalmente, los clientes se conectan al addr:port de escucha del packer. El packer ofusca todo el tráfico que recibe y lo envía al unpacker, que lo desofusca y lo reenvía al servidor.
raw data obfuscated data raw data
UDP Client ---------- Packer =============== Unpacker ---------- UDP server
upstream ==> <== downstream
Para este caso: escribir código, no configuración. Simplemente construya su pipeline deseado a partir de los packers disponibles e instancie su packer. Vea script.py como ejemplo.