From 59f79847c264b2a8623f3eabb999efa0ee77bd08 Mon Sep 17 00:00:00 2001 From: ruti <> Date: Sat, 15 Mar 2025 14:38:01 +0300 Subject: [PATCH] Ignore extra bytes after tlsrec in fake payload --- packets.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packets.c b/packets.c index 04a7957..208370f 100644 --- a/packets.c +++ b/packets.c @@ -118,14 +118,13 @@ static size_t find_ext_block(const char *data, size_t size) } -static int merge_tls_records(char *buffer, ssize_t n) +static void merge_tls_records(char *buffer, ssize_t n) { if (n < 5) { - return 0; + return; } uint16_t full_sz = 0; uint16_t r_sz = ANTOHS(buffer, 3); - int i = 0; while (1) { full_sz += r_sz; @@ -140,11 +139,9 @@ static int merge_tls_records(char *buffer, ssize_t n) } memmove(buffer + 5 + full_sz, buffer + 10 + full_sz, n - (10 + full_sz)); - i++; } SHTONA(buffer, 3, full_sz); SHTONA(buffer, 7, full_sz - 4); - return i * 5; } @@ -228,8 +225,8 @@ static void resize_sni(char *buffer, ssize_t n, int change_tls_sni(const char *host, char *buffer, ssize_t n, ssize_t nn) { - int avail = merge_tls_records(buffer, n); - avail += (nn - n); + merge_tls_records(buffer, n); + int avail = nn < n ? nn - n : 0; uint16_t r_sz = ANTOHS(buffer, 3); r_sz += avail; @@ -285,6 +282,8 @@ int change_tls_sni(const char *host, char *buffer, ssize_t n, ssize_t nn) copy_name(buffer + sni_offs + 9, host, new_sz); if (avail >= 4) { + avail += remove_tls_ext(buffer, n, skip, 0x0015); + SHTONA(buffer, 5 + r_sz - avail, 0x0015); SHTONA(buffer, 5 + r_sz - avail + 2, avail - 4); memset(buffer + 5 + r_sz - avail + 4, 0, avail - 4);