From 9df7574b2b8937192d4ac5b0f335597e95ea55ca Mon Sep 17 00:00:00 2001 From: bol-van Date: Tue, 30 Apr 2024 15:35:20 +0300 Subject: [PATCH] winws: windows service support --- binaries/win64/winws.exe | Bin 164864 -> 165888 bytes binaries/win64/zapret-winws/autohostlist.txt | 6 ++ binaries/win64/zapret-winws/preset_russia.cmd | 2 +- .../win64/zapret-winws/service_create.cmd | 12 +++ binaries/win64/zapret-winws/service_del.cmd | 7 ++ binaries/win64/zapret-winws/service_start.cmd | 2 + binaries/win64/zapret-winws/service_stop.cmd | 2 + binaries/win64/zapret-winws/winws.exe | Bin 164864 -> 165888 bytes docs/quick_start_windows.txt | 3 + docs/windows.txt | 7 +- nfq/darkmagic.c | 58 ++++++++++- nfq/darkmagic.h | 1 + nfq/desync.c | 1 + nfq/helpers.c | 45 +++++++++ nfq/helpers.h | 2 + nfq/nfqws | 1 + nfq/nfqws.c | 38 ++++++- nfq/nfqws.h | 7 ++ nfq/win.c | 94 ++++++++++++++++++ nfq/win.h | 11 ++ 20 files changed, 291 insertions(+), 8 deletions(-) create mode 100644 binaries/win64/zapret-winws/autohostlist.txt create mode 100644 binaries/win64/zapret-winws/service_create.cmd create mode 100644 binaries/win64/zapret-winws/service_del.cmd create mode 100644 binaries/win64/zapret-winws/service_start.cmd create mode 100644 binaries/win64/zapret-winws/service_stop.cmd create mode 120000 nfq/nfqws create mode 100644 nfq/win.c create mode 100644 nfq/win.h diff --git a/binaries/win64/winws.exe b/binaries/win64/winws.exe index 93d428eadef4aab95ae4195d89d65fdc819cd4aa..73a0a47e0244d2eb4f134b8d38981f447a3963d8 100644 GIT binary patch delta 33139 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 G?EeE%e;WM& diff --git a/binaries/win64/zapret-winws/autohostlist.txt b/binaries/win64/zapret-winws/autohostlist.txt new file mode 100644 index 0000000..05dfcc5 --- /dev/null +++ b/binaries/win64/zapret-winws/autohostlist.txt @@ -0,0 +1,6 @@ +ej.ru +bbc.com +static.rutracker.cc +nnmclub.to +hdrezka.ag +rutracker.org diff --git a/binaries/win64/zapret-winws/preset_russia.cmd b/binaries/win64/zapret-winws/preset_russia.cmd index c3e5a52..9d0758d 100644 --- a/binaries/win64/zapret-winws/preset_russia.cmd +++ b/binaries/win64/zapret-winws/preset_russia.cmd @@ -1,2 +1,2 @@ start "zapret: http,https" "%~dp0winws.exe" --wf-tcp=80,443 --dpi-desync=fake,disorder2 --dpi-desync-autottl=2 --dpi-desync-fooling=md5sig -start "zapret: quic" "%~dp0winws.exe" --wf-udp=443 --dpi-desync=fake --dpi-desync-repeats=10 \ No newline at end of file +start "zapret: quic" "%~dp0winws.exe" --wf-udp=443 --dpi-desync=fake --dpi-desync-repeats=11 \ No newline at end of file diff --git a/binaries/win64/zapret-winws/service_create.cmd b/binaries/win64/zapret-winws/service_create.cmd new file mode 100644 index 0000000..88b9578 --- /dev/null +++ b/binaries/win64/zapret-winws/service_create.cmd @@ -0,0 +1,12 @@ +set ARGS=--wf-l3=ipv4,ipv6 --wf-tcp=80,443 --dpi-desync=fake,split --dpi-desync-ttl=7 --dpi-desync-fooling=md5sig +call :srvinst winws1 +rem set ARGS=--wf-l3=ipv4,ipv6 --wf-udp=443 --dpi-desync=fake +rem call :srvinst winws2 +goto :eof + +:srvinst +net stop %1 +sc delete %1 +sc create %1 binPath= "\"%~dp0winws.exe\" %ARGS%" DisplayName= "zapret DPI bypass : %1" start= auto +sc description %1 "zapret DPI bypass software" +sc start %1 diff --git a/binaries/win64/zapret-winws/service_del.cmd b/binaries/win64/zapret-winws/service_del.cmd new file mode 100644 index 0000000..0475692 --- /dev/null +++ b/binaries/win64/zapret-winws/service_del.cmd @@ -0,0 +1,7 @@ +call :srvdel winws1 +rem call :srvdel winws2 +goto :eof + +:srvdel +net stop %1 +sc delete %1 diff --git a/binaries/win64/zapret-winws/service_start.cmd b/binaries/win64/zapret-winws/service_start.cmd new file mode 100644 index 0000000..ec13738 --- /dev/null +++ b/binaries/win64/zapret-winws/service_start.cmd @@ -0,0 +1,2 @@ +sc start winws1 +rem sc start winws2 diff --git a/binaries/win64/zapret-winws/service_stop.cmd b/binaries/win64/zapret-winws/service_stop.cmd new file mode 100644 index 0000000..443af87 --- /dev/null +++ b/binaries/win64/zapret-winws/service_stop.cmd @@ -0,0 +1,2 @@ +net stop winws1 +rem net stop winws2 diff --git a/binaries/win64/zapret-winws/winws.exe b/binaries/win64/zapret-winws/winws.exe index 93d428eadef4aab95ae4195d89d65fdc819cd4aa..73a0a47e0244d2eb4f134b8d38981f447a3963d8 100644 GIT binary patch delta 33139 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 G?EeE%e;WM& diff --git a/docs/quick_start_windows.txt b/docs/quick_start_windows.txt index ab2b815..2520146 100644 --- a/docs/quick_start_windows.txt +++ b/docs/quick_start_windows.txt @@ -89,6 +89,7 @@ badseq может работать только на https и не работа 8) Обеспечьте удобную загрузку обхода блокировок. Есть 2 варианта. Ручной запуск через ярлык или автоматический при старте системы, вне контекста текущего пользователя. +Последний вариант разделяется на запуск через планировщик задач и через службы windows. Если хотите ручной запуск, скопируйте preset_russia.cmd в preset_my.cmd и адаптируйте его под ваши параметра запуска. Потом можно создать ярлык на рабочем столе на preset_my.cmd. Не забудьте, что требуется запускать от имени администратора. @@ -100,6 +101,8 @@ badseq может работать только на https и не работа для поддержки нескольких задач : winws1,winws2,winws3. После создания задач запустите их. Проверьте, что обход встает после перезагрузки windows. +Аналогично настраиваются и службы windows. Смотрите service_*.cmd + 9) Если ломаются отдельные незаблокированные ресурсы, используйте хост-листы. Где они будут находиться - решайте сами. Параметры управления хост-листами точно такие же, как в *nix. diff --git a/docs/windows.txt b/docs/windows.txt index e4f1b64..988afd2 100644 --- a/docs/windows.txt +++ b/docs/windows.txt @@ -114,13 +114,16 @@ cygwin для обычной работы winws не нужен. Разве чт автозапуск winws ---------------- -Для запуска winws вместе с windows воспользуйтесь планировщиком задач windows. -Удобнее всего создавать задачи и управлять ими через консольную программу schtasks. +Для запуска winws вместе с windows есть 2 варианта. Планировщик задач или службы windows. + +Можно создавать задачи и управлять ими через консольную программу schtasks. В директории binaries/win64/winws подготовлены файлы task_*.cmd . В них реализовано создание, удаление, старт и стоп одной копии процесса winws с параметрами из переменной %WINWS1%. Исправьте параметры на нужную вам стратегию. Если для разных фильтров применяется разная стратегия, размножьте код для задач winws1,winws2,winws3,... +Аналогично настраивается вариант запуска через службы windows. Смотрите service_*.cmd. + Все батники требуется запускать от имени администратора. Управлять задачами можно так же из графической программы управления планировщиком taskschd.msc diff --git a/nfq/darkmagic.c b/nfq/darkmagic.c index 37bb34b..bfcfdf0 100644 --- a/nfq/darkmagic.c +++ b/nfq/darkmagic.c @@ -12,6 +12,7 @@ #include "darkmagic.h" #include "helpers.h" #include "params.h" +#include "nfqws.h" uint32_t net32_add(uint32_t netorder_value, uint32_t cpuorder_increment) @@ -1016,6 +1017,11 @@ static bool windivert_recv_filter(HANDLE hFilter, uint8_t *packet, size_t *len, DWORD rd; char c; + if (bQuit) + { + errno=EINTR; + return false; + } if (WinDivertRecvEx(hFilter, packet, *len, &recv_len, 0, wa, NULL, &ovl)) { *len = recv_len; @@ -1028,7 +1034,15 @@ static bool windivert_recv_filter(HANDLE hFilter, uint8_t *packet, size_t *len, { case ERROR_IO_PENDING: // make signals working - while(WaitForSingleObject(w_event,50)==WAIT_TIMEOUT) usleep(0); + while (WaitForSingleObject(w_event,50)==WAIT_TIMEOUT) + { + if (bQuit) + { + errno=EINTR; + return false; + } + usleep(0); + } if (!GetOverlappedResult(hFilter,&ovl,&rd,TRUE)) continue; *len = rd; @@ -1439,6 +1453,48 @@ uint8_t autottl_guess(uint8_t ttl, const autottl *attl) return fake; } +void do_nat(bool bOutbound, struct ip *ip, struct ip6_hdr *ip6, struct tcphdr *tcphdr, struct udphdr *udphdr, const struct sockaddr_in *target4, const struct sockaddr_in6 *target6) +{ + uint16_t nport; + + if (ip && target4) + { + nport = target4->sin_port; + if (bOutbound) + ip->ip_dst = target4->sin_addr; + else + ip->ip_src = target4->sin_addr; + ip4_fix_checksum(ip); + } + else if (ip6 && target6) + { + nport = target6->sin6_port; + if (bOutbound) + ip6->ip6_dst = target6->sin6_addr; + else + ip6->ip6_src = target6->sin6_addr; + } + else + return; + if (nport) + { + if (tcphdr) + { + if (bOutbound) + tcphdr->th_dport = nport; + else + tcphdr->th_sport = nport; + } + if (udphdr) + { + if (bOutbound) + udphdr->uh_dport = nport; + else + udphdr->uh_sport = nport; + } + } +} + void verdict_tcp_csum_fix(uint8_t verdict, struct tcphdr *tcphdr, size_t transport_len, struct ip *ip, struct ip6_hdr *ip6hdr) { diff --git a/nfq/darkmagic.h b/nfq/darkmagic.h index b152d2b..f321d56 100644 --- a/nfq/darkmagic.h +++ b/nfq/darkmagic.h @@ -211,6 +211,7 @@ typedef struct #define AUTOTTL_SET_DEFAULT(a) {(a).delta=AUTOTTL_DEFAULT_DELTA; (a).min=AUTOTTL_DEFAULT_MIN; (a).max=AUTOTTL_DEFAULT_MAX;} uint8_t autottl_guess(uint8_t ttl, const autottl *attl); +void do_nat(bool bOutbound, struct ip *ip, struct ip6_hdr *ip6, struct tcphdr *tcphdr, struct udphdr *udphdr, const struct sockaddr_in *target4, const struct sockaddr_in6 *target6); void verdict_tcp_csum_fix(uint8_t verdict, struct tcphdr *tcphdr, size_t transport_len, struct ip *ip, struct ip6_hdr *ip6hdr); void verdict_udp_csum_fix(uint8_t verdict, struct udphdr *udphdr, size_t transport_len, struct ip *ip, struct ip6_hdr *ip6hdr); diff --git a/nfq/desync.c b/nfq/desync.c index 0bfc28f..2d339ca 100644 --- a/nfq/desync.c +++ b/nfq/desync.c @@ -1511,6 +1511,7 @@ static void packet_debug(bool replay, uint8_t proto, const struct ip *ip, const } } + static uint8_t dpi_desync_packet_play(bool replay, uint32_t fwmark, const char *ifout, uint8_t *data_pkt, size_t *len_pkt) { struct ip *ip; diff --git a/nfq/helpers.c b/nfq/helpers.c index efabfd7..29ac6c8 100644 --- a/nfq/helpers.c +++ b/nfq/helpers.c @@ -136,6 +136,51 @@ void print_sockaddr(const struct sockaddr *sa) printf("%s", ip_port); } +bool pton4_port(const char *s, struct sockaddr_in *sa) +{ + char ip[16],*p; + size_t l; + unsigned int u; + + p = strchr(s,':'); + if (!p) return false; + l = p-s; + if (l<7 || l>15) return false; + memcpy(ip,s,l); + ip[l]=0; + p++; + + sa->sin_family = AF_INET; + if (inet_pton(AF_INET,ip,&sa->sin_addr)!=1 || sscanf(p,"%u",&u)!=1 || !u || u>0xFFFF) return false; + sa->sin_port = htons((uint16_t)u); + + return true; +} +bool pton6_port(const char *s, struct sockaddr_in6 *sa) +{ + char ip[40],*p; + size_t l; + unsigned int u; + + if (*s++!='[') return false; + p = strchr(s,']'); + if (!p || p[1]!=':') return false; + l = p-s; + if (l<2 || l>39) return false; + p+=2; + memcpy(ip,s,l); + ip[l]=0; + + sa->sin6_family = AF_INET6; + if (inet_pton(AF_INET6,ip,&sa->sin6_addr)!=1 || sscanf(p,"%u",&u)!=1 || !u || u>0xFFFF) return false; + sa->sin6_port = htons((uint16_t)u); + sa->sin6_flowinfo = 0; + sa->sin6_scope_id = 0; + + return true; +} + + void dbgprint_socket_buffers(int fd) { if (params.debug) diff --git a/nfq/helpers.h b/nfq/helpers.h index 2f630b9..fdbbe9d 100644 --- a/nfq/helpers.h +++ b/nfq/helpers.h @@ -19,6 +19,8 @@ bool append_to_list_file(const char *filename, const char *s); void print_sockaddr(const struct sockaddr *sa); void ntop46(const struct sockaddr *sa, char *str, size_t len); void ntop46_port(const struct sockaddr *sa, char *str, size_t len); +bool pton4_port(const char *s, struct sockaddr_in *sa); +bool pton6_port(const char *s, struct sockaddr_in6 *sa); bool seq_within(uint32_t s, uint32_t s1, uint32_t s2); diff --git a/nfq/nfqws b/nfq/nfqws new file mode 120000 index 0000000..3c518b9 --- /dev/null +++ b/nfq/nfqws @@ -0,0 +1 @@ +../binaries/my/nfqws \ No newline at end of file diff --git a/nfq/nfqws.c b/nfq/nfqws.c index 3a62d18..fdbbcb9 100644 --- a/nfq/nfqws.c +++ b/nfq/nfqws.c @@ -29,6 +29,12 @@ #include #include +#ifdef __CYGWIN__ +#include +#include "win.h" +#endif + + #ifdef __linux__ #include #define NF_DROP 0 @@ -41,7 +47,9 @@ #define CTRACK_T_UDP 60 struct params_s params; - +#ifdef __CYGWIN__ +bool bQuit=false; +#endif static bool bHup = false; static void onhup(int sig) @@ -421,6 +429,11 @@ static int win_main(const char *windivert_filter) DLOG("windivert: ignoring too large packet\n") continue; // too large packet } + else if (errno==EINTR) + { + DLOG("QUIT requested\n") + break; + } fprintf(stderr, "windivert: recv failed. errno %d\n", errno); break; } @@ -707,6 +720,12 @@ static bool wf_make_filter( return true; } +bool WinSrvInstall(const char *name, const char *binpath) +{ + return false; +} + + #endif @@ -809,13 +828,21 @@ static void exithelp_clean(void) int main(int argc, char **argv) { +#ifdef __CYGWIN__ + if (service_run(argc, argv)) + { + // we were running as service. now exit. + return 0; + } +#endif + int result, v; int option_index = 0; bool daemon = false; char pidfile[256]; #ifdef __CYGWIN__ char windivert_filter[8192], wf_pf_tcp_src[256], wf_pf_tcp_dst[256], wf_pf_udp_src[256], wf_pf_udp_dst[256], wf_save_file[256]; - bool wf_ipv4=true, wf_ipv6=true; + bool wf_ipv4=true, wf_ipv6=true, srv_inst=false, srv_del=false; unsigned int IfIdx=0, SubIfIdx=0; *windivert_filter = *wf_pf_tcp_src = *wf_pf_tcp_dst = *wf_pf_udp_src = *wf_pf_udp_dst = *wf_save_file = 0; #endif @@ -1431,7 +1458,6 @@ int main(int argc, char **argv) strncpy(wf_save_file, optarg, sizeof(wf_save_file)); wf_save_file[sizeof(wf_save_file) - 1] = '\0'; break; - #endif } } @@ -1473,7 +1499,7 @@ int main(int argc, char **argv) else { fprintf(stderr, "windivert filter: could not save raw filter to %s\n", wf_save_file); - exit_clean(0); + exit_clean(1); } } #endif @@ -1522,6 +1548,10 @@ int main(int argc, char **argv) ex: rawsend_cleanup(); cleanup_params(); +#ifdef __CYGWIN__ + service_stopped(); + +#endif return result; exiterr: result = 1; diff --git a/nfq/nfqws.h b/nfq/nfqws.h index 6f70f09..86aa882 100644 --- a/nfq/nfqws.h +++ b/nfq/nfqws.h @@ -1 +1,8 @@ #pragma once + +#include + +#ifdef __CYGWIN__ +extern bool bQuit; +#endif +int main(int argc, char *argv[]); diff --git a/nfq/win.c b/nfq/win.c new file mode 100644 index 0000000..7d71ee6 --- /dev/null +++ b/nfq/win.c @@ -0,0 +1,94 @@ +#ifdef __CYGWIN__ + +#include +#include +#include +#include + +#include "win.h" +#include "nfqws.h" + +#define SERVICE_NAME "winws" + +static SERVICE_STATUS ServiceStatus; +static SERVICE_STATUS_HANDLE hStatus = NULL; +static int service_argc = 0; +static char **service_argv = NULL; + +void service_main(int argc __attribute__((unused)), char *argv[] __attribute__((unused))); + +bool service_run(int argc, char *argv[]) +{ + int i; + + SERVICE_TABLE_ENTRY ServiceTable[] = { + {SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)service_main}, + {NULL, NULL} + }; + + service_argc = argc; + service_argv = argv; + + return StartServiceCtrlDispatcherA(ServiceTable); +} + +static void service_set_status(DWORD state) +{ + ServiceStatus.dwCurrentState = state; + SetServiceStatus(hStatus, &ServiceStatus); +} +void service_stopped() +{ + service_set_status(SERVICE_STOPPED); +} + +// Control handler function +void service_controlhandler(DWORD request) +{ + switch (request) + { + case SERVICE_CONTROL_STOP: + case SERVICE_CONTROL_SHUTDOWN: + bQuit = true; + service_set_status(SERVICE_STOP_PENDING); + break; + default: + // Report current status + SetServiceStatus(hStatus, &ServiceStatus); + break; + } + return; +} + +void service_main(int argc __attribute__((unused)), + char *argv[] __attribute__((unused))) +{ + ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + ServiceStatus.dwCurrentState = SERVICE_RUNNING; + ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + ServiceStatus.dwWin32ExitCode = 0; + ServiceStatus.dwServiceSpecificExitCode = 0; + ServiceStatus.dwCheckPoint = 1; + ServiceStatus.dwWaitHint = 0; + + hStatus = RegisterServiceCtrlHandlerA( + SERVICE_NAME, + (LPHANDLER_FUNCTION)service_controlhandler); + if (hStatus == (SERVICE_STATUS_HANDLE)0) + { + // Registering Control Handler failed + return; + } + + SetServiceStatus(hStatus, &ServiceStatus); + + // Calling main with saved argc & argv + ServiceStatus.dwWin32ExitCode = (DWORD)main(service_argc, service_argv); + + ServiceStatus.dwCurrentState = SERVICE_STOPPED; + SetServiceStatus(hStatus, &ServiceStatus); + return; +} + + +#endif diff --git a/nfq/win.h b/nfq/win.h new file mode 100644 index 0000000..097442b --- /dev/null +++ b/nfq/win.h @@ -0,0 +1,11 @@ +#pragma once + +#ifdef __CYGWIN__ + +#include + +bool service_run(); +void service_stopped(); + +#endif +