{"id":310398,"date":"2020-09-23T21:00:36","date_gmt":"2020-09-23T21:00:36","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=310398"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=310398","title":{"rendered":"\u0414\u0440\u0435\u0432\u043d\u0438\u0439 \u043a\u043e\u0441\u0442\u044b\u043b\u044c \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u043a\u043e\u0441\u0442\u044b\u043b\u0435"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/520400\/\">\n<p>\u041d\u0430\u0447\u043d\u0443 \u0431\u0435\u0437 \u043e\u0431\u0438\u043d\u044f\u043a\u043e\u0432, \u043a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043c\u0435\u043d\u044f \u043f\u043e\u0441\u0442\u0438\u0433\u043b\u043e \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u0438\u0435 (\u043d\u0443 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0435 \u0441\u043a\u0430\u0436\u0443 \u043f\u043e-\u0447\u0435\u0441\u0442\u043d\u043e\u043c\u0443) \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430? \u041d\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0441\u043e \u0441\u0442\u0430\u0436\u0435\u043c \u0442\u0430\u043a \u0438 \u0431\u0443\u0434\u0435\u0442. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u044b &#8212; \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u043d\u0443 \u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435. \u042f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u043d\u0435 \u043f\u043e \u043f\u043b\u0435\u0447\u0443. \u041f\u043b\u044e\u0441 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043a\u043e\u0434\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u043e\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0449\u044c. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043f\u0430\u043b \u043d\u0430 FTP,  \u043a \u0441\u043b\u043e\u0432\u0443 \u041e\u0421 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f Windows. \u041f\u043b\u044e\u0441 FTP \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0430 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b. \u0421\u043a\u0430\u0447\u0430\u0432 Filezilla Server, \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432 \u043e\u0434\u043d\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0432 \u044e\u0437\u0435\u0440\u0430 \u0441 \u043f\u0430\u0440\u043e\u043b\u0435\u043c, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f Filezilla Client \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0421\u043e\u0437\u0434\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\/\u0421++:<\/p>\n<pre><code>#include &lt;iostream&gt; void main() { \tFILE* fs; \tfopen_s(&amp;fs, \"1.txt\", \"w\"); \tif (fs) \t{     fwrite(\"user\\r\\npassword\\r\\nsend D:\\\\share\\\\1.txt\\r\\nbye\", 1, sizeof(\"user\\r\\npassword\\r\\nsend D:\\\\share\\\\1.txt\\r\\nbye\"), fs);     fwrite(\"\\000\", 1, sizeof(\"\\000\"), fs);     fclose(fs); \t} \tsystem(\"ftp -s:1.txt 127.0.0.1\"); }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u043e \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0445\u043e\u0441\u0442\u0435 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e \u0441\u0435\u0442\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0441 send. \u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0430)\u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0431)\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0442\u0443\u043b\u0437\u0443 \u0434\u043b\u044f ftp \u043e\u0442 \u043c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442\u0430. \u0425\u043e\u0442\u044f \u043f\u043e-\u043c\u043e\u0439\u043c\u0443 \u0435\u0435 \u043d\u0430\u0434\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442\u0435\u0441\u044c \u0432 \u0447\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e.<\/p>\n<p>\u041d\u0435 \u043d\u0430\u0439\u0434\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043a\u0443\u0447\u0435 \u0444\u043e\u0440\u0443\u043c\u043e\u0432, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0439 \u0441\u043e\u043a\u0435\u0442\u044b. \u0423 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u043f\u044b\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 char&#8217;\u043e\u0432 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u0441\u0442\u0430\u0442\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0443 \u0422\u0430\u043d\u0435\u043d\u0431\u0430\u0443\u043c\u0430, \u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u0432 \u0433\u043b\u0430\u0432\u0435 \u043f\u0440\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u0422\u0430\u043c \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0435 \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f &#171;\u043c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 &#8212; \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440&#187;, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e &#171;\u043e\u0434\u0438\u043d \u043a\u043b\u0438\u0435\u043d\u0442 &#8212; \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440&#187;. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u0447\u043d\u044b\u0439 \u0448\u0438\u0444\u0440 &#8212; \u0441\u0435\u0442\u044c \u0424\u0435\u0439\u0441\u0442\u0435\u043b\u044f. \u041f\u043b\u044e\u0441\u043e\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e(\u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430) \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f Thread&#8217;\u0430\u043c\u0438, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u0431\u0440\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f *.tga \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>#include &lt;iostream&gt; #include &lt;WinSock.h&gt; #pragma comment (lib,\"WS2_32.lib\")  #include &lt;fstream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;iterator&gt; #include &lt;vector&gt; void error(const char* msg) {     \/\/perror(msg);     std::cout&lt;&lt;'\\n'&lt;&lt;WSAGetLastError();     WSACleanup();     std::cin.ignore();     exit(1); } void bzero(char*buf, int l) {     for (int i = 0; i &lt; l; i++)         buf[i] = '\\0'; } struct arg_s {     unsigned char* buffer2;     bool exit; }; char** buffer; struct arg_sa {     struct arg_s* lalk;     int current; }; #define type struct arg_sa int sockfd, * newsockfd;\/\/\u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 int buflen2 = 10292000;\/\/\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u043b\u044f RGBA*Width*Height struct sockaddr_in *cli_addr; int* clilen; int currentclient,cc;\/\/\u0441\u0441-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e \u0441\u0447\u0435\u0442\u0443(\u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)  typedef unsigned long long uint64_t; typedef unsigned int uint32_t; #define N 8\/\/\u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 #define F32 0xFFFFFFFF uint32_t RK[N];\/\/\u0440\u0430\u0443\u043d\u0434\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 #define size64 sizeof(uint64_t) #define ROR(x,n,xsize)((x&gt;&gt;n)|(x&lt;&lt;(xsize-n))) #define ROL(x,n,xsize)((x&lt;&lt;n)|(x&gt;&gt;(xsize-n))) #define RKEY(r)((ROR(K,r*3,size64*8))&amp;F32) const uint64_t K = 0x96EA704CFB1CF671;\/\/\u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f struct hostent* server; uint32_t F(uint32_t subblk, uint32_t key) {     return subblk + key;\/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f } void createRoundKeys() {     for (int i = 0; i &lt; N; i++)         RK[i] = (ROR(K, i * 8, size64 * 8)) &amp; F32; } uint64_t decrypt(uint64_t c_block)\/\/\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441\u0435\u0442\u044c\u044e \u0444\u0435\u0439\u0441\u0442\u0435\u043b\u044f {     \/\/select subblocks     uint32_t left = (c_block &gt;&gt; 32) &amp; F32;     uint32_t right = c_block &amp; F32;     uint32_t left_, right_;\/\/subblock in the end of round     for (int r = N - 1; r &gt;= 0; r--)     {         uint32_t fk = F(left, RK[r]);         left_ = left;         right_ = right ^ fk;         if (r &gt; 0)\/\/swap places to next round         {             left = right_;             right = left_;         }         else \/\/last round not swap         {             left = left_;             right = right_;         }     }     \/\/collect subblock in block     uint64_t block = left;     block = (block &lt;&lt; 32) | (right &amp; F32);     return block; } void session_(LPVOID args)\/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 {     int current = currentclient++;     bzero((char*)&amp;(cli_addr[current]), sizeof(&amp;(cli_addr[current])));     newsockfd[current] = accept(sockfd, (struct sockaddr*)&amp;(cli_addr[current]), &amp;(clilen[current]));     if (newsockfd[current] &lt; 0)     {         error(\"Error on accept\\n\");     }     char* s = new char[100];     int n = recv(newsockfd[current], s, 100, 0);     int buflen2 = atoi(s);\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f     FILE* f;     std::string name = \"Screen\";     cc++;     _itoa_s(cc, s, 100, 10);     name += s;     name += \".tga\";     fopen_s(&amp;f,name.c_str(), \"wb\");\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0449\u0438\u043c\u0441\u044f \u043d\u0430 1 \u0438\u043c\u0435\u043d\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c     if (f != NULL)     {         unsigned char tgaHeader[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };         unsigned char header[6];         n = recv(newsockfd[current], buffer[current], sizeof(tgaHeader), 0);         fwrite((unsigned char*)buffer[current], 1, sizeof(tgaHeader), f);         bzero(buffer[current], buflen2);         n = recv(newsockfd[current], buffer[current],sizeof(header), 0);         fwrite((unsigned char*)buffer[current], 1, sizeof(header), f);\/\/\u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0445\u0438\u0434\u0435\u0440\u044b         bzero(buffer[current], buflen2);         n = recv(newsockfd[current], buffer[current], buflen2, 0);\/\/\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u0430\u0439\u0442\u044b \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f         \/\/         \/\/\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0431\u0430\u0439\u0442\u043e\u0432         createRoundKeys();         unsigned long long id;         std::vector&lt;uint64_t&gt;* plaintext = new std::vector&lt;uint64_t&gt;();         int i = 0;         while (i&lt;buflen2)         {             memcpy(&amp;id, (buffer[current]) + i, N);             plaintext-&gt;push_back(decrypt(id));             i += 8;         }         std::cout &lt;&lt; \"i=\" &lt;&lt; i &lt;&lt; std::endl;         i = 0;         char str_[N + 1];         memset(str_, 0, N);         str_[N] = '\\0';         for (std::vector&lt;uint64_t&gt;::iterator it = plaintext-&gt;begin(); it != plaintext-&gt;end(); ++it)         {             memcpy(str_, &amp;*it, N);             fwrite((unsigned char*)str_, sizeof(unsigned char), N\/*strlen(str_)*\/, f);             i += 8;         }         std::cout &lt;&lt; \"i=\" &lt;&lt; i &lt;&lt; std::endl;         \/\/\u043a\u043e\u043d\u0435\u0446 \u0440\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0431\u0430\u0439\u0442\u043e\u0432         \/\/fwrite((unsigned char*)buffer[current], sizeof(char), buflen2, f);         fclose(f);     }     system(name.c_str());\/\/\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 *.tga \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c } int main() {     cc = 0;     WSADATA ws = { 0 };     if (WSAStartup(MAKEWORD(2, 2), &amp;ws) == 0)     {         currentclient = 0;         int maxclients = 2;\/\/\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432         cli_addr = new struct sockaddr_in[maxclients];         clilen = new int[maxclients];         buffer = new char* [maxclients];         for (int i = 0; i &lt; maxclients; i++)         {             clilen[i] = sizeof(cli_addr[i]);         }         sockfd = socket(AF_INET, SOCK_STREAM, 0);\/\/tcp \u0441\u043e\u043a\u0435\u0442         if (sockfd &lt; 0)             error(\"ERROR opening socket\");         struct sockaddr_in serv_addr;         bzero((char*)&amp;serv_addr, sizeof(serv_addr));         serv_addr.sin_family = AF_INET;         serv_addr.sin_addr.s_addr = INADDR_ANY;         int port = 30000;\/\/\u043f\u043e\u0440\u0442         serv_addr.sin_port = htons(port);         if (bind(sockfd, (struct sockaddr*)&amp;serv_addr, sizeof(serv_addr)) &lt; 0)             error(\"ERROR on binding\");         if (listen(sockfd, 10) &lt; 0)             error(\"ERROR listen\");         HANDLE* thread;\/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439         struct arg_sa* args;         while (true)         {             newsockfd = new int[maxclients];             thread = (HANDLE*)malloc(sizeof(HANDLE) * maxclients);             args = new struct arg_sa[maxclients];             for (int i = 0; i &lt; maxclients; i++)             {                 args[i].lalk = new struct arg_s();                 buffer[i] = new char[buflen2];             }             int i = -1;             while (++i &lt; maxclients)             {                 Sleep(1);                 args[i].current = i;                 args[i].lalk-&gt;exit = false;                 thread[i] = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)(session_), args, 0, 0);             }                 for (int i = 0; i &lt; maxclients; i++)                     WaitForSingleObject(thread[i], INFINITE);\/\/\u0436\u0434\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432             i = -1;             while (++i &lt; maxclients)             {                 shutdown(newsockfd[i], 0);                 TerminateThread(thread[i], 0);             }             \/\/delete[] newsockfd;             \/\/free(thread);             currentclient = 0;             for (int i = 0; i &lt; maxclients; i++)             {                 \/\/delete args[i].lalk;                 \/\/delete[] args[i].lalk-&gt;buffer;             }             \/\/delete[] args;         }         shutdown(sockfd, 0);         WSACleanup();         return 0;     }     std::cin.ignore(); }<\/code><\/pre>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u0432 \u0432\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0436\u0434\u0443\u0442 accept \u043f\u043e\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f.  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e WaitForSingleObject \u0436\u0434\u0435\u0442 \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0443\u0442. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441\u0432\u043e\u0439 \u0441\u043e\u043a\u0435\u0442 \u0438 \u0441\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 M+1 \u0441\u043e\u043a\u0435\u0442, \u0433\u0434\u0435 M \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0447, \u0432\u0441\u0451 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f.  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442:<\/p>\n<pre><code>#include &lt;iostream&gt; #include &lt;WinSock.h&gt; #include &lt;vector&gt; #pragma comment (lib,\"WS2_32.lib\") void error(const char* msg) {     \/\/perror(msg);     std::cout &lt;&lt; '\\n' &lt;&lt; WSAGetLastError();     WSACleanup();     std::cin.ignore();     exit(1); } void bzero(char* buf, int l) {     for (int i = 0; i &lt; l; i++)         buf[i] = '\\0'; } typedef unsigned long long uint64_t; typedef unsigned int uint32_t; #define N 8 #define F32 0xFFFFFFFF uint32_t RK[N];\/\/\u0440\u0430\u0443\u043d\u0434\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 #define size64 sizeof(uint64_t) #define ROR(x,n,xsize)((x&gt;&gt;n)|(x&lt;&lt;(xsize-n))) #define ROL(x,n,xsize)((x&lt;&lt;n)|(x&gt;&gt;(xsize-n))) #define RKEY(r)((ROR(K,r*3,size64*8))&amp;F32) const uint64_t K = 0x96EA704CFB1CF671;\/\/\u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f void createRoundKeys() {     for (int i = 0; i &lt; N; i++)         RK[i] = (ROR(K, i * 8, size64 * 8)) &amp; F32; } uint32_t F(uint32_t subblk, uint32_t key) {     return subblk + key;\/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f } uint64_t encrypt(uint64_t block)\/\/\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441\u0435\u0442\u044c\u044e \u0424\u0435\u0439\u0441\u0442\u0435\u043b\u044f {     \/\/select subblocks     uint32_t left = (block &gt;&gt; 32) &amp; F32;     uint32_t right = block &amp; F32;     uint32_t left_, right_;\/\/subblock in the end of round     for (int r = 0; r &lt; N; r++)     {         uint32_t fk = F(left, RK[r]);         left_ = left;         right_ = right ^ fk;         if (r &lt; N - 1)\/\/swap places to next round         {             left = right_;             right = left_;         }         else\/\/last round not swap         {             left = left_;             right = right_;         }     }     \/\/collect subblock in block     uint64_t c_block = left;     c_block = (c_block &lt;&lt; 32) | (right &amp; F32);     return c_block; } int main() {     keybd_event(VK_LWIN, 0, 0, 0);     keybd_event('M', 0, 0, 0);     keybd_event('M', 0, KEYEVENTF_KEYUP, 0);     keybd_event(VK_LWIN, 0, KEYEVENTF_KEYUP, 0);\/\/\u044d\u0442\u0438 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u044e\u0442 \u0432\u0441\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f     Sleep(1000);\/\/\u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u0441\u0442\u043e\u043b\u0430     WSADATA ws = { 0 };     if (WSAStartup(MAKEWORD(2, 2), &amp;ws) == 0)     {         int sockfd;         sockfd = socket(AF_INET, SOCK_STREAM, 0);         struct sockaddr_in serv_addr, cli_addr;         bzero((char*)&amp;serv_addr, sizeof(serv_addr));         bzero((char*)&amp;cli_addr, sizeof(cli_addr));         serv_addr.sin_family = AF_INET;          const char* add = \"127.0.0.1\";\/\/\u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430         serv_addr.sin_addr.s_addr = inet_addr(add);         int port = 30000;\/\/\u043f\u043e\u0440\u0442         serv_addr.sin_port = htons(port);         int servlen = sizeof(serv_addr);         int n = connect(sockfd, (struct sockaddr*)&amp;serv_addr, servlen);                  \/\/\u043d\u0438\u0436\u0435 \u043a\u043e\u0434 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442         HDC ScreenDC = GetDC(0);         HDC MemoryDC = CreateCompatibleDC(ScreenDC);         int ScreenHeight = GetSystemMetrics(SM_CYSCREEN);         int ScreenWidth = GetSystemMetrics(SM_CXSCREEN);         ScreenWidth = ((ScreenWidth - 1) \/ 4 + 1) * 4;         BITMAPINFO BMI;         BMI.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);         BMI.bmiHeader.biWidth = ScreenWidth;         BMI.bmiHeader.biHeight = ScreenHeight;         BMI.bmiHeader.biSizeImage = ScreenWidth * ScreenHeight * 3;         BMI.bmiHeader.biCompression = BI_RGB;         BMI.bmiHeader.biBitCount = 24;         BMI.bmiHeader.biPlanes = 1;         DWORD ScreenshotSize;         ScreenshotSize = BMI.bmiHeader.biSizeImage;         unsigned char* ImageBuffer;         HBITMAP hBitmap = CreateDIBSection(ScreenDC, &amp;BMI, DIB_RGB_COLORS, (void**)&amp;ImageBuffer, 0, 0);         SelectObject(MemoryDC, hBitmap);         BitBlt(MemoryDC, 0, 0, ScreenWidth, ScreenHeight, ScreenDC, 0, 0, SRCCOPY);         DeleteDC(MemoryDC);         ReleaseDC(NULL, ScreenDC);         FILE* sFile = 0;         unsigned char tgaHeader[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };         unsigned char header[6];         unsigned char tempColors = 0;         fopen_s(&amp;sFile, \"S.tga\", \"wb\");         if (!sFile) {             exit(1);         }         header[0] = ScreenWidth % 256;         header[1] = ScreenWidth \/ 256;         header[2] = ScreenHeight % 256;         header[3] = ScreenHeight \/ 256;         header[4] = BMI.bmiHeader.biBitCount;         header[5] = 0;         fwrite(tgaHeader, 1, sizeof(tgaHeader), sFile);         fwrite(header, sizeof(header), 1, sFile);         \/\/\u043a\u043e\u043d\u0435\u0446 \u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b                  \/\/\u0448\u0438\u0444\u0440\u0443\u0435\u043c \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0440\u043e\u043c\u0435 \u0445\u0438\u0434\u0435\u0440\u043e\u0432         createRoundKeys();         std::vector&lt;uint64_t&gt;* msg = new std::vector&lt;uint64_t&gt;(),*crpt = new std::vector&lt;uint64_t&gt;();         unsigned long long id;         int i = 0;         while (i &lt; BMI.bmiHeader.biSizeImage)         {             memcpy(&amp;id, (ImageBuffer + i), N);             msg-&gt;push_back(id);             i += 8;         }         std::cout &lt;&lt; \"i=\" &lt;&lt; i &lt;&lt; std::endl;          uint64_t cipher;         i = 0;         char str_[N + 1];         memset(str_, 0, N);         str_[N] = '\\0';         for (std::vector&lt;uint64_t&gt;::iterator it = msg-&gt;begin(); it != msg-&gt;end(); ++it)         {             cipher = encrypt(*it);             memcpy(str_, &amp;cipher, N);             fwrite((unsigned char*)str_, sizeof(unsigned char), N, sFile);             i += 8;         }         std::cout &lt;&lt; \"i=\" &lt;&lt; i &lt;&lt; std::endl;         \/\/         \/\/fwrite(ImageBuffer, BMI.bmiHeader.biSizeImage, 1, sFile);         std::cout &lt;&lt; BMI.bmiHeader.biSizeImage &lt;&lt; std::endl;         fclose(sFile);         DeleteObject(hBitmap);         FILE* f;         fopen_s(&amp;f, \"S.tga\", \"rb\");         int count = 0;         if (f != NULL)         {             while (getc(f) != EOF)                 count++;\/\/\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0431\u0430\u0439\u0442\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c             fclose(f);         }         count -= 18;         std::cout &lt;&lt; count&lt;&lt; std::endl;         char* s = new char[100];         _itoa_s(count, s, 100, 10);         n = send(sockfd, s, 100, 0);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a         char* buffer = new char[count];         fopen_s(&amp;f, \"S.tga\", \"rb\");         size_t bytes;         if (f != NULL)         {             memcpy(buffer, tgaHeader, sizeof(tgaHeader));             n = send(sockfd, buffer, sizeof(tgaHeader), 0);             bzero(buffer, count);             memcpy(buffer, header, sizeof(header));             n = send(sockfd, buffer, sizeof(header), 0);             bzero(buffer, count);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0445\u0438\u0434\u0435\u0440\u044b             for(int i=0;i&lt;18;i++)                 fgetc(f);             bzero(buffer, count);             bytes = fread(buffer, sizeof(unsigned char), count, f);             n = send(sockfd,buffer, count, 0);\/\/\u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f             fclose(f);         }         Sleep(1000);         shutdown(sockfd, 0);         WSACleanup();         \/\/system(\"del S.tga\");         delete[] buffer,s;         return 0;     }     \/\/std::cin.ignore(); }<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0444\u0430\u0439\u043b \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0430 S.tga, \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e5a\/a96\/cb9\/e5aa96cb9b86b5348456d6f8b5bc61b6.png\" width=\"683\" height=\"388\"><figcaption><\/figcaption><\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b<\/p>\n<p>\u0410 \u0432\u043e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u043d \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d Screen.tga<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/166\/67e\/746\/16667e7469d264a91478a555bd1f57ab.png\" width=\"684\" height=\"387\"><figcaption><\/figcaption><\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435 \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0424\u0435\u0439\u0441\u0442\u0435\u043b\u044f \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f CBC \u0438 CFB \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043b\u0443\u0447\u0448\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e, \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b. <\/p>\n<p>\u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/520400\/\"> https:\/\/habr.com\/ru\/post\/520400\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/520400\/\">\n<p>\u041d\u0430\u0447\u043d\u0443 \u0431\u0435\u0437 \u043e\u0431\u0438\u043d\u044f\u043a\u043e\u0432, \u043a\u0430\u043a-\u0442\u043e \u0440\u0430\u0437 \u043c\u0435\u043d\u044f \u043f\u043e\u0441\u0442\u0438\u0433\u043b\u043e \u043e\u0442\u043a\u0440\u043e\u0432\u0435\u043d\u0438\u0435 (\u043d\u0443 \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u043c\u043e\u0449\u043d\u043e\u0435 \u0441\u043a\u0430\u0436\u0443 \u043f\u043e-\u0447\u0435\u0441\u0442\u043d\u043e\u043c\u0443) \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0438\u0434\u0435\u044f \u043d\u0430\u043f\u0435\u0447\u0430\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430? \u041d\u0443 \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0441\u043e \u0441\u0442\u0430\u0436\u0435\u043c \u0442\u0430\u043a \u0438 \u0431\u0443\u0434\u0435\u0442. \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u044b &#8212; \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c \u0447\u0442\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0438 \u0438\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u044b, \u043d\u0443 \u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u0431\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435. \u042f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u043d\u0435 \u043f\u043e \u043f\u043b\u0435\u0447\u0443. \u041f\u043b\u044e\u0441 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043a\u043e\u0434\u0430 \u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u0430\u043f\u043e\u0441\u0442\u0438\u0442\u044c \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f \u043f\u043e\u043c\u043e\u0449\u044c. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043f\u0430\u043b \u043d\u0430 FTP,  \u043a \u0441\u043b\u043e\u0432\u0443 \u041e\u0421 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f Windows. \u041f\u043b\u044e\u0441 FTP \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u0430 \u043b\u044e\u0431\u043e\u0439 \u0444\u0430\u0439\u043b. \u0421\u043a\u0430\u0447\u0430\u0432 Filezilla Server, \u0440\u0430\u0441\u0448\u0430\u0440\u0438\u0432 \u043e\u0434\u043d\u0443 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435\/\u0437\u0430\u043f\u0438\u0441\u044c \u0438 \u0441\u043e\u0437\u0434\u0430\u0432 \u044e\u0437\u0435\u0440\u0430 \u0441 \u043f\u0430\u0440\u043e\u043b\u0435\u043c, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f Filezilla Client \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e. \u0421\u043e\u0437\u0434\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\/\u0421++:<\/p>\n<pre><code>#include &lt;iostream&gt; void main() { \tFILE* fs; \tfopen_s(&amp;fs, \"1.txt\", \"w\"); \tif (fs) \t{     fwrite(\"user\\r\\npassword\\r\\nsend D:\\\\share\\\\1.txt\\r\\nbye\", 1, sizeof(\"user\\r\\npassword\\r\\nsend D:\\\\share\\\\1.txt\\r\\nbye\"), fs);     fwrite(\"\\000\", 1, sizeof(\"\\000\"), fs);     fclose(fs); \t} \tsystem(\"ftp -s:1.txt 127.0.0.1\"); }<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u043c\u043d\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c, \u0442\u043e \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u0445\u043e\u0441\u0442\u0435 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435 \u043f\u043e \u0441\u0435\u0442\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432 \u0441\u0442\u0440\u043e\u0447\u043a\u0435 \u0441 send. \u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u0443\u0434\u043e\u0431\u043d\u043e \u0430)\u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0431)\u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442, \u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u0442\u0443\u043b\u0437\u0443 \u0434\u043b\u044f ftp \u043e\u0442 \u043c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442\u0430. \u0425\u043e\u0442\u044f \u043f\u043e-\u043c\u043e\u0439\u043c\u0443 \u0435\u0435 \u043d\u0430\u0434\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u0442\u0435\u0441\u044c \u0432 \u0447\u0435\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438 \u043d\u0430\u043f\u0438\u0448\u0438\u0442\u0435 \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e.<\/p>\n<p>\u041d\u0435 \u043d\u0430\u0439\u0434\u044f \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043a\u0443\u0447\u0435 \u0444\u043e\u0440\u0443\u043c\u043e\u0432, \u044f \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0440\u0435\u0448\u0438\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u0435\u0442\u0435\u0439 \u0441\u043e\u043a\u0435\u0442\u044b. \u0423 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0431\u044b\u043b \u043e\u043f\u044b\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 char&#8217;\u043e\u0432 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u0441\u0442\u0430\u0442\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0443 \u0422\u0430\u043d\u0435\u043d\u0431\u0430\u0443\u043c\u0430, \u041a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0435 \u0441\u0435\u0442\u0438, \u0432 \u0433\u043b\u0430\u0432\u0435 \u043f\u0440\u043e \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u0422\u0430\u043c \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u0440\u0430\u0432\u0434\u0430 \u043d\u0435 \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f &#171;\u043c\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 &#8212; \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440&#187;, \u0430 \u0442\u043e\u043b\u044c\u043a\u043e &#171;\u043e\u0434\u0438\u043d \u043a\u043b\u0438\u0435\u043d\u0442 &#8212; \u043e\u0434\u0438\u043d \u0441\u0435\u0440\u0432\u0435\u0440&#187;. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u043b\u043e\u0447\u043d\u044b\u0439 \u0448\u0438\u0444\u0440 &#8212; \u0441\u0435\u0442\u044c \u0424\u0435\u0439\u0441\u0442\u0435\u043b\u044f. \u041f\u043b\u044e\u0441\u043e\u043c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u043d\u0430\u0434\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e(\u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430) \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f Thread&#8217;\u0430\u043c\u0438, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0431\u0443\u0434\u0435\u0442 \u0431\u0440\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0434\u043b\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f *.tga \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041a\u043e\u0434 \u0441\u0435\u0440\u0432\u0435\u0440\u0430:<\/p>\n<pre><code>#include &lt;iostream&gt; #include &lt;WinSock.h&gt; #pragma comment (lib,\"WS2_32.lib\")  #include &lt;fstream&gt; #include &lt;algorithm&gt; #include &lt;string&gt; #include &lt;iterator&gt; #include &lt;vector&gt; void error(const char* msg) {     \/\/perror(msg);     std::cout&lt;&lt;'\\n'&lt;&lt;WSAGetLastError();     WSACleanup();     std::cin.ignore();     exit(1); } void bzero(char*buf, int l) {     for (int i = 0; i &lt; l; i++)         buf[i] = '\\0'; } struct arg_s {     unsigned char* buffer2;     bool exit; }; char** buffer; struct arg_sa {     struct arg_s* lalk;     int current; }; #define type struct arg_sa int sockfd, * newsockfd;\/\/\u0441\u043b\u0443\u0448\u0430\u044e\u0449\u0438\u0439 \u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0445 \u0441\u043e\u043a\u0435\u0442\u043e\u0432 int buflen2 = 10292000;\/\/\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 \u0434\u043b\u044f RGBA*Width*Height struct sockaddr_in *cli_addr; int* clilen; int currentclient,cc;\/\/\u0441\u0441-\u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u043e \u0441\u0447\u0435\u0442\u0443(\u0434\u043b\u044f \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0430 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f)  typedef unsigned long long uint64_t; typedef unsigned int uint32_t; #define N 8\/\/\u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u043b\u043e\u043a\u0430 #define F32 0xFFFFFFFF uint32_t RK[N];\/\/\u0440\u0430\u0443\u043d\u0434\u043e\u0432\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 #define size64 sizeof(uint64_t) #define ROR(x,n,xsize)((x&gt;&gt;n)|(x&lt;&lt;(xsize-n))) #define ROL(x,n,xsize)((x&lt;&lt;n)|(x&gt;&gt;(xsize-n))) #define RKEY(r)((ROR(K,r*3,size64*8))&amp;F32) const uint64_t K = 0x96EA704CFB1CF671;\/\/\u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f struct hostent* server; uint32_t F(uint32_t subblk, uint32_t key) {     return subblk + key;\/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f } void createRoundKeys() {     for (int i = 0; i &lt; N; i++)         RK[i] = (ROR(K, i * 8, size64 * 8)) &amp; F32; } uint64_t decrypt(uint64_t c_block)\/\/\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0431\u043b\u043e\u043a\u043e\u0432 \u0441\u0435\u0442\u044c\u044e \u0444\u0435\u0439\u0441\u0442\u0435\u043b\u044f {     \/\/select subblocks     uint32_t left = (c_block &gt;&gt; 32) &amp; F32;     uint32_t right = c_block &amp; F32;     uint32_t left_, right_;\/\/subblock in the end of round     for (int r = N - 1; r &gt;= 0; r--)     {         uint32_t fk = F(left, RK[r]);         left_ = left;         right_ = right ^ fk;         if (r &gt; 0)\/\/swap places to next round         {             left = right_;             right = left_;         }         else \/\/last round not swap         {             left = left_;             right = right_;         }     }     \/\/collect subblock in block     uint64_t block = left;     block = (block &lt;&lt; 32) | (right &amp; F32);     return block; } void session_(LPVOID args)\/\/\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 \u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 {     int current = currentclient++;     bzero((char*)&amp;(cli_addr[current]), sizeof(&amp;(cli_addr[current])));     newsockfd[current] = accept(sockfd, (struct sockaddr*)&amp;(cli_addr[current]), &amp;(clilen[current]));     if (newsockfd[current] &lt; 0)     {         error(\"Error on accept\\n\");     }     char* s = new char[100];     int n = recv(newsockfd[current], s, 100, 0);     int buflen2 = atoi(s);\/\/\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0438\u0441\u043b\u043e \u0431\u0430\u0439\u0442\u043e\u0432 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f     FILE* f;     std::string name = \"Screen\";     cc++;     _itoa_s(cc, s, 100, 10);     name += s;     name += \".tga\";     fopen_s(&amp;f,name.c_str(), \"wb\");\/\/\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0449\u0438\u043c\u0441\u044f \u043d\u0430 1 \u0438\u043c\u0435\u043d\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c     if (f != NULL)     {         unsigned char tgaHeader[12] = { 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0 };         unsigned char header[6];         n = recv(newsockfd[current], buffer[current], sizeof(tgaHeader), 0);         fwrite((unsigned char*)buffer[current], 1, sizeof(tgaHeader), f);         bzero(buffer[current], buflen2);         n = recv(newsockfd[current], buffer[current],sizeof(header), 0);         fwrite((unsigned char*)buffer[current], 1, sizeof(header), f);\/\/\u0437\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0445\u0438\u0434\u0435\u0440\u044b         bzero(buffer[current], buflen2);         n = recv(newsockfd[current], buffer[current], buflen2, 0);\/\/\u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u0430\u0439\u0442\u044b \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f         \/\/         \/\/\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0431\u0430\u0439\u0442\u043e\u0432         createRoundKeys();         unsigned long long id;         std::vector&lt;uint64_t&gt;* plaintext = new std::vector&lt;uint64_t&gt;();         int i = 0;         while (i&lt;buflen2)         {             memcpy(&amp;id, (buffer[current]) + i, N);             plaintext-&gt;push_back(decrypt(id));             i += 8;         }         std::cout &lt;&lt; \"i=\" &lt;&lt; i &lt;&lt; std::endl;         i = 0;         char str_[N + 1];         memset(str_, 0, N);         str_[N] = '\\0';         for (std::vector&lt;uint64_t&gt;::iterator it = plaintext-&gt;begin(); it != plaintext-&gt;end(); ++it)         {             memcpy(str_, &amp;*it, N);             fwrite((unsigned char*)str_, sizeof(unsigned char), N\/*strlen(str_)*\/, f);             i += 8;         }         std::cout &lt;&lt; \"i=\" &lt;&lt; i &lt;&lt; std::endl;         \/\/\u043a\u043e\u043d\u0435\u0446 \u0440\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0431\u0430\u0439\u0442\u043e\u0432         \/\/fwrite((unsigned char*)buffer[current], sizeof(char), buflen2, f);         fclose(f);     }     system(name.c_str());\/\/\u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 *.tga \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u043e\u043c } int main() {     cc = 0;     WSADATA ws = { 0 };     if (WSAStartup(MAKEWORD(2, 2), &amp;ws) == 0)     {         currentclient = 0;         int maxclients = 2;\/\/\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432         cli_addr = new struct sockaddr_in[maxclients];         clilen = new int[maxclients];         buffer = new char* [maxclients];         for (int i = 0; i &lt; maxclients; i++)         {             clilen[i] = sizeof(cli_addr[i]);         }         sockfd = socket(AF_INET, SOCK_STREAM, 0);\/\/tcp \u0441\u043e\u043a\u0435\u0442         if (sockfd &lt; 0)             error(\"ERROR opening socket\");         struct sockaddr_in serv_addr;         bzero((char*)&amp;serv_addr, sizeof(serv_addr));         serv_addr.sin_family = AF_INET;         serv_addr.sin_addr.s_addr = INADDR_ANY;         int port = 30000;\/\/\u043f\u043e\u0440\u0442         serv_addr.sin_port = htons(port);         if (bind(sockfd, (struct sockaddr*)&amp;serv_addr, sizeof(serv_addr)) &lt; 0)             error(\"ERROR on binding\");         if (listen(sockfd, 10) &lt; 0)             error(\"ERROR listen\");         HANDLE* thread;\/\/\u043c\u0430\u0441\u0441\u0438\u0432 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439         struct arg_sa* args;         while (true)         {             newsockfd = new int[maxclients];             thread = (HANDLE*)malloc(sizeof(HANDLE) * maxclients);             args = new struct arg_sa[maxclients];             for (int i = 0; i &lt; maxclients; i++)             {                 args[i].lalk = new struct arg_s();                 buffer[i] = new char[buflen2];             }             int i = -1;             while (++i &lt; maxclients)             {                 Sleep(1);                 args[i].current = i;                 args[i].lalk-&gt;exit = false;                 thread[i] = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)(session_), args, 0, 0);             }                 for (int i = 0; i &lt; maxclients; i++)                     WaitForSingleObject(thread[i], INFINITE);\/\/\u0436\u0434\u0435\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432             i = -1;             while (++i &lt; maxclients)             {                 shutdown(newsockfd[i], 0);                 TerminateThread(thread[i], 0);             }             \/\/delete[] newsockfd;             \/\/free(thread);             currentclient = 0;             for (int i = 0; i &lt; maxclients; i++)             {                 \/\/delete args[i].lalk;                 \/\/delete[] args[i].lalk-&gt;buffer;             }             \/\/delete[] args;         }         shutdown(sockfd, 0);         WSACleanup();         return 0;     }     std::cin.ignore(); }<\/code><\/pre>\n<p>\u0412\u043a\u0440\u0430\u0442\u0446\u0435 \u0432 \u0432\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a\u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0436\u0434\u0443\u0442 accept \u043f\u043e\u043a\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0441\u044f.  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e WaitForSingleObject \u0436\u0434\u0435\u0442 \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0434\u0443\u0442. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0441\u0432\u043e\u0439 \u0441\u043e\u043a\u0435\u0442 \u0438 \u0441\u0432\u043e\u0439 \u0431\u0443\u0444\u0435\u0440 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 M+1 \u0441\u043e\u043a\u0435\u0442, \u0433\u0434\u0435 M \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432. \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0447, \u0432\u0441\u0451 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f.  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u043b\u0438\u0435\u043d\u0442:<\/p>\n<pre><code>#include &lt;iostream&gt; #include &lt;WinSock.h&gt; #include &lt;vector&gt; #pragma comment (lib,\"WS2_32.lib\") void error(const char* msg) {<\/code><\/pre>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-310398","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310398","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=310398"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310398\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=310398"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=310398"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=310398"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}