From 60934f5ab82b6f749d914f3079c45eda09e4ec41 Mon Sep 17 00:00:00 2001 From: bol-van Date: Fri, 16 Jan 2026 16:53:17 +0300 Subject: [PATCH] udpate docs --- docs/manual.en.md | 33 +++++++++++++++++++++++++++++++++ docs/manual.md | 5 +---- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/docs/manual.en.md b/docs/manual.en.md index c155669..337c209 100644 --- a/docs/manual.en.md +++ b/docs/manual.en.md @@ -182,6 +182,7 @@ - [fakeddisorder](#fakeddisorder) - [hostfakesplit](#hostfakesplit) - [tcpseg](#tcpseg) + - [oob](#oob) - [UDP Fooling](#udp-fooling) - [udplen](#udplen) - [dht\_dn](#dht_dn) @@ -3804,6 +3805,38 @@ No verdict is issued. Using `tcpseg`, you can perform `seqovl` without segmentation by using markers "0,-1". To replace the current dissect, it can be combined with `drop`. +### oob + +``` +function oob(ctx, desync) +``` + +- arg: [standard fooling](#standard-fooling) +- arg: [standard ipid](#standard-ipid) +- arg: [standard ipfrag](#standard-ipfrag) +- arg: [standard reconstruct](#standard-reconstruct) +- arg: [standard rawsend](#standard-rawsend) +- arg: char - one OOB character +- arg: byte - one OOB byte 0..255 +- arg: urp - urgent pointer [marker](#markers), "b" or "e". "b" is default. + +Function intercepts TCP handshake shifting sequence numbers one byte to the left then inserts OOB byte into the first non-empty payload. +After it's done it executes [instance cutoff](#instance_cutoff). + +Target OS throws away OOB byte from the stream but DPI may analyze message with OOB byte as it's part thus breaking the message. + +- OOB is obsolete but still supported in most OS mechanism. There are two RFCs. The older one assumes that th_urp points to the OOB byte, +the newer one to the next byte. Therefore, the value th_urp=0 is invalid according to the new standard, but it can still work. +To enable it, specify "urp=b". +- "urp=e" inserts an OOB byte after the very last byte of the payload - generally useless for DPI bypass, since DPI gets the entire original message. +- Requires redirection of incoming traffic within `--in-range=-s1` +- Cannot be filtered by payload because after the start it's not possible to stop and not to insert the byte. Inserting a byte without OOB breaks the data. +- Hostlist filtering is only possible with `--ipcache-hostname`. +- Can't work with functions that resend modified payload. multisplit, multidisorder, fakedsplit, fakeddisorder, etc will send duplicates without OOB. +- If the payload is [multi-segment](#handling-multi-packet-payloads), the entire [reasm](#handling-multi-packet-payloads) is sent. OOB is inserted into the segment where urp hits. +In this segment the th_urp is normalized by segment offset, the TH_URG flag is set. The rest of the parts are sent as is. The function drops the whole replay then [cuts itself off](#instance_cutoff). + + ## UDP Fooling There are far fewer options for UDP than for TCP due to the simplicity of the protocol. There isn't much that can be done with it. diff --git a/docs/manual.md b/docs/manual.md index 4b49d46..388dc39 100644 --- a/docs/manual.md +++ b/docs/manual.md @@ -4005,7 +4005,6 @@ function oob(ctx, desync) - arg: [standard rawsend](#standard-rawsend) - arg: char - 1 символ oob - arg: byte - числовое значение байта OOB 0..255 -- arg: drop_ack - дропать пустой ACK в ответ на SYN,ACK - arg: urp - позиционный [маркер](#маркеры) для urgent pointer, "b" или "e". по умолчанию - "b" Функция перехватывает TCP handshake, сдвигая sequence влево на 1 байт, затем вставляет 1 байт OOB в первый отсылаемый пейлоад и отсылает его. @@ -4022,9 +4021,7 @@ function oob(ctx, desync) - Фильтрация по хостлистам возможна только при `--ipcache-hostname`. - Не может работать с функциями, предполагающими отправку пейлоада - multisplit, multidisorder, fakedsplit, fakeddisorder и тд. Они будут работать, но будут слать дубль без OOB. - Если пейлоад [многопакетный](#особенности-приема-многопакетных-пейлоадов) - отсылается весь [reasm](#особенности-приема-многопакетных-пейлоадов). OOB вставляется в тот сегмент, куда попал urp. -В этом сегменте th_urp нормализуется по смещению сегмента, выставляется флаг TH_URG. Остальные части шлются как есть. Функция дропает последующие части replay, затем уходит в cutoff по обоим направлениям. -- drop_ack дропает пустой пакет с ACK в ответ на SYN,ACK - тот, что имеет sequence=1. В Windows для drop_ack необходим параметр --wf-tcp-empty=1. - +В этом сегменте th_urp нормализуется по смещению сегмента, выставляется флаг TH_URG. Остальные части шлются как есть. Функция дропает весь replay, затем уходит в cutoff по обоим направлениям. ## Дурение udp