mirror of
https://github.com/hufrea/byedpi.git
synced 2025-03-14 12:58:48 +03:00
Multiple tlsrec positions
This commit is contained in:
parent
2e1f4e646a
commit
ff472f6448
6 changed files with 75 additions and 53 deletions
28
desync.c
28
desync.c
|
@ -205,15 +205,27 @@ int desync(int sfd, char *buffer, size_t bfsize,
|
|||
}
|
||||
}
|
||||
else if (type == IS_HTTPS && params.tlsrec) {
|
||||
int o = params.tlsrec_pos;
|
||||
if (params.tlsrec_sni) {
|
||||
o += (host - buffer - 5);
|
||||
struct part *part = params.tlsrec;
|
||||
int i = 0;
|
||||
long lp = 0;
|
||||
while (part) {
|
||||
long pos = part->pos + i * 5;
|
||||
if (params.tlsrec_sni) {
|
||||
pos += (host - buffer - 5);
|
||||
}
|
||||
else if (pos < 0) {
|
||||
pos += n;
|
||||
}
|
||||
LOG(LOG_S, "tlsrec: pos=%ld, n=%ld\n", pos, n);
|
||||
if (!part_tls(buffer + lp,
|
||||
bfsize - lp, n - lp, pos - lp)) {
|
||||
break;
|
||||
}
|
||||
n += 5;
|
||||
lp = pos + 5;
|
||||
i++;
|
||||
part = part->next;
|
||||
}
|
||||
else if (o < 0) {
|
||||
o += n;
|
||||
}
|
||||
LOG(LOG_S, "tlsrec: pos=%d, n=%ld\n", o, n);
|
||||
n = part_tls(buffer, bfsize, n, o);
|
||||
}
|
||||
|
||||
if (params.custom_ttl) {
|
||||
|
|
84
main.c
84
main.c
|
@ -47,7 +47,6 @@ struct params params = {
|
|||
.custom_ttl = 0,
|
||||
.mod_http = 0,
|
||||
.tlsrec = 0,
|
||||
.tlsrec_pos = 0,
|
||||
.tlsrec_sni = 0,
|
||||
.de_known = 0,
|
||||
|
||||
|
@ -84,9 +83,9 @@ const char help_text[] = {
|
|||
" -j, --fake-http <file> Set custom fake packet\n"
|
||||
" -n, --tls-sni <str> Change SNI in fake CH\n"
|
||||
#endif
|
||||
" -e, --oob-data <file> Set custom oob bytes\n"
|
||||
" -e, --oob-data <file> Set custom OOB data\n"
|
||||
" -M, --mod-http <h,d,r> Modify http: hcsmix,dcsmix,rmspace\n"
|
||||
" -r, --tlsrec <offset> Make 2 TLS records\n"
|
||||
" -r, --tlsrec <offset> Make TLS record at offset\n"
|
||||
" -L, --tlsrec-at-sni Add SNI offset to tlsrec position\n"
|
||||
};
|
||||
|
||||
|
@ -196,6 +195,44 @@ int get_default_ttl()
|
|||
}
|
||||
|
||||
|
||||
struct part *add_part(struct part **root, long val)
|
||||
{
|
||||
struct part *part = malloc(sizeof(struct part));
|
||||
if (!part) {
|
||||
uniperror("malloc");
|
||||
return 0;
|
||||
}
|
||||
part->pos = val;
|
||||
|
||||
struct part *p = *root, *v = 0;
|
||||
if (!p) {
|
||||
*root = part;
|
||||
return part;
|
||||
}
|
||||
while (p) {
|
||||
if (val < p->pos) {
|
||||
if (v) {
|
||||
part->next = p;
|
||||
v->next = part;
|
||||
}
|
||||
else {
|
||||
part->next = *root;
|
||||
*root = part;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!p->next) {
|
||||
p->next = part;
|
||||
part->next = 0;
|
||||
break;
|
||||
}
|
||||
v = p;
|
||||
p = p->next;
|
||||
}
|
||||
return part;
|
||||
}
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
#ifdef _WIN32
|
||||
|
@ -316,9 +353,8 @@ int main(int argc, char **argv)
|
|||
invalid = 1;
|
||||
break;
|
||||
}
|
||||
struct part *part = malloc(sizeof(struct part));
|
||||
struct part *part = add_part(¶ms.parts, val);
|
||||
if (!part) {
|
||||
uniperror("malloc");
|
||||
return -1;
|
||||
}
|
||||
switch (rez) {
|
||||
|
@ -330,34 +366,6 @@ int main(int argc, char **argv)
|
|||
break;
|
||||
case 'f': part->m = DESYNC_FAKE;
|
||||
}
|
||||
part->pos = val;
|
||||
|
||||
if (!params.parts) {
|
||||
params.parts = part;
|
||||
}
|
||||
else {
|
||||
struct part *p = params.parts, *v = 0;
|
||||
while (p) {
|
||||
if (val < p->pos) {
|
||||
if (v) {
|
||||
part->next = p;
|
||||
v->next = part;
|
||||
}
|
||||
else {
|
||||
part->next = params.parts;
|
||||
params.parts = part;
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (!p->next) {
|
||||
p->next = part;
|
||||
part->next = 0;
|
||||
break;
|
||||
}
|
||||
v = p;
|
||||
p = p->next;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 't':
|
||||
|
@ -424,11 +432,13 @@ int main(int argc, char **argv)
|
|||
|
||||
case 'r':
|
||||
val = strtol(optarg, &end, 0);
|
||||
if (val > 0xffff || *end)
|
||||
if (val > 0xffff || *end) {
|
||||
invalid = 1;
|
||||
else {
|
||||
params.tlsrec_pos = val;
|
||||
params.tlsrec = 1;
|
||||
break;
|
||||
}
|
||||
part = add_part(¶ms.tlsrec, val);
|
||||
if (!part) {
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -228,11 +228,11 @@ int mod_http(char *buffer, size_t bsize, int m)
|
|||
}
|
||||
|
||||
|
||||
ssize_t part_tls(char *buffer, size_t bsize, ssize_t n, int pos)
|
||||
int part_tls(char *buffer, size_t bsize, ssize_t n, int pos)
|
||||
{
|
||||
if ((n < 3) || (bsize - n < 5) ||
|
||||
(pos < 0) || (pos + 5 > n)) {
|
||||
return n;
|
||||
return 0;
|
||||
}
|
||||
uint16_t r_sz = ANTOHS(buffer, 3);
|
||||
if (r_sz < pos) {
|
||||
|
@ -243,5 +243,5 @@ ssize_t part_tls(char *buffer, size_t bsize, ssize_t n, int pos)
|
|||
|
||||
*(uint16_t *)(buffer + 3) = htons(pos);
|
||||
*(uint16_t *)(buffer + 5 + pos + 3) = htons(r_sz - pos);
|
||||
return n + 5;
|
||||
return 5;
|
||||
}
|
||||
|
|
|
@ -21,4 +21,4 @@ int parse_http(char *buffer, size_t bsize, char **hs, uint16_t *port);
|
|||
|
||||
int mod_http(char *buffer, size_t bsize, int m);
|
||||
|
||||
ssize_t part_tls(char *buffer, size_t bsize, ssize_t n, int pos);
|
||||
int part_tls(char *buffer, size_t bsize, ssize_t n, int pos);
|
||||
|
|
3
params.h
3
params.h
|
@ -29,8 +29,7 @@ struct params {
|
|||
int def_ttl;
|
||||
char custom_ttl;
|
||||
int mod_http;
|
||||
char tlsrec;
|
||||
int tlsrec_pos;
|
||||
struct part *tlsrec;
|
||||
char tlsrec_sni;
|
||||
|
||||
char ipv6;
|
||||
|
|
|
@ -37,7 +37,7 @@ $ ./ciadpi --split 3 --disorder 10
|
|||
|
||||
-s, --split <offset>
|
||||
Разбить запрос по указанному смещению
|
||||
Можно указать несколько раз, например: -s 3 -s 10
|
||||
Можно указывать несколько раз, чтобы разбить запрос по нескольким позициям
|
||||
При указании отрицательного значения к нему прибавляется размер пакета
|
||||
|
||||
-d, --disorder <offset>
|
||||
|
@ -45,7 +45,7 @@ $ ./ciadpi --split 3 --disorder 10
|
|||
! Поведение в Windows отлично: сначала отправляется лишь часть, но затем целый запрос
|
||||
|
||||
-f, --fake <offset>
|
||||
Подобен --disorder, только перед первым запросом отправляется часть поддельного
|
||||
Подобен --disorder, только перед отправкой первого куска отправляется часть поддельного
|
||||
Количество байт отправляемого из фейка равно рамеру разбиваемой части
|
||||
|
||||
-o, --oob <offset>
|
||||
|
@ -82,6 +82,7 @@ $ ./ciadpi --split 3 --disorder 10
|
|||
-r, --tlsrec <offset>
|
||||
Разделить ClientHello на отдельные записи по указанному смещению
|
||||
Также возможен отсчет от конца при указании отрицательного значения
|
||||
Можно указывать несколько раз
|
||||
|
||||
-L, --tlsrec-at-sni
|
||||
Отсчитывать позицию tlsrec относительно SNI
|
||||
|
|
Loading…
Add table
Reference in a new issue