Новое дополнение к split и disorder. Опция --dpi-desync-split-seqovl.
Это достаточно сложная для понимания концепция, если не представляешь себе хорошо как работает tcp протокол.
Если сказать по-простому, то это замешивание фейковых данных и реальных в разделяемые сегменты tcp. Замешивание идет через игру с sequence numbers таким образом, чтобы сервер воспринял лишь оригинал, а DPI было очень сложно разобраться где оригинал, а где мусор.
Этот вариант может не требовать отдельных фейк пакетов, а следовательно TTL и fooling.
На ТСПУ игра с sequence обычно вызывает зависание http, но работает на https.
Полное описание из readme.
seqovl добавляет в начало первой отсылаемой части оригинального пакета (1 часть для split и 2 часть для disorder) seqovl байт со смещенным в минус sequence number на величину seqovl.
В случае split2 расчет идет на то, что предыдущий отсыл, если он был, уже попал в сокет серверного приложения, поэтому новая пришедшая часть лишь частично находится в пределах текущего окна (in-window). Спереди фейковая часть отбрасывается, а оставшаяся часть содержит оригинал и начинается с начала window, поэтому попадает в сокет. Серверное приложение получает все, что реально отсылает клиент, отбрасывая фейковую out-of-window часть. Но DPI не может этого понять, поэтому у него происходит sequence десинхронизация.
Для disorder2 overlap идет на 2-ю часть пакета. Обязательно, чтобы seqovl был меньше split_pos, иначе все отосланное будет передано в сокет сразу же, включая фейк, ломая протокол прикладного уровня. При соблюдении этого условия 2-я часть пакета является полностью in-window, поэтому серверная ОС принимает ее целиком, включая фейк. Но поскольку начальная часть данных из 1 пакета еще не принята, то фейк и реальные данные остаются в памяти ядра, не отправляясь в серверное приложение. Как только приходит 1-я часть пакета, она переписывает фейковую часть в памяти ядра. Ядро получает данные из 1 и 2 части, поэтому далее идет отправка в сокет приложения. Таково поведение всех unix ОС - оставлять последние принятые данные.
Для windows серверов может быть наоборот, поэтому не факт, что такой вариант будет на них работать. Метод позволяет обойтись без fooling и TTL. Фейки перемешаны с реальным данными.
split/disorder вместо split2/disorder2 по-прежнему добавляют дополнительные отдельные фейки.
Как показывает практика, на https оно может не работать на TLS1.2, поскольку сечется ответ сервера с сертификатом. Только --wssize 1:6 позволяет это обойти.