mirror of
https://github.com/hufrea/byedpi.git
synced 2024-12-22 06:15:14 +00:00
Add more offset flags
This commit is contained in:
parent
dbc85417af
commit
b95926d9d2
66
desync.c
66
desync.c
@ -417,14 +417,44 @@ ssize_t send_late_oob(int sfd, char *buffer,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static long gen_offset(long pos, int flag,
|
||||||
|
ssize_t n, long lp, int type, int hp, int len)
|
||||||
|
{
|
||||||
|
if (flag & (OFFSET_SNI | OFFSET_HOST)) {
|
||||||
|
if (!hp || ((flag & OFFSET_SNI) && type != IS_HTTPS)) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
pos += hp;
|
||||||
|
|
||||||
|
if (flag & OFFSET_END)
|
||||||
|
pos += len;
|
||||||
|
else if (flag & OFFSET_MID)
|
||||||
|
pos += (len / 2);
|
||||||
|
else if (flag & OFFSET_RAND)
|
||||||
|
pos += (rand() % len);
|
||||||
|
}
|
||||||
|
else if (flag & OFFSET_RAND) {
|
||||||
|
pos += lp + (rand() % (n - lp));
|
||||||
|
}
|
||||||
|
else if (flag & OFFSET_MID) {
|
||||||
|
pos += (n / 2);
|
||||||
|
}
|
||||||
|
else if (pos < 0 || (flag & OFFSET_END)) {
|
||||||
|
pos += n;
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t desync(int sfd, char *buffer, size_t bfsize,
|
ssize_t desync(int sfd, char *buffer, size_t bfsize,
|
||||||
ssize_t n, ssize_t offset, struct sockaddr *dst, int dp_c)
|
ssize_t n, ssize_t offset, struct sockaddr *dst, int dp_c)
|
||||||
{
|
{
|
||||||
struct desync_params dp = params.dp[dp_c];
|
struct desync_params dp = params.dp[dp_c];
|
||||||
|
|
||||||
char *host = 0;
|
char *host = 0;
|
||||||
int len = 0, type = 0;
|
int len = 0, type = 0, host_pos = 0;
|
||||||
int fa = get_family(dst);
|
int fa = get_family(dst);
|
||||||
|
|
||||||
// parse packet
|
// parse packet
|
||||||
if ((len = parse_tls(buffer, n, &host))) {
|
if ((len = parse_tls(buffer, n, &host))) {
|
||||||
type = IS_HTTPS;
|
type = IS_HTTPS;
|
||||||
@ -435,7 +465,9 @@ ssize_t desync(int sfd, char *buffer, size_t bfsize,
|
|||||||
if (len && host) {
|
if (len && host) {
|
||||||
LOG(LOG_S, "host: %.*s (%zd)\n",
|
LOG(LOG_S, "host: %.*s (%zd)\n",
|
||||||
len, host, host - buffer);
|
len, host, host - buffer);
|
||||||
|
host_pos = host - buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
// modify packet
|
// modify packet
|
||||||
if (type == IS_HTTP && dp.mod_http) {
|
if (type == IS_HTTP && dp.mod_http) {
|
||||||
LOG(LOG_S, "modify HTTP: n=%zd\n", n);
|
LOG(LOG_S, "modify HTTP: n=%zd\n", n);
|
||||||
@ -450,12 +482,12 @@ ssize_t desync(int sfd, char *buffer, size_t bfsize,
|
|||||||
struct part part = dp.tlsrec[i];
|
struct part part = dp.tlsrec[i];
|
||||||
|
|
||||||
long pos = part.pos + i * 5;
|
long pos = part.pos + i * 5;
|
||||||
if (part.flag == OFFSET_SNI) {
|
if (pos < 0 || part.flag) {
|
||||||
pos += (host - buffer - 5);
|
pos -= 5;
|
||||||
}
|
|
||||||
else if (pos < 0) {
|
|
||||||
pos += n;
|
|
||||||
}
|
}
|
||||||
|
pos = gen_offset(pos,
|
||||||
|
part.flag, n, lp, type, host_pos, len);
|
||||||
|
|
||||||
if (pos < lp) {
|
if (pos < lp) {
|
||||||
LOG(LOG_E, "tlsrec cancel: %ld < %ld\n", pos, lp);
|
LOG(LOG_E, "tlsrec cancel: %ld < %ld\n", pos, lp);
|
||||||
break;
|
break;
|
||||||
@ -481,30 +513,16 @@ ssize_t desync(int sfd, char *buffer, size_t bfsize,
|
|||||||
for (int i = 0; i < dp.parts_n; i++) {
|
for (int i = 0; i < dp.parts_n; i++) {
|
||||||
struct part part = dp.parts[i];
|
struct part part = dp.parts[i];
|
||||||
|
|
||||||
// change pos
|
long pos = gen_offset(part.pos,
|
||||||
long pos = part.pos;
|
part.flag, n, lp, type, host_pos, len);
|
||||||
if (part.flag == OFFSET_SNI) {
|
|
||||||
if (type != IS_HTTPS)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
pos += (host - buffer);
|
|
||||||
}
|
|
||||||
else if (part.flag == OFFSET_HOST) {
|
|
||||||
if (type != IS_HTTP)
|
|
||||||
continue;
|
|
||||||
else
|
|
||||||
pos += (host - buffer);
|
|
||||||
}
|
|
||||||
else if (pos < 0 || part.flag == OFFSET_END) {
|
|
||||||
pos += n;
|
|
||||||
}
|
|
||||||
// after EAGAIN
|
// after EAGAIN
|
||||||
if (offset && pos <= offset) {
|
if (offset && pos <= offset) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
else if (pos < 0 || pos > n || pos < lp) {
|
else if (pos < 0 || pos > n || pos < lp) {
|
||||||
LOG(LOG_E, "split cancel: pos=%ld-%ld, n=%zd\n", lp, pos, n);
|
LOG(LOG_E, "split cancel: pos=%ld-%ld, n=%zd\n", lp, pos, n);
|
||||||
break;
|
continue;
|
||||||
}
|
}
|
||||||
// send part
|
// send part
|
||||||
ssize_t s = 0;
|
ssize_t s = 0;
|
||||||
|
22
main.c
22
main.c
@ -376,21 +376,34 @@ int parse_offset(struct part *part, const char *str)
|
|||||||
{
|
{
|
||||||
char *end = 0;
|
char *end = 0;
|
||||||
long val = strtol(str, &end, 0);
|
long val = strtol(str, &end, 0);
|
||||||
if (*end == '+') switch (*(end + 1)) {
|
if (*end == '+') {
|
||||||
|
switch (*(end + 1)) {
|
||||||
case 's':
|
case 's':
|
||||||
part->flag = OFFSET_SNI;
|
part->flag = OFFSET_SNI;
|
||||||
break;
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
part->flag = OFFSET_HOST;
|
part->flag = OFFSET_HOST;
|
||||||
break;
|
break;
|
||||||
case 'e':
|
case 'e': //
|
||||||
part->flag = OFFSET_END;
|
part->flag = OFFSET_END;
|
||||||
break;
|
break;
|
||||||
|
case 'n':
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
else if (*end) {
|
switch (*(end + 2)) {
|
||||||
return -1;
|
case 'e':
|
||||||
|
part->flag |= OFFSET_END;
|
||||||
|
break;
|
||||||
|
case 'm':
|
||||||
|
part->flag |= OFFSET_MID;
|
||||||
|
break;
|
||||||
|
case 'r':
|
||||||
|
part->flag |= OFFSET_RAND;
|
||||||
|
break;
|
||||||
|
case 's':;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
part->pos = val;
|
part->pos = val;
|
||||||
return 0;
|
return 0;
|
||||||
@ -908,6 +921,7 @@ int main(int argc, char **argv)
|
|||||||
clear_params();
|
clear_params();
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
srand((unsigned int)time(0));
|
||||||
|
|
||||||
int status = run((struct sockaddr_ina *)¶ms.laddr);
|
int status = run((struct sockaddr_ina *)¶ms.laddr);
|
||||||
clear_params();
|
clear_params();
|
||||||
|
8
params.h
8
params.h
@ -21,9 +21,11 @@
|
|||||||
#define TIMEOUT_SUPPORT 1
|
#define TIMEOUT_SUPPORT 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define OFFSET_SNI 1
|
#define OFFSET_END 1
|
||||||
#define OFFSET_HOST 2
|
#define OFFSET_MID 2
|
||||||
#define OFFSET_END 3
|
#define OFFSET_RAND 4
|
||||||
|
#define OFFSET_SNI 8
|
||||||
|
#define OFFSET_HOST 16
|
||||||
|
|
||||||
#define DETECT_HTTP_LOCAT 1
|
#define DETECT_HTTP_LOCAT 1
|
||||||
#define DETECT_TLS_ERR 2
|
#define DETECT_TLS_ERR 2
|
||||||
|
Loading…
Reference in New Issue
Block a user