
UDPack è un offuscatore generico estensibile di pacchetti UDP.
UDPack è un offuscatore generico estensibile di pacchetti UDP. Lo scopo di questa applicazione è di porsi nel percorso di un flusso di dati UDP e offuscare, deoffuscare o altrimenti modificare i pacchetti.
È richiesto Python 3.4 o superiore, poiché questo script utilizza la libreria asyncio. Si consiglia vivamente di utilizzare l'ultima versione di Python. Le funzionalità di base non richiedono dipendenze di terze parti, ma XChaCha20Poly1305Packer richiede PyNaCl.
Avvertenza: Va sottolineato che lo scopo di questa applicazione è l'offuscamento, non la crittografia. Molte decisioni progettuali sono state (e saranno) deliberatamente prese contro le buone pratiche della crittografia, quindi con ogni probabilità i metodi di offuscamento non resisteranno all'analisi crittografica. NON fare affidamento sull'offuscamento per la riservatezza dei tuoi dati!!!
La versione corrente separa la parte di rete in una classe Manager separata e mantiene l'offuscamento nei packer, e utilizza funzioni factory di classe invece di mixin per produrre packer derivati. Ciò rende facile concatenare i packer, come dimostrato nel nuovo PipelineManager.
Questi packer sono disponibili:
NoOpPacker, CallSoonPacker: in realtà non offuscano nulla.
ConstDelayPacker, DelayPacker: ritarda ogni datagramma per un periodo di tempo fisso/variabile.
RandomDropPacker: elimina pacchetti in modo casuale.
ShufflePacker: mescola deterministicamente l'ordine dei byte di dati, usando il seed casuale come chiave.
XorMaskPacker, ReverseOnePlusPacker, XorPtrPosPacker: ispirati dalla "XOR Patch" per OpenVPN, questi 3 packer combinati possono emulare qualsiasi metodo di offuscamento in quella patch.
Nuovo: XChaCha20Poly1305Packer: Crittografa ogni datagramma usando XChaCha20Poly1305, rendendo il contenuto indistinguibile da byte casuali. 40 byte di overhead per ogni datagramma. Disponibile se PyNaCl è installato.
Un "packer" è una particolare implementazione di un metodo di offuscamento, che offusca i pacchetti in viaggio verso monte e deoffusca i pacchetti in viaggio verso valle. Un "unpacker" è la stessa cosa, implementata nella direzione opposta.
Tipicamente, un unpacker è configurato vicino al server, con il suo remote_addr che punta all'address:port di ascolto del server. Uno o più packer sono configurati vicino al/i client, puntando all'addr:port di ascolto dell'unpacker. Tutti i packer e gli unpacker dovrebbero avere configurazioni corrispondenti. Infine, i client si collegano all'addr:port di ascolto del packer. Il packer offusca tutto il traffico che riceve e lo invia all'unpacker, che lo deoffusca e lo inoltra al server.
raw data obfuscated data raw data
UDP Client ---------- Packer =============== Unpacker ---------- UDP server
upstream ==> <== downstream
Per questo: scrivere codice, non configurazione. Costruisci semplicemente la pipeline desiderata dai packer disponibili e istanzia il tuo packer. Vedi script.py per un esempio.