{"id":349197,"date":"2023-06-22T15:00:35","date_gmt":"2023-06-22T15:00:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=349197"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=349197","title":{"rendered":"<span>\u0412\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f DDoS-\u0430\u0442\u0430\u043a \u043d\u0430 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0443\u044e \u0418\u0422-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443<\/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<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/921\/715\/99b\/92171599bb466f12265c1074370ddcb5.png\" width=\"1667\" height=\"1111\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/921\/715\/99b\/92171599bb466f12265c1074370ddcb5.png\"\/><\/figure>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0430\u043f\u0440\u0435\u043b\u044f 2023 \u0433\u043e\u0434\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0445\u043e\u0441\u0442\u043e\u0432 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b mhddos_proxy_linux_arm64 (MD5: 9e39f69350ad6599420bbd66e2715fcb), \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c. \u041f\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 (DDoS), \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u0438\u0432 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u0418\u0422-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u0445\u043e\u0441\u0442\u0430\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 TCP\/IP \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0439 \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u2013 \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u0430\u043c\u043e\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u044b\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u043b\u0438 \u043f\u043e\u0445\u0438\u0449\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441 \u043d\u0435\u0433\u043e \u2013 \u043d\u0438 \u043e\u0434\u0438\u043d \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c \u0438 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0410 \u0432\u0435\u0434\u044c \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043f\u0440\u0435\u0434\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u0438\u044e \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445, \u043d\u0430\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443 \u0420\u0424, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0435\u0435, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044f \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. <\/p>\n<figure class=\"bordered\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c7f\/a9b\/874\/c7fa9b8744c67bb3283948d99ec39f18.png\" width=\"436\" height=\"393\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c7f\/a9b\/874\/c7fa9b8744c67bb3283948d99ec39f18.png\"\/><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441 \u0446\u0435\u043b\u044c\u044e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0435\u0433\u043e \u0446\u0435\u043b\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0418\u0411\/\u0418\u0422, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u044f\u0437\u044b\u043a\u0430 Python \u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0435\u043b\u0435\u0439, \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p><a href=\"#1\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c <\/a>\u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0437\u043d\u0430\u043d\u0438\u044f Python. \u0414\u043b\u044f <a href=\"#2\">\u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430. \u0410 \u0432 <a href=\"#3\">\u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 <\/a>\u0441\u0442\u0430\u0442\u044c\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0435 \u0437\u043d\u0430\u043d\u0438\u044f Python \u0438 C, \u0438\u043b\u0438 \u0436\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0430 \u043d\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 &#8212; \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a <a href=\"#end\">\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e<\/a>.<\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h2> Level 1: Easy. \u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u043c L7\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <\/h2>\n<p>\u00a0<\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0433\u0443\u0433\u043b\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u201cmhddos\u201d \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435 <a href=\"https:\/\/github.com\/MatrixTM\/MHDDoS\">mhddos<\/a>. \u042d\u0442\u043e \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, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0441\u0442\u0440\u0435\u0441\u0441-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 OSI (Layer 4 &#8212; \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0438 Layer 7 &#8212; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439) \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u0445\u043e\u0434\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u043f\u0447 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0430\u0439\u0442\u043e\u0432 \u043e\u0442 DDoS-\u0430\u0442\u0430\u043a, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0438 \u043b\u044e\u0431\u043e\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0441\u043e \u0437\u043d\u0430\u043d\u0438\u0435\u043c Python \u043c\u043e\u0436\u0435\u0442 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e MHDDoS \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438, \u0430 \u043d\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\u2026\u00a0 <\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 &#171;mhddos_proxy&#187; \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy\">mhddos_proxy <\/a>\u0438 \u0435\u0433\u043e <a href=\"https:\/\/telegra.ph\/MHDDoS-Proxy-03-13\">\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <\/a>\u0432 Telegraph \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u043e\u0432, \u0441\u0435\u0442\u0443\u044e\u0449\u0438\u0445 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 mhddos \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043d\u043e\u0432\u0443\u044e, \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0435\u043b\u0435\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439. \u0427\u0442\u043e \u0436, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 Python \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u0432\u0435\u0434\u044c? \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0439\u0434\u0451\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0446\u0435\u043b\u0435\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, \u0434\u0435\u043b\u043e\u0432 \u043d\u0430 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442!<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9fc\/ddc\/def\/9fcddcdef8ca67882ac7d32b5ec88a2c.png\" alt=\"\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0438\u0442\u043e\u043d\" title=\"\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0438\u0442\u043e\u043d\" width=\"554\" height=\"554\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9fc\/ddc\/def\/9fcddcdef8ca67882ac7d32b5ec88a2c.png\"\/><\/p>\n<div><figcaption>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0438\u0442\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0432 \u0433\u043b\u0430\u0437\u0430 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b config.json:<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/efb\/232\/b69\/efb232b698e410b763e329cf57dd887a.png\" alt=\"\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\" title=\"\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\" width=\"947\" height=\"364\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/efb\/232\/b69\/efb232b698e410b763e329cf57dd887a.png\"\/><\/p>\n<div><figcaption>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u043a\u0441\u0435\u0439 \u043f\u043e \u044d\u0442\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0443\u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u2013 \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u201c1(2,3,4).txt\u201d, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u201c11.txt\u201d, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 mhddos_proxy. <\/p>\n<p>URL\u00a0 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 (\u0444\u0430\u0439\u043b \u201c11.txt\u201d) \u0432\u0441\u0435 \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0438 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 11.txt \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0435\u043a\u0441\u0442:<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c2b\/710\/6ad\/c2b7106ad213b5ed1b3f3b5017ffa2c5.png\" alt=\"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 11.txt\" title=\"\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 11.txt\" width=\"907\" height=\"135\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c2b\/710\/6ad\/c2b7106ad213b5ed1b3f3b5017ffa2c5.png\"\/><\/p>\n<div><figcaption>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 11.txt<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0417\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043e\u0434\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u201cconfig.json\u201d\u00a0 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 _possibly_decrypt \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>src\/targets.py<\/strong>:<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/11c\/28c\/ad3\/11c28cad30596ba8d8abe7b7c79cd2be.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u0430 src\/targets.py\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u0430 src\/targets.py\" width=\"900\" height=\"333\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/11c\/28c\/ad3\/11c28cad30596ba8d8abe7b7c79cd2be.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u0430 src\/targets.py<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 4 \u0431\u0430\u0439\u0442\u0430 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432\u0435\u0440\u0441\u0438\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 <strong>ENC_KEYS<\/strong>, \u0438 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0438\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>ChaCha20Poly1305<\/strong>. \u0421\u0430\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u043a\u043b\u044e\u0447\u043e\u043c:<\/p>\n<pre><code class=\"python\">\u00a0ENC_KEYS = {b'\\xe4\\xdc\\xf7\\x1f': b'fZPK2OTLiNdqVDBxJTSMuph\/rfLzpFWHDmHC1\/+rR1s='}<\/code><\/pre>\n<p>\u0418 \u043e\u043d\u0430 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 4-\u043c\u044f \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 11.txt. \u0427\u0442\u043e \u0436, \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0438 \u043c\u044b \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e: \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 cryptography \u0434\u043b\u044f python). \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435:<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/04f\/968\/fe5\/04f968fe5cd1d92d48246682830d89ea.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 \u0434\u043b\u044f DDoS-\u0430\u0442\u0430\u043a\u0438\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 \u0434\u043b\u044f DDoS-\u0430\u0442\u0430\u043a\u0438\" width=\"843\" height=\"184\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/04f\/968\/fe5\/04f968fe5cd1d92d48246682830d89ea.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 \u0434\u043b\u044f DDoS-\u0430\u0442\u0430\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0438\u043c\u0435\u043d\u043d\u043e &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u043a\u043e\u043b\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0441\u043e\u0442 URL-\u043e\u0432 \u0441\u0430\u0439\u0442\u043e\u0432 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439, \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0443\u0441\u043b\u0443\u0433. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0432 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 base64 \u0438\u043b\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u043a\u043e\u043b\u043e 500 URL-\u043e\u0432, \u0432\u043e\u0442 \u043b\u0438\u0448\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>URLs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>https:\/\/lk.mid.ru\/ https:\/\/dgp.mid.ru\/ http:\/\/www.college-mid.ru\/ HTTP_TEMPLATE https:\/\/zp2020.midpass.ru\/ https:\/\/biopassportmid.midpass.ru\/ https:\/\/www.muiv.ru\/abiturient\/epk\/#epk_form http:\/\/nnovcons.ru\/obrazovanie\/abiturientam\/ http:\/\/inn.fsb.ru\/pages\/02-rules.html https:\/\/ngieu.ru\/algoritm_postupleniya https:\/\/nnov.hse.ru\/bacnn https:\/\/pk.hse.ru\/ https:\/\/niu.ranepa.ru\/abitur\/bachelor\/ https:\/\/lk.ranepa.ru\/pk\/auth.php https:\/\/lka.nngasu.ru\/register https:\/\/lk.belgorod.ru post http:\/\/beladm.ru get https:\/\/tdpra.ru get http:\/\/93.170.82.246 post<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u043d\u0451\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432   <a href=\"https:\/\/github.com\/ogre2007\/mhddos_proxy_config\/blob\/main\/mhddos_urls.txt\">\u0444\u0430\u0439\u043b\u0435<\/a>. <\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 500 \u0441\u0441\u044b\u043b\u043e\u043a. \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b \u041c\u0418\u0414 \u0420\u0424 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0411\u0438\u043b\u0430\u0439\u043d\u0430, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0438 \u0442\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u2013 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0433\u0443\u0441\u0442\u043e. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0443\u0436\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043b\u044e\u0447\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043c\u0435\u043d\u043e\u0432.<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0442\u0438\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439: \u0432 \u0444\u0430\u0439\u043b\u0435 <code>src\/exclude.py<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 IP (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, Cloudflare, DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 Google), \u0430 \u0432 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy\/blob\/main\/src\/vendor\/rotate.py\">src\/vendor\/rotate.py<\/a> \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u0442\u0430\u043a\u0430 \u043f\u043e \u0434\u043e\u043c\u0435\u043d\u0430\u043c \u0437\u043e\u043d\u044b .ua. \u041c\u043e\u0436\u0435\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f base64 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e https:\/\/www.base64decode.org\/), \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u044f \u0442\u0435\u043a\u0441\u0442 \u0432 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 hex-\u0441\u0442\u0440\u043e\u043a\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/codepen.io\/kamakalolii\/pen\/RKNoMr\">https:\/\/codepen.io\/kamakalolii\/pen\/RKNoMr<\/a>), \u0438 \u0441\u043c\u0435\u0449\u0430\u044f \u0442\u0435\u043a\u0441\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e rot13 (<a href=\"https:\/\/rot13.com\/\">https:\/\/rot13.com\/<\/a>). \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u044b\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u043c Python \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"python\">from yarl import URL suffix = '.ua' params = [ (URL('https:\/\/profile.sber.ru'), '84.252.144.102'), (URL('https:\/\/3dsec.sberbank.ru'), '62.76.205.110'), (URL('https:\/\/cdek.ru'), '178.248.238.208'), (URL('https:\/\/lk.platon.ru'), '83.169.194.22'), (URL('https:\/\/auth.kontur.ru'), '46.17.206.15'), ]<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy\/blob\/main\/src\/vendor\/useragents.py\">src\/vendor\/useragents.py<\/a> \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 Useragent-\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0430\u0439\u0442\u0430\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u0438\u043c\u0438\u043a\u0440\u0438\u0438 \u043f\u043e\u0434 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430. <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 src\/utils.py \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0431\u043e\u0442\u043e\u0432 \u043d\u0430 \u0413\u043e\u0441\u0443\u0441\u043b\u0443\u0433\u0430\u0445 (\u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 Cookie): <\/p>\n<pre><code class=\"python\">mhddos_proxy\/src\/utils.py class GOSSolver: DEFAULT_A = 1800 MAX_RPC = 100 OWN_IP_KEY = \"OWN\" _path = 'https:\/\/www.gosuslugi.ru\/__jsch\/schema.json' _verifier = b'__jsch\/static\/script.js' #... def solve(self, ua, resp, *, cache_key: str) -&amp;gt; Tuple[int, Dict[str, str]]:     a, ip, cn = resp[\"a\"], resp[\"ip\"], resp[\"cn\"]     bucket = self.time_bucket(a)     value = f\"{ua}:{ip}:{bucket}\"      hasher = md5     for pos in range(10_000_000):         response = hasher(f'{value}{pos}'.encode()).hexdigest()         if response[6:10] == '3fe3':             cookies = {                 cn: response.upper(),                 f\"{cn}_2\": pos,                 f\"{cn}_3\": crc32(value.encode())             }             self._cache[cache_key] = (bucket + a, ua, cookies)             return bucket + a, cookies     raise ValueError(\"invalid input\")<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u041d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0444\u0430\u0439\u043b mhddos_proxy_arm64 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c, \u0442\u0430\u043a \u043e\u0442\u043a\u0443\u0434\u0430 \u0436\u0435 \u043e\u043d \u0432\u0437\u044f\u043b\u0441\u044f? \u041e\u0442\u0432\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e python-\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 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b, \u0438 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy_releases\">mhddos_proxy_releases<\/a>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b, \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430.<\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0434\u043b\u044f linux \u043f\u043e\u0434 x86 (mhddos_proxy_linux v81, MD5: a004b948f72c6eb14f348cc698bda16e) &#8212; \u0435\u0451 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c, \u0447\u0435\u043c \u0431\u0438\u043d\u0430\u0440\u044c \u0434\u043b\u044f ARM. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u0438\u0434\u0438\u043c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 _PYI: <\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a8a\/bbf\/f2d\/a8abbff2dae984d6dd3bcd0a408e2daa.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\" width=\"630\" height=\"311\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a8a\/bbf\/f2d\/a8abbff2dae984d6dd3bcd0a408e2daa.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/pyinstaller\/pyinstaller\">PyInstaller<\/a>. \u042d\u0442\u043e \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, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Python-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. <\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<h3>Level 2: Medium. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 PyInstaller<\/h3>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0443\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a\u0430 PyInstaller \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438) \u0432 \u0444\u0430\u0439\u043b\u044b \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 .pyc, \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 Python \u0432 \u0441\u0430\u043c\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0430\u0440\u0445\u0438\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 PyInstaller \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0430\u0440\u0445\u0438\u0432 \u0441 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 (\u043a\u0440\u043e\u043c\u0435 main-\u0441\u043a\u0440\u0438\u043f\u0442\u0430), \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 main-\u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0435\u0437 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 \u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0438\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ea9\/3fd\/de5\/ea93fdde57b46b838133129035f31de1.png\" alt=\"\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\" title=\"\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\" width=\"566\" height=\"566\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ea9\/3fd\/de5\/ea93fdde57b46b838133129035f31de1.png\"\/><\/p>\n<div><figcaption>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434 (\u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u2013 \u0443\u0436\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441).<\/p>\n<h3>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430<\/h3>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0434\u043b\u044f PyInstaller \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u2013\u00a0 <a href=\"https:\/\/github.com\/extremecoders-re\/pyinstxtractor\">https:\/\/github.com\/extremecoders-re\/pyinstxtractor<\/a>. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043e\u0448\u0438\u0431\u043a\u0443:<\/p>\n<pre><code class=\"bash\">$python3.9 pyinstxtractor\/pyinstxtractor.py mhddos_proxy_linux [+] Processing mhddos_proxy_linux [!] Error : Missing cookie, unsupported pyinstaller version or not a pyinstaller archive <\/code><\/pre>\n<p>\u041b\u0435\u0437\u0435\u043c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a\u0430, \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a88\/d9b\/daf\/a88d9bdaf792ff20292f628a412a09a3.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 pyinstxtractor.py\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 pyinstxtractor.py\" width=\"948\" height=\"137\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a88\/d9b\/daf\/a88d9bdaf792ff20292f628a412a09a3.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 pyinstxtractor.py<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 MAGIC \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0430\u0440\u0445\u0438\u0432\u0430 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0445 Python-\u0444\u0430\u0439\u043b\u043e\u0432 \u2013 \u201c<strong>MEI\\014\\013\\012\\013\\016<\/strong>\u201d. \u0427\u0442\u043e \u0436, \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0451 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e, \u0432\u0438\u0434\u0438\u043c\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043b PyInstaller \u0434\u043b\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 mhddos_proxy, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043b\u0435\u0437\u0442\u044c \u0432 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440.<\/p>\n<p>\u0418\u0437\u0443\u0447\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 main, \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>0x4024C0<\/strong>, \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0449\u0443\u044e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0430\u0440\u0445\u0438\u0432\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435, \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e <strong>0x742F271B6DD36293<\/strong>:<\/p>\n<pre><code class=\"assembly\">loc_4024E5:             ; n mov     edx, 8 mov     rsi, rsp        ; s2 mov     [rsp+28h+cookie], 74h ; 't' ; char mov     [rsp+28h+var_27], 2Fh ; '\/' mov     [rsp+28h+var_26], 27h ; ''' mov     [rsp+28h+var_24], 1Bh mov     [rsp+28h+var_23], 6Dh ; 'm' mov     [rsp+28h+var_22], 0D3h mov     [rsp+28h+var_21], 62h ; 'b' mov     [rsp+28h+var_25], 93h call    find_cookie test    rax, rax mov     rbx, rax jz      loc_4026B0<\/code><\/pre>\n<p>\u041f\u043e\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c pyinstxtractor.py \u0442\u0443\u0442 \u0436\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cd5\/52b\/086\/cd552b086f82498b3e76f4a3abbfc00b.png\" alt=\"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0430\u0440\u0445\u0438\u0432\u0430\" title=\"\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0430\u0440\u0445\u0438\u0432\u0430\" width=\"596\" height=\"220\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cd5\/52b\/086\/cd552b086f82498b3e76f4a3abbfc00b.png\"\/><\/p>\n<div><figcaption>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0430\u0440\u0445\u0438\u0432\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 pyinstxtractor \u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u044b XOR-\u043e\u043c \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043d\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/9c7\/111\/6c3\/9c71116c3279c8b756e1e88160527a2f.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\" width=\"893\" height=\"311\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9c7\/111\/6c3\/9c71116c3279c8b756e1e88160527a2f.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0440\u0430\u0437\u0431\u043e\u0440\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c pyinstxtractor \u0435\u0449\u0451 \u0440\u0430\u0437, \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 <strong>parseTOC<\/strong> \u0438 <strong>getCArchiveInfo<\/strong>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/770\/71b\/3be\/77071b3be9d527848c5aa1f0f0e007b4.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b parseTOC\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b parseTOC\" width=\"610\" height=\"354\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/770\/71b\/3be\/77071b3be9d527848c5aa1f0f0e007b4.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b parseTOC<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0435\u043d\u043d\u044b\u0439 pyinstxtractor \u0435\u0449\u0451 \u0440\u0430\u0437: <\/p>\n<pre><code class=\"bash\">$python3.9 pyinstxtractor.py mhddos_proxy_linux [+] Processing mhddos_proxy_linux__ [+] Pyinstaller version: 2.1+ [+] Python version: 3.9 [+] Length of package: 25802384 bytes [+] Found 102 files in CArchive [+] Beginning extraction...please standby [+] Possible entry point: pyiboot01_bootstrap.pyc [+] Possible entry point: pyi_rth_inspect.pyc [+] Possible entry point: pyi_rth_subprocess.pyc [+] Possible entry point: pyi_rth_pkgutil.pyc [+] Possible entry point: pyi_rth_multiprocessing.pyc [+] Possible entry point: runner.pyc [+] Found 695 files in PYZ archive [!] Error: Failed to decompress PYZ-00.pyz_extracted\/OpenSSL\/__init__.pyc, probably encrypted. Extracting as is. [!] Error: Failed to decompress PYZ-00.pyz_extracted\/OpenSSL\/SSL.pyc, probably encrypted. Extracting as is. ... $ls faker\/ libssl.so.1.0.0.i64 pyimod00_crypto_key.pyc PYZ-00.pyz frozenlist\/ \\ libtinfo.so.5 pyimod01_os_path.pyc _cffi_backend.cpython-39-x86_64-linux-gnu.so \\ libz.so.1 pyimod02_archive.pyc aiohttp\/ lib-dynload\/ pyimod03_importers.pyc \\ libbz2.so.1.0 markupsafe\/ pyimod04_ctypes.pyc base_library.zip libcrypto.so.1.0.0 \\ pytransform.so bin libcrypto.so.1.0.0.i64 certifi libffi.so.6 multidict\/ \\ cryptography\/ libgcc_s.so.1 cryptography-37.0.2.dist-info\/ liblzma.so.5 psutil\/ \\ libncursesw.so.5 pyi_rth_inspect.pyc struct.pyc libpython3.9.so.1.0 \\ pyi_rth_multiprocessing.pyc libpython3.9.so.1.0_copy pyi_rth_pkgutil.pyc \\ tinyaes.cpython-39-x86_64-linux-gnu.so libpython3.9.so.1.0_copy.idc \\ pyi_rth_subprocess.pyc uvloop libssl.so.1.0.0 pyiboot01_bootstrap.pyc yarl<\/code><\/pre>\n<p>\u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435. \u0411\u044b\u043b\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u044b \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 PYZ (\u0435\u0449\u0451 \u043e\u0434\u0438\u043d \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0430\u043c\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f Python-\u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u0432 \u043d\u0430\u0448\u0435\u0439 \u043c\u0430\u0442\u0440\u0451\u0448\u043a\u0435). \u0421\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440: <a href=\"https:\/\/faker.readthedocs.io\/en\/master\/locales\/ru_RU.html\">faker<\/a> &#8212; \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0432\u044b\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 DDoS-\u0430\u0442\u0430\u043a\u0438.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0441\u0430\u043c \u0430\u0440\u0445\u0438\u0432 PYZ \u043d\u0435 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d. \u0412\u0438\u0434\u0438\u043c\u043e, \u043d\u0430\u043c\u0438 \u0443\u0447\u0442\u0435\u043d\u044b \u043d\u0435 \u0432\u0441\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 PyInstaller. <\/p>\n<h3>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 PYZ<\/h3>\n<p>\u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0433\u0443\u0433\u043b \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b <a href=\"https:\/\/0xec.blogspot.com\/2017\/02\/extracting-encrypted-pyinstaller.html\">\u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0435<\/a> \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0432\u0448\u0438\u0435\u0441\u044f \u0441 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439. \u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 PyInstaller \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043b\u044e\u0447 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f PYZ, \u043e\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>pyimod00_crypto_key.py\u0441<\/strong>. \u0414\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 Python \u2013 <a href=\"https:\/\/github.com\/zrax\/pycdc\">Decompyle++<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u043b\u044f Python3.9, \u0442.\u043a. \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0430\u0432\u0442\u043e\u0440\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 mhddos_proxy. <\/p>\n<pre><code class=\"python\">$pycdc pyimod00_crypto_key.pyc # Source Generated with Decompyle++ # File: pyimod00_crypto_key.pyc (Python 3.9) key = '7848c0e62fdae63e'<\/code><\/pre>\n<p>\u0411\u0438\u043d\u0433\u043e! \u041e\u0434\u043d\u0430\u043a\u043e \u0432\u0437\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0432 pyinstxtractor \u0443 \u0432\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f. \u0410 \u0432\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0441\u0445\u0435\u043c\u044b \u0438 \u0440\u0435\u0436\u0438\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f AES \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f PYZ-\u0430\u0440\u0445\u0438\u0432\u0430 \u0432 PyInstaller \u0440\u0430\u0437\u043d\u044f\u0442\u0441\u044f \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a \u0432\u0435\u0440\u0441\u0438\u0438, \u0438 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u043b\u0438 \u0431\u044b\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u0449\u0435\u0442\u043d\u044b\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 AES \u0438 \u043d\u0443\u0436\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441\u043f\u043e\u0441\u043e\u0431\u0443: \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 PyInstaller \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a\u0430, \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043c \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 <strong>ZlibArchiveReader<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0443\u0436\u0435 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u043e\u043c \u043d\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u0435 <strong>pyimod02_archive.pyc<\/strong>:<\/p>\n<pre><code class=\"python\">$pycdc pyimod02_archive.pyc # Source Generated with Decompyle++ # File: pyimod02_archive.pyc (Python 3.9) ...  class Cipher: \u00a0\u00a0\u00a0 ''' \u00a0\u00a0\u00a0 This class is used only to decrypt Python modules. \u00a0\u00a0\u00a0 ''' \u00a0\u00a0\u00a0 def __create_cipher(self, iv): \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return self._aesmod.AES(self.key.encode(), iv) \u00a0\u00a0\u00a0 def decrypt(self, data): \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 cipher = self.__create_cipher(data[:CRYPT_BLOCK_SIZE]) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return cipher.CTR_xcrypt_buffer(data[CRYPT_BLOCK_SIZE:]) ... class ZlibArchiveReader(ArchiveReader): \u00a0\u00a0\u00a0 ''' \u00a0\u00a0\u00a0 ZlibArchive - an archive with compressed entries. Archive is read from the executable created by PyInstaller. \u00a0\u00a0\u00a0 This archive is used for bundling python modules inside the executable. \u00a0\u00a0\u00a0 NOTE: The whole ZlibArchive (PYZ) is compressed, so it is not necessary to compress individual modules. \u00a0\u00a0\u00a0 ''' \u00a0\u00a0\u00a0 MAGIC = b'PYZ\\x00' \u00a0\u00a0\u00a0 TOCPOS = 8 \u00a0\u00a0\u00a0 HDRLEN = ArchiveReader.HDRLEN + 5 def extract(self, name):  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ...<\/code><\/pre>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u0443\u0442 \u0436\u0435, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u044d\u0442\u043e\u0442 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0438\u0437 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 Python? \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043a\u043e\u0440\u043e\u0442\u043a\u043e \u0438 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u043e:<\/p>\n<pre><code class=\"python\">from pyimod02_archive import ZlibArchiveReader import sys, os arch = ZlibArchiveReader(\"PYZ-00.pyz\") os.makedirs(\"PYZ-00.pyz_extracted\") for toc_name in arch.contents(): typ, obj = arch.extract(toc_name) filename = \".\/PYZ-00.pyz_extracted\/\" + toc_name.replace(\".\", \"\/\") if typ == 1: os.makedirs(filename, exist_ok=True) filename += \"\/init\" filename += \".pyc\" with open(filename, 'wb') as f: f.write(obj)<\/code><\/pre>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0441\u043a\u0440\u0438\u043f\u0442 \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c PYZ, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0432\u0441\u0435 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 mhddos_proxy.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/80f\/055\/952\/80f0559523fd99d8a5d15481150b9a2c.png\" alt=\"\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 PYZ\" title=\"\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 PYZ\" width=\"927\" height=\"547\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/80f\/055\/952\/80f0559523fd99d8a5d15481150b9a2c.png\"\/><\/p>\n<div><figcaption>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 PYZ<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0430\u043f\u043a\u0443 src, \u0432\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043a\u043e\u0434 mhddos_proxy \u043f\u0440\u043e\u0448\u043b\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u0432 \u043d\u0435\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e4b\/8e7\/bda\/e4b8e7bdab495e65f87093b8ba3100de.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \/src\/\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \/src\/\" width=\"883\" height=\"376\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e4b\/8e7\/bda\/e4b8e7bdab495e65f87093b8ba3100de.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 \/src\/<\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u0430\u0441\u044c, \u0438 \u0432 \u043f\u0430\u043f\u043a\u0435 bypass \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 DDoS \u0430\u0442\u0430\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u2013 <strong>DDOS-Guard, Variti, Qrator, Stormwall<\/strong>. <\/p>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u043d\u0430\u0448\u0438 \u0441\u0442\u0430\u0440\u0430\u043d\u0438\u044f \u043e\u043a\u0443\u043f\u0438\u043b\u0438\u0441\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0438\u043b\u0438 \u0436\u0435, \u0432 \u043a\u0440\u0430\u0439\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 Python, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043c\u043e\u0436\u0435\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e, \u0434\u0430? \u041f\u0440\u043e\u0431\u0443\u0435\u043c:<\/p>\n<pre><code class=\"python\">$pycdc runner.pyc # Source Generated with Decompyle++ # File: runner.pyc (Python 3.9) from pytransform import pyarmor pyarmor(name,file,b'PYARMOR\\x00\\x00\\x03\\t\\x00a\\r\\r\\n\\x08\\xa0\\x01\\x01\\x00' '\\x00\\x00\\x01\\x00\\x00\\x00@\\x00\\x00\\x00aP\\x00\\x00\\x0b\\x00\\x00z\\xe9\\xb4G\\x1e' '\\xd1\\x1b\\xe9\\x1b\\x9d\\xf4\\x86\\xf5\\x19V\\x18&lt;\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00' '\\x97\\xf1\\xaa!h\\x0fu\\xaeIO\\t\\x98\\xcf\\xd6\\xd5\\xb8O\\xb7\\xdd\\xe8\\x00\\x15\\xc4' '\\xe3v\\x98\\xca\\xdd\\xf5xO0V\\x1e\\x0b\\x12?\\xba_i\\x7fX\\x84X\\x0bmW\\x9dA}1\\xfd\\xa1' '\\x10\\x08.\\x98\\x87\\x83\\xe1\\[\\n\\x90K\\x19:\\xb2\\xbex\\x99\\xbe\\xbd\\xf6\\x84\\xa2'E' '\\x05\\rB\\xe8\\x8e\\xc0\\xc33Y\\x7f\\xea\\xcf]f\\xccb\\xbb\\xa7\\x8c\\xfa\\xba\\xf0\\xa5\\xb2' '@1~\\xa8\\xbc\\x97|&lt;\u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f ~17\u0442. \u043d\u0435\u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u044b\u0445 \u0431\u0430\u0439\u0442...>'<\/code><\/pre>\n<figure class=\"bordered\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2e9\/c4c\/936\/2e9c4c9368ac051efd9c33593587fe2a.png\" width=\"439\" height=\"329\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2e9\/c4c\/936\/2e9c4c9368ac051efd9c33593587fe2a.png\"\/><\/figure>\n<p>\u041d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a. \u041f\u043e \u0438\u0442\u043e\u0433\u0443 <strong>runner.pyc<\/strong> \u0438 \u0432\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430 <strong>src<\/strong> \u0438\u0437 PYZ-\u0430\u0440\u0445\u0438\u0432\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u0438\u0434\u0435\u043d \u043b\u0438\u0448\u044c \u0432\u044b\u0437\u043e\u0432 \u043d\u0435\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarmor \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 pytransform. <\/p>\n<p>C\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442 \u0432 \u0433\u0443\u0433\u043b\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u201cpyarmor\u201d \u043d\u0430\u0442\u044b\u043a\u0430\u0435\u043c\u0441\u044f \u043d\u0430 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 Python \u2013 <a href=\"http:\/\/pyarmor.dashingsoft.com\/\">http:\/\/pyarmor.dashingsoft.com\/<\/a>, <a href=\"https:\/\/github.com\/dashingsoft\/pyarmor\">https:\/\/github.com\/dashingsoft\/pyarmor<\/a>.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/143\/a30\/8dd\/143a308ddd2c69b46baf581a0912cf98.png\" width=\"657\" height=\"319\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/143\/a30\/8dd\/143a308ddd2c69b46baf581a0912cf98.png\"\/><\/figure>\n<hr\/>\n<p><a class=\"anchor\" name=\"3\" id=\"3\"><\/a><\/p>\n<h2>Level 3: Hard. \u041e\u0431\u0445\u043e\u0434\u0438\u043c Pyarmor \u0438 \u0438\u0437\u0443\u0447\u0430\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u041f\u0438\u0442\u043e\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f L4 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/h2>\n<p>\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c, \u043d\u043e \u0443 \u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 PyArmor \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441\u0430\u043c\u043e \u043f\u043e \u0441\u0435\u0431\u0435 \u044d\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u0449\u0438\u0442\u044b, \u043d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u2013 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 <strong>\u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442<\/strong> \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430, \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PyArmor.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/261\/43d\/266\/26143d266fa1b71071212ee07e7e4415.png\" alt=\"\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d\" title=\"\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d \" width=\"589\" height=\"589\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/261\/43d\/266\/26143d266fa1b71071212ee07e7e4415.png\"\/><\/p>\n<div><figcaption>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 PyArmor, \u0434\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0441\u043f\u043e\u043c\u043d\u0438\u043c, \u0447\u0442\u043e \u0438\u0437 \u0441\u0435\u0431\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044f\u0437\u044b\u043a Python, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0435\u0433\u043e \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u0430\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 \u0421 \u2013 <strong>CPython<\/strong>. \u0418\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u201c\u043f\u0438\u0448\u0443\u0442 \u043d\u0430 \u043f\u0438\u0442\u043e\u043d\u0435\u201d. \u0415\u0441\u0442\u044c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438: Jython, PyPy, IronPython. <\/p>\n<h3>\u041f\u0440\u0438\u043d\u0446\u0438\u043f \u0440\u0430\u0431\u043e\u0442\u044b CPython<\/h3>\n<p>\u0412\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 CPython \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0442\u0440\u0430\u043d\u0441\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u0431\u0430\u0439\u0442\u043a\u043e\u0434\u00a0\u2014 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u044b\u0439 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0439 \u044f\u0437\u044b\u043a. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u044d\u0442\u043e\u043c \u0441\u0430\u043c\u0438 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>dis<\/strong>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0439 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u0438 \u044d\u0442\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"python\">$python3.9 Python 3.9.16 (main, Dec\u00a0 7 2022, 01:12:08) [GCC 11.3.0] on linux Type \"help\", \"copyright\", \"credits\" or \"license\" for more information. >>> import dis >>> def main(): print(\"Hello, world!\") ... >>> main.__code__ &lt;code object main at 0x7fd40cd5e5b0, file \"&lt;stdin>\", line 1> >>> main.__code__.co_code b't\\x00d\\x01\\x83\\x01\\x01\\x00d\\x00S\\x00' >>> dis.dis(main.__code__) \u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 LOAD_GLOBAL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 (print) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 LOAD_CONST\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 ('Hello, world!') \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4 CALL_FUNCTION\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 1 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 6 POP_TOP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8 LOAD_CONST\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 (None) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10 RETURN_VALUE<\/code><\/pre>\n<p><strong>LOAD_GLOBAL<\/strong>, <strong>LOAD_CONST<\/strong>, \u0438 \u0442.\u0434. \u2013 \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430. \u041a\u0430\u043a \u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0431\u0430\u0439\u0442\u043a\u043e\u0434 CPython \u0438\u043c\u0435\u0435\u0442 \u0434\u0432\u043e\u0438\u0447\u043d\u0443\u044e \u0438 \u0443\u0434\u043e\u0431\u043e\u0447\u0438\u0442\u0430\u0435\u043c\u0443\u044e \u0444\u043e\u0440\u043c\u044b. \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u0432\u0443\u0431\u0430\u0439\u0442\u043d\u044b \u2013 \u043f\u0435\u0440\u0432\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0441\u0430\u043c\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0431\u0430\u0439\u0442 \u2013 \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u201c<strong>LOAD_CONST 1<\/strong>\u201d\u00a0 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432 \u0441\u0442\u0435\u043a \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2013 \u2018Hello, world!\u2019). \u0421 \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0439 \u0444\u043e\u0440\u043c\u043e\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u2013 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u0444\u0430\u0439\u043b\u0430\u0445 <strong>.pyc<\/strong>, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. <\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0441\u043b\u0435 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u0438 \u0431\u0430\u0439\u0442\u043a\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f (\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f) \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0435 CPython, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 Python \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044f \u0435\u0433\u043e \u044d\u0442\u0430\u043b\u043e\u043d\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e CPython. \u0418\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439<\/strong> \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439, \u0442\u0430\u043a \u0447\u0442\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u043e\u043d\u044f\u0442\u0438\u044f \u043a\u0430\u043a \u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c \u0434\u0432\u043e\u0438\u0447\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b PyArmor<\/h3>\n<p>\u0421\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0442\u043e\u0440\u0430 PyArmor \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 <a href=\"https:\/\/pyarmor.readthedocs.io\/en\/stable\/tutorial\/getting-started.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e <\/a>\u043f\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430  (\u043e\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a \u0432\u0435\u0440\u0441\u0438\u0438, \u043a\u0430\u043a \u0438 \u0440\u0435\u0436\u0438\u043c\u044b \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438). \u041f\u043e \u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e PyArmor \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0440\u044f\u0434 \u043e\u0431\u0440\u0430\u0442\u0438\u043c\u044b\u0445 \u0438 \u043d\u0435\u043e\u0431\u0440\u0430\u0442\u0438\u043c\u044b\u0445 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0439 \u043d\u0430\u0434 \u043a\u043e\u0434\u043e\u043c:<\/p>\n<ul>\n<li>\n<p><strong>rftmode<\/strong> \u2013 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043b\u044e\u0434\u044f\u043c \u0434\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432, \u043e\u0442 \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 X1, X2, X3 \u0438\u043b\u0438 \u043a\u0430\u043a-\u0442\u043e \u0438\u043d\u0430\u0447\u0435.\u00a0<\/p>\n<\/li>\n<li>\n<p><strong>bccmode<\/strong> \u2013 \u0442\u0440\u0430\u043d\u0441\u043b\u044f\u0446\u0438\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 C \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c? \u041f\u0440\u043e\u0441\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. \u0422\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p><strong>\u041c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f<\/strong> \u2013 \u043a\u0430\u0436\u0434\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c (\u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 .py) \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 (\u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043f\u043e \u043d\u0435\u0440\u0430\u0437\u0431\u043e\u0440\u0447\u0438\u0432\u044b\u043c \u0431\u0430\u0439\u0442\u0430\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438). \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \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 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/strong> \u2013 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u043b\u0430\u0441\u0441\u0430. \u0421\u043f\u043e\u0441\u043e\u0431 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0435 \u0440\u0430\u0437\u0433\u043b\u0430\u0448\u0430\u0435\u0442\u0441\u044f. <\/p>\n<\/li>\n<li>\n<p><strong>\u041e\u0431\u0451\u0440\u0442\u043a\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432<\/strong> \u2013 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043a\u043b\u0430\u0441\u0441\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043b\u0435\u0442\u0443 \u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. <\/p>\n<\/li>\n<li>\n<p><strong>\u0417\u0430\u0449\u0438\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 pytransform<\/strong> \u2013 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043a\u043e\u0434\u0430, JIT-\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0439, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b) Themida \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430 PyArmor \u043d\u0430 Windows.<\/p>\n<\/li>\n<li>\n<p><strong>\u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PyInstaller<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438 \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u0432\u0441\u0451 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u0438\u0441\u043a\u043e\u0440\u0431\u043d\u043e. \u041a\u043e\u0434, \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043d\u044b\u0439 \u0432\u0441\u0435\u043c\u0438 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c. \u0415\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u043d\u0430\u0434\u0435\u0436\u0434\u0430 \u2013 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044f \u044d\u0442\u043e \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0438\u0441\u0441 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u0437\u0430\u0449\u0438\u0449\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435.<\/p>\n<p>\u00a0<\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u0431\u0445\u043e\u0434\u0430 PyArmor<\/h3>\n<p><a class=\"anchor\" name=\"3_3\" id=\"3_3\"><\/a><\/p>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u0436\u0435 \u0441\u0441\u044b\u043b\u043a\u0430 \u0432 \u0433\u0443\u0433\u043b\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u201cpyarmor unpacker\u201d \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u0432\u0430\u0441 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <a href=\"https:\/\/github.com\/Svenskithesource\/PyArmor-Unpacker\">PyArmor-Unpacker<\/a>. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043d\u0430\u0448\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0442.\u043a. \u0432 \u043d\u0451\u043c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b PyArmor \u0438 \u0442\u0430\u043c \u0436\u0435 \u0435\u0441\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0442\u043e\u043f\u0438\u043a \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 <a href=\"https:\/\/forum.tuts4you.com\/topic\/41945-python-pyarmor-my-protector\/\">tuts4you<\/a>, \u0433\u0434\u0435 \u043b\u044e\u0434\u0438 \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u0432\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u043d\u0435\u0447\u0438\u0441\u0442\u0438. <\/p>\n<p>\u0418\u0437 \u044d\u0442\u0438\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438 PyArmor: <\/p>\n<ol>\n<li>\n<p>\u0412\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0430\u043c\u043f\u0438\u0442\u044c \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 (\u043e\u0431\u0445\u043e\u0434 \u0432\u043d\u0435\u0448\u043d\u0435\u0439, \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0438). \u0417\u0430\u0442\u0435\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0438 \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u043d\u043e \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043b\u0435\u0442\u0443 \u0438 \u0434\u0430\u043c\u043f\u0438\u0442\u044c \u0443\u0436\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p>\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0443 \u041f\u0438\u0442\u043e\u043d\u0430 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0435\u0433\u043e, \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/docs.python.org\/3\/library\/sys.html#sys.addaudithook\">https:\/\/docs.python.org\/3\/library\/sys.html#sys.addaudithook<\/a> \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043d\u0430 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0435 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 PyArmor \u043a \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0443 (\u0432 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0430\u0440\u0445\u0438\u0432\u0435 \u043c\u044b \u043c\u043e\u0433\u043b\u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 libpython \u2013 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c).\u00a0 \u0423 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0434\u043e\u0447\u0435\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u2013 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a\u043e\u0434\u0430. \u0414\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u044d\u0442\u043e \u043d\u0435\u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0438\u0441\u0441\u043b\u0435\u0434\u0443\u0435\u043c\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u043c\u0430\u043b\u0432\u0430\u0440\u044c, \u043d\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435\u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0434\u043e\u0431\u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u2013 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0448\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0430 \u043c\u044b \u0434\u0430\u0436\u0435 \u043d\u0435 \u0443\u0441\u043f\u0435\u0435\u043c \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c. \u0418 \u043e\u0442\u043c\u0435\u0442\u0438\u043c \u0441\u0440\u0430\u0437\u0443, \u0447\u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f \u043d\u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 (\u0432\u0432\u0438\u0434\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0438\u043b\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 PyArmor). \u042d\u0442\u043e \u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 PyArmor \u0442\u0430\u043a\u0436\u0435 \u0441\u043b\u0435\u0434\u044f\u0442 \u0437\u0430 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c\u0438 \u0438 \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u044e\u0442 \u0436\u0438\u0437\u043d\u044c \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c. <\/p>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438, \u0437\u0430\u043c\u0435\u0442\u0438\u043c \u0432\u0430\u0436\u043d\u0443\u044e \u0434\u0435\u0442\u0430\u043b\u044c \u2013 PyArmor \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043e\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0443 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u0434\u043b\u044f \u0435\u0451 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f, \u0432\u0435\u0434\u044c \u0432 Linux \u0435\u0441\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f <a href=\"https:\/\/habr.com\/ru\/articles\/199090\/\"><strong>LD_PRELOAD<\/strong><\/a>. \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0432\u043e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0438 \u0432\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435. \u0412 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0444\u0443\u043d\u043a\u0446\u0438\u044e memcpy \u0438\u0437 libc), \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442 \u0438 \u0432\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0438 \u0435\u0441\u043b\u0438 \u0432 \u043d\u0435\u0439 \u043d\u0430\u0439\u0434\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u2013 \u0442\u043e \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u0435\u0451, \u0430 \u043d\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0438\u0437 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. <\/p>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u043a libc \u0438\u043b\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0443 CPython, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u043c\u0443\u0441\u044f \u0432 libpython. \u0412\u0435\u0434\u044c \u043a\u043e\u0434, \u0432\u0441\u0451-\u0442\u0430\u043a\u0438, \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 Python, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u043d \u043a\u0430\u043a-\u0442\u043e \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0443? \u0422\u043e\u0433\u0434\u0430-\u0442\u043e \u043c\u044b \u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043c \u044d\u0442\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u0445 \u0430\u043d\u0430\u043b\u0438\u0437 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u043e\u0439\u0442\u0438 PyArmor, \u0438\u043b\u0438 \u0437\u0430\u0431\u044b\u0442\u044c \u043e \u043d\u0451\u043c \u0432\u043e\u0432\u0441\u0435.<\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 API CPython<\/h3>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u2013 \u0442\u043e\u0436\u0435 \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043d\u043e CPython \u2013 \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0438\u043c\u0435\u0435\u0442 <a href=\"https:\/\/github.com\/python\/cpython\/\">\u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/a> \u0438 \u043b\u0443\u0447\u0448\u0443\u044e <a href=\"https:\/\/docs.python.org\/3.9\/c-api\/index.html\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/a>. <\/p>\n<p>\u0412\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u043a\u043e\u0434\u043e\u043c \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439, \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u043e\u043f\u0440\u043e\u0441 \u2013 \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f? \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043e\u043d \u0443\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d, \u0442\u0443\u0442-\u0442\u043e \u043c\u044b \u0435\u0433\u043e \u0438 \u0441\u0434\u0430\u043c\u043f\u0438\u043c!<\/p>\n<p>\u041f\u043e\u0438\u0441\u043a\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/docs.python.org\/3.9\/c-api\/veryhigh.html#c.PyEval_EvalCode\"><strong>PyEval_EvalCode<\/strong><\/a>. \u0412\u043e\u0442 \u0435\u0451 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430:<\/p>\n<pre><code class=\"cpp\">PyObject* PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals);<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0430 PyObject? \u042d\u0442\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 CPython, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b, \u0432\u043e\u0442 \u0435\u0451 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">typedef ssize_t Py_ssize_t; typedef struct _object { \u00a0 Py_ssize_t ob_refcnt; \u00a0 struct _object ob_type; } PyObject;<\/code><\/pre>\n<p>\u00a0\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u043f\u043b\u044e\u0441 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c:<\/p>\n<pre><code class=\"cpp\">#include &lt;ucontext.h> #include &lt;dlfcn.h> #include &lt;fcntl.h> #include &lt;link.h> #include &lt;stdio.h> #include &lt;stdlib.h> #include &lt;string.h> static void _libhook_init() attribute((constructor)); static void _libhook_init() { printf(\"[] Hook actviated.\\n\"); }<\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439. \u0422\u0443\u0442 \u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u0446\u0435\u043b\u0435\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0432 \u043d\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">static long long (*PyEval_EvalCode_real)(PyCodeObject *, void *, void *) = NULL; long long PyEval_EvalCode(PyCodeObject co, void globals, void locals) { \u00a0 if (!PyEval_EvalCode_real) { \u00a0\u00a0\u00a0 PyEval_EvalCode_real = dlsym(-1, \"PyEval_EvalCode\"); \u00a0 } \u00a0 printf(\"[] hooked PyEval_EvalCode(%p, %p, %p)\", co, globals, locals); \u00a0 PyObject retval = PyEval_EvalCode_real(co, globals, locals); \u00a0 return retval; }<\/code><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b PyEval_EvalCode_real, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0417\u0430\u0442\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e PyEval_EvalCode \u0441 \u0442\u0435\u043c \u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0443 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0438\u0432\u0430\u0435\u043c\u043e\u0439. \u0412 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b, \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0449\u0451 \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d (\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437), \u0432\u044b\u0432\u043e\u0434\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 printf, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u0432\u0441\u0451, \u043d\u0430\u0448 \u0445\u0443\u043a \u0433\u043e\u0442\u043e\u0432! \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043b\u0438\u0448\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c:<\/p>\n<pre><code class=\"bash\">LD_PRELOAD=..\/..\/src\/ldpreloadhook\/pyarmor_hook.so .\/mhddos_proxy_linux [] Hook actviated. [] Hook actviated. [] Hook actviated. [] hooked PyEval_EvalCode(0x7f4cd56bfa80, 0x7f4cd56bef80, 0x7f4cd56bef80) [] hooked PyEval_EvalCode(0x7f4cd56693a0, 0x7f4cd56ce440, 0x7f4cd56ce440) [*] hooked PyEval_EvalCode(0x7f4cd56902f0, 0x7f4cd5684e80, 0x7f4cd5684e80) ...&lt;\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439>...<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e! \u041f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u0441\u0434\u0435\u043b\u0430\u043d. \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c\u0441\u044f, \u0447\u0442\u043e \u0436\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0434\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041e\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 Python\/ceval.c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f CPython, \u0438 \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0435\u0451 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0437\u043e\u0432\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b _PyEval_EvalCode (<a href=\"https:\/\/github.com\/python\/cpython\/blob\/1528b420b33ae5c636b6016ce6c6afb0b09e7694\/Python\/ceval.c#L4087\">\u043a\u043e\u0434<\/a>), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 _co \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043a \u0442\u0438\u043f\u0443 PyCodeObject. \u042d\u0442\u043e \u0442\u0430 \u0441\u0430\u043c\u0430\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u043c\u044b \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0442\u0430\u043a\u0443\u044e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e dis), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434 Python:<\/p>\n<pre><code class=\"cpp\">typedef struct attribute((aligned(4))) code_obj { \u00a0 PyObject ob_base; \u00a0 int co_argcount; \u00a0 \/\/ &lt;...> \u00a0 PyObject co_code; \u00a0 \/\/ &lt;...> } PyCodeObject;<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0430\u043c\u043f\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u00a0<a href=\"https:\/\/docs.python.org\/3\/c-api\/marshal.html#c.PyMarshal_WriteObjectToFile\">PyMarshal_WriteObjectToFile<\/a>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u043c \u0447\u0435\u0440\u0435\u0437 dlsym. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u043d\u0430\u0448\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">\u00a0\u00a0FILE * fp = fopen(((PyBytesObject)co->co_name)->ob_sval, \"wb\"); \u00a0 PyMarshal_WriteObjectToFile(co, fp, 0); \u00a0 fclose(fp);<\/code><\/pre>\n<p>\u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u0435\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0438\u043f PyBytesObject, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c Python \u0445\u0440\u0430\u043d\u0438\u0442 \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0438\u0442\u043e\u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">typedef struct _varobj { \u00a0 PyObject ob_base; \u00a0 Py_ssize_t ob_size; } PyVarObject; typedef struct { \u00a0 \u00a0\u00a0PyVarObject ob_base; \u00a0\u00a0\u00a0 Py_ssize_t ob_shash[3]; \u00a0\u00a0\u00a0 char ob_sval[1]; } PyBytesObject;<\/code><\/pre>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0434\u0430\u0436\u0435 \u0441\u0434\u0430\u043c\u043f\u0438\u0432 \u044d\u0442\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043d\u0430 \u0432\u0445\u043e\u0434\u0435 PyEval_EvalCode \u043c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043e\u0431\u043e\u0448\u043b\u0438 \u043b\u0438\u0448\u044c \u201c\u0432\u043d\u0435\u0448\u043d\u0435\u0435\u201d \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"python\">>>> import marshal, dis >>> f = open(\".\/&lt;frozen src.crypto>\", \"rb\") >>> co = marshal.load(f) >>> dis.dis(co) \u00a0 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 LOAD_GLOBAL\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 35 (armor_wrap) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 2 CALL_FUNCTION\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4 NOP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 6 RETURN_VALUE \u00a0 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 8 NOP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 10 NOP \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 12 &lt;0> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 14 &lt;0> \u00a0 3\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 16 &lt;149>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 24 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ...&lt;\u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434>...<\/code><\/pre>\n<p>\u0412 \u0445\u0435\u043a\u0441-\u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0432\u0438\u0434\u0438\u043c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435: \u043a\u0443\u0447\u0443 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0438\u043c\u0435\u043d\u0430, \u0441\u0440\u0435\u0434\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>\u201carmor_wrap\u201d.<\/strong><\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b5a\/e76\/983\/b5ae769835490d355fa530dfcb06f5d8.png\" alt=\"\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u0434\u0430\" title=\"\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u0434\u0430\" width=\"716\" height=\"619\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b5a\/e76\/983\/b5ae769835490d355fa530dfcb06f5d8.png\"\/><\/p>\n<div><figcaption>\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0439 \u0434\u0430\u043c\u043f \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u0434\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 CPython \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434? \u041d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430 \u043e\u043d \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>armor_wrap<\/strong>. \u041d\u043e \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0430 \u0432\u0437\u044f\u043b\u0430\u0441\u044c? \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0435\u0433\u043e PyArmor \u0435\u0449\u0451 \u0433\u043b\u0443\u0431\u0436\u0435, \u0438 \u044d\u0442\u043e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u043d\u0451\u0432\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u043e\u0438\u0442\u044c \u043d\u0430\u043c \u043f\u0430\u0440\u044b \u043c\u0438\u043d\u0443\u0442.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bd5\/63c\/1ea\/bd563c1eaa9289d5209886a69596260f.png\" width=\"552\" height=\"438\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bd5\/63c\/1ea\/bd563c1eaa9289d5209886a69596260f.png\"\/><\/figure>\n<h4>\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 PyArmor<\/h4>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 __armor_wrap__ \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0432\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u043d\u0435\u0451, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 002B5D00h \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u043a\u0443, \u0430 \u0434\u0430\u043b\u0435\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 002B5D08h \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0441\u0430\u043c\u0438 \u043d\u0430\u0437\u043e\u0432\u0451\u043c __armor_wrap__func:<\/p>\n<pre><code class=\"assembly\">; \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0435\u043a\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 pytransform.so .data:002B5D00 new_python_method dq offset __armor_wrap__ .data:002B5D00                                         ; DATA XREF: sub_19180+2B\u2191o .data:002B5D00                                         ; sub_19180+49\u2191r .data:002B5D00                                         ; \"__armor_wrap__\" .data:002B5D08                 dq offset __armor_wrap__func .data:002B5D10                 dd 4 .data:002B5D14                 dd 0 .data:002B5D18                 dd 0 .data:002B5D1C                 dd 0<\/code><\/pre>\n<p>\u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 pytransform.so. \u0414\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0438\u0440\u0443\u0435\u043c \u0435\u0451:<\/p>\n<pre><code class=\"assembly\">; .text:0000000000018F70 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 __armor_wrap__func __armor_wrap__func proc near            ; DATA XREF: .data:00000000002B5D08\u2193o buffer          = qword ptr -38h len             = qword ptr -30h ; __unwind {                 push    r13                 push    r12                 push    rbp                 push    rbx                 sub     rsp, 18h                 call    _PyEval_GetFrame                 mov     rbp, [rax+20h]                 lea     rdx, [rsp+38h+len]                 mov     rsi, rsp                 mov     rbx, rax                 mov     r12, [rax+40h]                 mov     r13d, [rax+68h]                 mov     rdi, [rbp+30h]                 call    _PyBytes_AsStringAndSize<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0435\u043a\u0438\u0439 \u0444\u0440\u0435\u0439\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 PyEval_GetFrame. \u041d\u043e \u0447\u0442\u043e \u044d\u0442\u043e \u0437\u0430 \u0444\u0440\u0435\u0439\u043c\u044b? \u00a0<\/p>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442\u044b PyCodeObject \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438 \u2013 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435, \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435. \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u2013 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0431\u043e\u0442\u0430\u044f \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438). \u0410 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0435 CPython \u043f\u0430\u043c\u044f\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0435\u043a\u043e\u043c (\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 CPython \u2013 \u044d\u0442\u043e \u0441\u0442\u0435\u043a\u043e\u0432\u0430\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430). \u0418 \u0441\u0442\u0435\u043a\u043e\u0432\u0430\u044f \u043f\u0430\u043c\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0432 \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0440\u0435\u0439\u043c\u043e\u043c \u2013 <strong>PyFrameObject<\/strong>, \u0437\u0430\u0434\u0430\u044e\u0449\u0438\u043c, \u043a\u0430\u043a\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0441\u0442\u0435\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442. \u0412\u043e\u0442 \u0435\u0433\u043e \u0434\u0435\u0444\u0438\u043d\u0438\u0446\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">typedef struct _frame {   PyVarObject ob_base;   struct _frame *f_back;   PyCodeObject *f_code;   PyObject *f_builtins;   PyObject *f_globals;   PyObject *f_locals;   PyObject **f_valuestack;   PyObject **f_stacktop;   PyObject *f_trace;   char f_trace_lines;   char f_trace_opcodes;   PyObject *f_gen;   int f_lasti;   int f_lineno;   int f_iblock;   char f_executing;   PyTryBlock f_blockstack[20];   PyObject *f_localsplus[1]; } PyFrameObject;<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f, <strong>PyFrameObject<\/strong> \u2013 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430. \u0418\u043c\u0435\u043d\u043d\u043e \u0444\u0440\u0435\u0439\u043c\u0430\u043c\u0438 \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 CPython \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0432 \u0432\u0430\u0448 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\/\u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0412 IDA Pro \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u0432 Ghidra \u2013 \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e. \u0410 \u0432\u0437\u044f\u0442\u044c \u044d\u0442\u0438 \u0442\u0438\u043f\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 libpython.so, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u044b \u0442\u0430\u043a \u0436\u0435 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u043b\u0438 \u0440\u0430\u043d\u0435\u0435 \u0438\u0437 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0430\u0440\u0445\u0438\u0432\u0430 mhddos_proxy, \u0432\u0435\u0434\u044c \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0438 \u0442\u0438\u043f\u044b! \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0438\u0445 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 IDB \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e (\u0438 \u0432 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435). <\/p>\n<p>\u041d\u043e \u0437\u0430\u0447\u0435\u043c PyArmor \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a \u043d\u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0443\u043f \u0432 <strong>__armor_wrap__<\/strong>? \u041e\u0442\u0432\u0435\u0442 \u0436\u0434\u0451\u0442 \u043d\u0430\u0441 \u0434\u0430\u043b\u044c\u0448\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>18AC0h<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 __armor_wrap__: <\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/b4e\/60f\/d64\/b4e60fd64e3483be019ed27b681e4d1b.png\" alt=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 18AC0h\" title=\"\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 18AC0h\" width=\"893\" height=\"584\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/b4e\/60f\/d64\/b4e60fd64e3483be019ed27b681e4d1b.png\"\/><\/p>\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 18AC0h<\/figcaption><\/div>\n<\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0451 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0434 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e, \u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <strong>9190h<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043d\u0430\u0437\u0432\u0430\u043b <strong>pyarm<\/strong>, \u0430 \u0437\u0430\u0442\u0435\u043c, \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043a\u0440\u0438\u043f\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c <strong>\u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0441\u043d\u043e\u0432\u0430<\/strong>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430, \u0430 \u0437\u0430\u0442\u0435\u043c \u0441\u043d\u043e\u0432\u0430 \u0435\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0442\u043e \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c\u0438? \u0422\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0447\u0435\u043c \u0435\u0433\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442, \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u044e\u0442 \u043e\u0431\u0440\u0430\u0442\u043d\u043e? \u0423\u0436\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0438\u0441\u044c? <\/p>\n<p>\u041b\u0438\u0447\u043d\u043e \u044f \u043d\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u043b\u0441\u044f, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f pyarm, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438, \u0432\u0435\u0441\u0438\u0442 \u0446\u0435\u043b\u044b\u0445 50 (!) \u041a\u0411.\u00a0 \u0427\u0442\u043e\u0431\u044b \u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438 \u2013 1 \u043c\u0430\u0448\u0438\u043d\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043d\u0430 x86-x64 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c 4-5 \u0431\u0430\u0439\u0442, \u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430\u0448\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 10 \u0442\u044b\u0441\u044f\u0447 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0435\u0451 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 ~146 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a. \u0411\u043e\u043b\u044c\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b switch-case \u0432 \u043f\u0430\u0440\u0435 \u0441 goto.\u00a0 \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 CFG \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u043e\u0432:<\/p>\n<figure class=\"bordered\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/374\/815\/367\/3748153671f303d3f00aea3e62cc01b1.png\" alt=\"CFG \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarm\" title=\"CFG \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarm\" width=\"297\" height=\"693\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/374\/815\/367\/3748153671f303d3f00aea3e62cc01b1.png\"\/><\/p>\n<div><figcaption>CFG \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarm<\/figcaption><\/div>\n<\/figure>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c1e\/df8\/f3e\/c1edf8f3e030c01c6c4e18bad6491a6f.png\" width=\"597\" height=\"368\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c1e\/df8\/f3e\/c1edf8f3e030c01c6c4e18bad6491a6f.png\"\/><\/figure>\n<p>\u0411\u0435\u0437 \u043e\u043f\u044b\u0442\u0430 \u0438 \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 CPython \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0431\u044b \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f. \u041d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0432 \u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 <a href=\"https:\/\/github.com\/python\/cpython\/blob\/1528b420b33ae5c636b6016ce6c6afb0b09e7694\/Python\/ceval.%D1%81\">eval.c<\/a> \u0438\u0437 CPython, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c (\u043d\u0435 \u0431\u0443\u0434\u0443 \u0432\u0430\u0441 \u0442\u043e\u043c\u0438\u0442\u044c), \u0447\u0442\u043e \u0441\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432 \u043d\u0435\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0438 \u044d\u0442\u043e _PyEval_EvalFrameDefault(PyThreadState *, PyFrameObject *, int)\u00a0(<a href=\"https:\/\/github.com\/python\/cpython\/blob\/1528b420b33ae5c636b6016ce6c6afb0b09e7694\/Python\/ceval.c#LL920C1-L920C25\">\u043a\u043e\u0434<\/a>), \u0442\u043e \u0435\u0441\u0442\u044c, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430. \u041f\u043e\u0447\u0435\u043c\u0443 3 \u0442\u044b\u0441\u044f\u0447\u0438 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0438\u0441\u044c \u0432 146 \u0442\u044b\u0441\u044f\u0447? \u042d\u0442\u043e \u0438\u043d\u043b\u0430\u0439\u043d\u0438\u043d\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0412\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432\u044b\u0437\u043e\u0432 \u201ccall funcA(x)\u201d, funcA \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u043b\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0435\u0451 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0434\u043e \u043d\u0435\u0432\u043e\u043e\u0431\u0440\u0430\u0437\u0438\u043c\u044b\u0445 50 \u041a\u0411 \u0438 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0412 libpython.so, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u043e \u0435\u0451 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0432 3 \u0440\u0430\u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435, \u0432\u0441\u0435\u0433\u043e ~50 \u0442\u044b\u0441\u044f\u0447 \u0441\u0442\u0440\u043e\u043a. <\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u044b \u0443\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u044c, \u0447\u0442\u043e PyArmor \u043d\u0435 \u043e\u0442\u0434\u0430\u0451\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0443 CPython. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0432 \u0441\u0432\u043e\u0435\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430. \u0410 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 Python \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c\u0441\u044f <strong>\u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e<\/strong>, \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043c\u043e\u0433\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u0430\u0439\u0442\u043a\u043e\u0434 Python \u043a\u0430\u043a\u0438\u043c \u0443\u0433\u043e\u0434\u043d\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u043c <strong>pyarm<\/strong> \u0438 <strong>_PyEval_EvalFrameDefault<\/strong> \u0438\u0437 libpython.so, \u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0431\u043b\u043e\u043a\u0438 \u043a\u043e\u0434\u0430: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/416\/e7e\/936\/416e7e936806f979feb0f833d1a6159a.png\" alt=\"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u043e\u0434\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430\u0445 pytransform.so \u0438 libpython.so\" title=\"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u043e\u0434\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430\u0445 pytransform.so \u0438 libpython.so\" width=\"870\" height=\"802\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/416\/e7e\/936\/416e7e936806f979feb0f833d1a6159a.png\"\/><\/p>\n<div><figcaption>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0445\u043e\u0436\u0438\u0445 \u0431\u043b\u043e\u043a\u043e\u0432 \u043a\u043e\u0434\u0430 \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430\u0445 pytransform.so \u0438 libpython.so<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u0441\u0435 \u0438\u043c\u0435\u043d\u0430 \u0438 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 \u0432 pytransform \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 libpython.so \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u044d\u0442\u043e <strong>case 0x14<\/strong> \u0432 \u043d\u0435\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 switch-case, \u0442\u043e \u0432 pytransform.so \u044d\u0442\u043e <strong>case 5<\/strong>. \u042d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 switch-case \u2013 \u0432\u044b\u0431\u043e\u0440 \u043e\u043f\u043a\u043e\u0434\u0430 \u0438 \u043a\u043e\u0434\u0430 \u043e\u043f\u0435\u0440\u0430\u043d\u0434\u0430, \u0442\u043e \u0435\u0441\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 pytransform \u0437\u0430\u043f\u0443\u0442\u0430\u043d\u044b \u043e\u043f\u043a\u043e\u0434\u044b, \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f BINARY_MULTIPLY \u0438\u043c\u0435\u0435\u0442 \u043e\u043f\u043a\u043e\u0434 <strong>5<\/strong>, \u0430 \u043d\u0435 <strong>0x14h<\/strong>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u0434\u0430\u043c\u043f\u0438\u043c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0431\u0430\u0439\u0442\u043a\u043e\u0434, \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0431\u0435\u0437 \u043d\u043e\u0432\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u043d\u0435 \u0432\u044b\u0439\u0434\u0435\u0442. <\/p>\n<p>\u0421\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043e\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u2013 IDA Pro \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u043e\u0434\u043d\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0438 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>pyarm<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0439 <strong>_PyEval_EvalFrameDefault<\/strong>, \u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043c\u0430\u043d\u0451\u0432\u0440 \u043e\u0431\u043e\u0439\u0434\u0451\u0442\u0441\u044f \u0432\u0430\u043c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 (\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 IDA Pro \u0437\u0430\u0432\u0438\u0441\u043d\u0435\u0442 \u043d\u0430 3-10 \u043c\u0438\u043d\u0443\u0442 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430). \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0443 \u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u2013 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u0445\u043e\u0442\u044f \u0431\u044b \u043a \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u0434\u0443 \u0438 \u0434\u0430\u043d\u043d\u044b\u043c.\u00a0 \u041a\u0441\u0442\u0430\u0442\u0438, Ghidra \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e: \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0451 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 jump-table. <\/p>\n<h3>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 PyArmor<\/h3>\n<p>\u0418\u0442\u0430\u043a, \u0446\u0435\u043b\u044c \u043f\u043e\u043d\u044f\u0442\u043d\u0430. \u0415\u0441\u0442\u044c \u043d\u0435\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0435\u0451 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u044b (\u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a PyFrameObject = \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0443, \u0441\u0442\u0435\u043a\u0443, \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430, \u0438 \u0442.\u0434.). \u041a\u0430\u043a \u044d\u0442\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0438\u0437 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u043c\u043e\u0439 \u0432 LD_PRELOAD? \u0421\u0430\u043c\u044b\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2013 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u0435 \u0431\u0440\u0435\u0439\u043a\u043f\u043e\u0438\u043d\u0442\u044b (\u0442\u043e\u0447\u043a\u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430). \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u043d \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u043a\u043e\u0434\u0435. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u043a\u0430\u043a\u0443\u044e-\u043d\u0438\u0431\u0443\u0434\u044c \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438-\u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430. \u041d\u043e \u0441 \u0441\u043e\u0444\u0442\u043e\u0432\u044b\u043c\u0438 BP \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f, \u0438 PyArmor \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0433\u043a\u043e \u0438\u043c \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b \u0432\u044b\u0431\u0440\u0430\u043d \u0431\u043e\u043b\u0435\u0435 \u201c\u0433\u0440\u044f\u0437\u043d\u044b\u0439\u201d \u0442\u0440\u044e\u043a. \u00a0<\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0432 pytransform.so \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a libpython.so \u0447\u0435\u0440\u0435\u0437 API CPython, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0443\u043c\u0435\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c. \u041c\u043e\u0436\u0435\u043c \u043b\u0438 \u043c\u044b \u0438\u0437 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (callee) \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (caller)? \u041b\u0435\u0433\u043a\u043e! <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0446\u0435\u043b\u044c: \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0432\u043e\u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 PyThreadState_Get, \u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0435\u0449\u0451 \u043e\u0434\u043d\u043e\u0439 \u0440\u0430\u043d\u0442\u0430\u0439\u043c-\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 PyThreadState:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/598\/8e6\/850\/5988e685093bcabfbaf9a6ba8a63b3a6.png\" alt=\"\u041d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarm\" title=\"\u041d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarm\" width=\"539\" height=\"162\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/598\/8e6\/850\/5988e685093bcabfbaf9a6ba8a63b3a6.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 pyarm<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u0430\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 PyThreadState \u043d\u0430\u0441 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442, \u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043c\u044b \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u043c, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0432 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435:<\/p>\n<pre><code class=\"cpp\">void *PyThreadState_Get(void) { if (!PyThreadState_Get_real) {     PyThreadState_Get_real = dlsym(-1, \"PyThreadState_Get\");   }  return PyThreadState_Get_real(); }<\/code><\/pre>\n<p>\u041a\u0430\u043a \u0436\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0438\u0442\u044c \u0442\u0443 \u0441\u0430\u043c\u0443\u044e \u0437\u0430\u0432\u0435\u0442\u043d\u0443\u044e \u043c\u0430\u0433\u0438\u044e \u2013 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0444\u0440\u0435\u0439\u043c\u0443 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0438\u0437 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0430? \u041e\u0431\u0440\u0430\u0442\u0438\u043c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0443 pyarm:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/254\/6ff\/f93\/2546fff936cbe41cf7c532d1b5dc551f.png\" alt=\"\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 pyarm\" title=\"\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 pyarm\" width=\"684\" height=\"150\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/254\/6ff\/f93\/2546fff936cbe41cf7c532d1b5dc551f.png\"\/><\/p>\n<div><figcaption>\u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 pyarm<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043c\u0435\u0442\u0438\u043c \u0447\u0442\u043e \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 PyFrameObject *a1 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 rdi. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0432 \u043f\u0440\u043e\u043b\u043e\u0433\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 rdi \u0442\u0443\u0442 \u0436\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 r13 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c PyThreadState_Get:<\/p>\n<pre><code class=\"assembly\">; __unwind { \u043f\u0440\u043e\u043b\u043e\u0433 pyarmor ; .text:0000000000009190  push    r15 push    r14 push    r13 mov     r13, rdi push    r12 push    rbp push    rbx sub     rsp, 118h mov     [rsp+148h+var_B0], esi call    _PyThreadState_Get<\/code><\/pre>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 rdi \u0438\u043b\u0438 r13 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0435! \u041a\u0430\u043a? \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0445 \u0432\u0441\u0442\u0430\u0432\u043e\u043a!<\/p>\n<pre><code class=\"cpp\">PyFrameObject *dst = 0; \u00a0 __asm__ __volatile__(\"mov %%rdi, %0\" : \"=r\"(dst));<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u0444\u0440\u0435\u0439\u043c \u0441 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c\u00a0 \u0432 \u043d\u0430\u0448\u0438\u0445 \u0440\u0443\u043a\u0430\u0445, \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043d\u0438\u043c \u0432\u0441\u0451, \u0447\u0442\u043e \u0437\u0430\u0445\u043e\u0442\u0438\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0442\u0443\u0442 \u0436\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0440\u044f\u0434 \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c: \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u0442\u043e\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0443 PyThreadState_Get, \u043f\u0440\u0438\u0447\u0451\u043c, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0438\u0437 \u043c\u043d\u043e\u0433\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041a\u0430\u043a \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u044b? \u0412\u0435\u0434\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u043e\u0432 \u0438\u0437 pytransform.so. \u0423\u0437\u043d\u0430\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0430\u0434\u0440\u0435\u0441, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438) \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u0433\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 gcc \u2013 \u0438\u043d\u0442\u0440\u0438\u043d\u0437\u0438\u043a\u0438 <strong>__builtin_return_address(0<\/strong>), \u043d\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 pytransform.so \u043d\u0430\u043c \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d. \u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \/proc\/self\/maps, \u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u044b\u043f\u0430\u0442\u044c \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0433\u0438\u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430: \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c dlopen:<\/p>\n<pre><code class=\"cpp\">void *dlopen(const char *fname, int flag) { \u00a0 if (!real_dlopen) { \u00a0\u00a0\u00a0 real_dlopen = dlsym(REAL_LIBC, \"dlopen\"); \u00a0 } \u00a0 void *result = real_dlopen(fname, flag); \u00a0 if (fname) { \u00a0\u00a0\u00a0 printf(\"%.*s\\n\", 256, fname); \u00a0\u00a0\u00a0 struct link_map *lm = (struct link_map *)result; \u00a0\u00a0\u00a0 if (ends_with(fname, \"pytransform.so\")) { \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 printf(\"PYTRANSFORM LOADED at %p\\n\", lm->l_addr); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0PYTRANSFORM_ADDRESS = lm->l_addr;   \/\/...<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442 pytransform.so, \u043c\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u043c \u0435\u0451 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e PYTRANSFORM_ADDRESS, \u0438 \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0430\u0448 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442:<\/p>\n<pre><code class=\"cpp\">void *PyThreadState_Get(void) { \u00a0 PyFrameObject *frame = 0; \u00a0 __asm__ __volatile__(\"mov %%rdi, %0\" : \"=r\"(frame)); \u00a0 void *result = PyThreadState_Get_real(); \u00a0 if (PYTRANSFORM_ADDRESS) { \u00a0\u00a0\u00a0 void *retaddr = __builtin_return_address(0); \u00a0\u00a0\u00a0 if (retaddr == PYTRANSFORM_ADDRESS + PYTRANSFORM_INTERP_HOOK \/*\u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432 pyarm*\/) { \u00a0\u00a0\u00a0\u00a0\u00a0 printf(\"\\n[*][%d]Hooked obfuscated interpreter. Frame %d\u201d, NUM++); \u00a0\u00a0\u00a0\u00a0\u00a0 \/\/ \u0434\u0435\u043b\u0430\u0435\u043c \u0441 frame \u0432\u0441\u0451 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u00a0\u00a0\u00a0 } \u00a0 } \u00a0 return result; }<\/code><\/pre>\n<p>\u042d\u0442\u043e \u0443\u0436\u0435 \u0434\u0430\u0441\u0442 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0435\u0449\u0451\u00a0\u043f\u043e\u043b\u0435\u0437\u043d\u0435\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0444\u0440\u0435\u0439\u043c\u0430 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>_Py_CheckFunctionResult<\/strong>. \u041e\u043d\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 pyarm \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (!) \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">PyObject * _Py_CheckFunctionResult(PyObject *tstate, PyObject *callable, PyObject *result, const char *where) {   if (__builtin_return_address(0)==PYTRANSFORM_ADDRESS + 0x9B3F) { \/\/0x9B3F - \u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u043e\u0441\u043b\u0435      if (where)                                                     \/\/\u0432\u044b\u0437\u043e\u0432\u0430 _Py_CheckFunctionResult         printf(\"%s\\n\", where);     if (tstate) {         PyFrameObject * frame = (*(PyFrameObject**)((void*)tstate + 0x18));         \/\/ \u0434\u0430\u043c\u043f\u0438\u043c frame \u0438 result<\/code><\/pre>\n<p>\u041f\u0440\u0438 \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 <strong>PyFrameObject<\/strong> \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c\u0438: <code>frame->f_code->co_consts<\/code> (\u043c\u0430\u0441\u0441\u0438\u0432 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u043a\u043e\u0434\u0430) \u0434\u043b\u044f \u043b\u044e\u0431\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0432\u0440\u043e\u0434\u0435 <code>(2,), (1,)<\/code> . \u041e\u0442\u0432\u0435\u0442 \u043d\u0430 \u044d\u0442\u0443 \u0437\u0430\u0433\u0430\u0434\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 pyarm, \u0432\u043e\u0442 \u043a\u0430\u043a \u043e\u043d \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/cf4\/a62\/43b\/cf4a6243b9737d3e2cc4f691c8ca2364.png\" alt=\"\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c \u0432 pyarm\" title=\"\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c \u0432 pyarm\" width=\"899\" height=\"107\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/cf4\/a62\/43b\/cf4a6243b9737d3e2cc4f691c8ca2364.png\"\/><\/p>\n<div><figcaption>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430\u043c \u0432 pyarm<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c:<\/p>\n<p>\u00a0<code>(frame->f_code->f_consts->ob_refcnt \u2013 0x7f38) ^ a2<\/code><\/p>\n<p>\u0413\u0434\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442 a2 \u0432 pyarm \u2013 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 314FE8h. \u041f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u044d\u0442\u043e \u0443 \u0441\u0435\u0431\u044f \u0432 \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"cpp\">PyCodeObject * co = frame->f_code;\u00a0  PyObject* old_consts = co->co_consts; PyObject* consts = co->co_consts; unsigned long key = *(unsigned long *)(PYTRANSFORM_ADDRESS + 0x314FE8); consts = (consts->ob_refcnt - 0x7F38)^key; co->consts = consts; \/\/ \u043f\u0435\u0440\u0435\u0434 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435\u043c \u0432 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0441\u044e\u0434\u0430 old_consts<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0434\u0430\u043c\u043f\u0438\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0444\u0440\u0435\u0439\u043c\u0430 \u0438 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 CPython:<\/p>\n<pre><code class=\"cpp\">print_repr(frame->f_globals); print_repr(frame->f_locals); print_repr(co->co_names); print_repr(co->co_varnames); print_repr(co->co_freevars); print_repr(co->co_cellvars); dump_stack(frame);<\/code><\/pre>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f print_repr \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0443\u0434\u0440\u0451\u043d\u043e\u0439, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u0433\u043e\u043b\u043e\u043c \u0421\u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0437-\u043f\u043e\u0434 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u043a\u0443\u0447\u0435\/\u0441\u0442\u0435\u043a\u0435, \u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c \u043f\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f. \u0410 CPython, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0440\u0435\u0434\u0441\u0442\u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u0430\u043b\u0438\u0434\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u043c PyObject-\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043b\u043e \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e \u043b\u0438\u0448\u043d\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b PyObject. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0441\u0430\u043c\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0441\u0442\u0438 \u0443\u0447\u0451\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0430 \u0432\u044b\u0434\u0435\u043b\u0438\u043b\u0430 \u043d\u0430 \u043a\u0443\u0447\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0432\u0430\u043b\u0438\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 (\u043a\u043e\u0441\u0442\u044b\u043b\u0451\u043c):<\/p>\n<pre><code class=\"cpp\">void print_repr(PyObject *obj) {   if (!check_ptr(obj) || !obj->ob_refcnt) {     return;   }   PyObjectType * type =  obj->ob_type;   if (!check_ptr(type)) {     return;   }   PyObject * repr = PyObject_Repr_real(obj);   if (repr) {     const char * bytes = ((PyBytesObject*)repr)->ob_sval;     printf(\"%s\", bytes);   }   else {     printf(\"&lt;unreprable>\");   } }<\/code><\/pre>\n<p>\u0421\u0442\u0435\u043a \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u043c \u0441 \u0435\u0449\u0451 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u043c\u0438 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043a\u0430 \u043d\u0435 \u0437\u043d\u0430\u0435\u043c \u0435\u0433\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435:<\/p>\n<pre><code class=\"cpp\">static void dump_stack(PyFrameObject *frame) {   PyObject **sp = frame->f_valuestack;   int size = frame->f_code->co_stacksize + frame->f_code->co_nlocals;   int i = 0;   printf(\"\\nstack(%p-%p, %d)=[\\n\", frame->f_stacktop, frame->f_valuestack ,size);   for (PyObject **ptr = sp; i &lt; size; ptr--, i++) {     printf(\", &lt;\");     PyObject * obj = *ptr;     if (check_ptr(obj)){       PyObjectType * type = obj->ob_type;       if (check_ptr(type)) {         char * tp_name = type->tp_name;         if (check_ptr(tp_name) &amp;&amp; strlen(tp_name)>2&amp;&amp;(strcmp(tp_name, \"13'}\"))){           if (strcmp(tp_name, \"code\"))              print_repr(obj);         }         printf(\">\\n\");       }    }    \/\/... <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u2013 \u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0451! \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0438 \u043c\u043e\u0436\u0435\u043c \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u0441\u043b\u0438\u0432\u043a\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u043e\u043b\u0433\u043e \u0431\u043b\u0443\u0436\u0434\u0430\u0442\u044c \u0432 \u043b\u043e\u0433\u0430\u0445 \u0438 \u0432\u044b\u0446\u0435\u043f\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0432 \u0433\u043b\u0430\u0437\u0430:<\/p>\n<pre><code class=\"python\">HOOKED .\/co_marshaled\/ffffffff_src.bypasses.stormwall.solutions___modu co_attrs: argcnt=0, posonlyacnt:0, kwonlyacnt:0, nlocals:0, stacksize:7, flags:1644167232,fl:1 consts: (0, None, b'BZh91AY&amp;SY\\xb6\\x83&amp;o\\x00\\x03\\xd6\\xcf\\x80@\\x10\\x7f\\xf0+\\xfd]p?d\\x01\\x00`{\\xb8\\x06\\x80\\x0fo^\\xa5U\\xdd\\x9dU\"t\\xca\\xec\\xc2\\xd7v\\x9e\\xb5\\xdbN\\xcd\\xd5\\x1d\\xd9)... <\/code><\/pre>\n<p>\u041f\u043e \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e BZ2, \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0438 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c:<\/p>\n<pre><code class=\"bash\">$cat bz2_decomp.py  data = b'BZh91AY&amp;SY\\xb6\\x83&amp;o\\x00\\x03\\xd6\\xcf\\x80@\\x10\\x7f\\xf0+\\xfd]...' import bz2; print(bz2.decompress(data)) $python3 bz2_decomp.py 066a08c18735422080a9cf82dfed4589bf98114c:JYCX4FL5 518faf987ab05ebed19ee83ef658efa5bbd0bf38:5JCF4YLX e47110d17629b2a03998b5667a7c833040e8d5ad:J4X5LFCY 3316b11b92c392744b06c6395021985963570b22:JC5FY4XL ...<\/code><\/pre>\n<p>\u0412 \u0441\u0436\u0430\u0442\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c 50 \u0442\u044b\u0441\u044f\u0447 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043a\u0430\u043f\u0447\u0438 stormwall. \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0430\u043a \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043e\u0431\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0449\u0438\u0442\u0443 \u043e\u0442 DDOS-\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0431\u0438\u0440\u0430\u044e\u0442 \u0431\u0430\u0437\u0443 \u043d\u0443\u0436\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439. \u041a\u0441\u0442\u0430\u0442\u0438, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u0435 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c \u043d\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0435 \u2013 \u0438\u043d\u043e\u0433\u0434\u0430 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\/\u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a \u0441 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0438\u0441\u0442\u0430\u0442\u044c \u043b\u043e\u0433\u0438, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u0438:<\/p>\n<pre><code class=\"python\">'33ebd69a', 'o14q3151nq6p45o795o03654656p4ro58o5n4o6961q1nq51o14q0p71569377o977n14r6o6s6 44982744n5365696549o36sn44q7n72or46oq9q9o5n55776q45o691o76o708o8o79o367o74r8 r6p9054n76soo538s775po1o8869o6o2n82oq5491onnr6972p792764p734n4570748q44538o4 o4s69795o58o592o47432535r544s7po667896992o88s715374916o90568noo4n898opn6qoq4 1q44q3151nqq145nr8n5n66595n7249oonro3595qnqq1nq51o1', 'qpr97n44p3s46so811r20299nrrq71q293r0r5r8q741pr32r5n69r9s17q67714',<\/code><\/pre>\n<p>\u041e\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c ENC_KEYS \u0438 SIGN_KEYS.  <strong>33ebd69a<\/strong> \u2013 \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u0432\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u043d\u043e \u0441 \u043a\u043b\u044e\u0447\u0430\u043c\u0438 \u044f\u0432\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a (\u0441\u0438\u043c\u0432\u043e\u043b\u044b q, p, r, o \u0438 \u0442.\u0434. \u2013 \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0432 \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0435\u0440\u0438\u0447\u043d\u044b\u0439 \u0430\u043b\u0444\u0430\u0432\u0438\u0442). \u0412\u0441\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u043f\u0440\u043e \u043a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0443 rot13:<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/3b2\/1fe\/7aa\/3b21fe7aaca65fe161194a789ff4c92e.png\" alt=\"\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f\" title=\"\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f\" width=\"694\" height=\"544\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3b2\/1fe\/7aa\/3b21fe7aaca65fe161194a789ff4c92e.png\"\/><\/p>\n<div><figcaption>\u0414\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a-\u0442\u043e \u043b\u0443\u0447\u0448\u0435, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041d\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u043a\u0430\u043a Chacha20Poly1305 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0438 \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c \u0442\u043e\u0447\u043d\u0443\u044e \u0441\u0445\u0435\u043c\u0443 \u0431\u0435\u0437 \u0434\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430 (\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0412\u041c \u0434\u043e \u043a\u043e\u043d\u0446\u0430). \u0427\u0442\u043e \u0436, \u043d\u0435 \u043e\u0447\u0435\u043d\u044c-\u0442\u043e \u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c.<\/p>\n<figure class=\"bordered full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/6c8\/eb0\/e63\/6c8eb0e637f74d027e05a0d30ec00788.png\" width=\"683\" height=\"498\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6c8\/eb0\/e63\/6c8eb0e637f74d027e05a0d30ec00788.png\"\/><\/figure>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u0430\u043f\u0447\u0438 \u0438 \u043a\u043b\u044e\u0447\u0438 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2013 \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0441 \u0436\u0434\u0451\u0442, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0439\u0434\u0435\u043c \u0432 \u043b\u043e\u0433\u0430\u0445 \u0441\u0442\u0440\u043e\u043a\u0443 \u201cranges\u201d:<\/p>\n<pre><code class=\"python\">HOOKED .\/co_marshaled\/ffffffff_src.misc.exclude___load_ru_ranges co_attrs: argcnt=0, posonlyacnt:0, kwonlyacnt:0, nlocals:3, stacksize:7, flags:1644167235,fl:142 consts: (None, &lt;code object &lt;listcomp> at 0x7fa190d8a500, file \"&lt;frozen src.misc.exclude>\", line 143>, '_load_ru_ranges.&lt;locals>.&lt;listcomp>', 0, 5, &lt;code object &lt;listcomp> at 0x7fa190dadea0, file \"&lt;frozen src.misc.exclude>\", line 148>, &lt;code object &lt;listcomp> at 0x7fa190dadf50, file \"&lt;frozen src.misc.exclude>\", line 152>) ('range', 'len', '_RANGES', 'ONLY_BYPASS', 'DDOS_GUARD', '_collapse_ranges', 'armor_wrap')('networks', 'ranges', 'range_starts')()() stack((nil)-0x7fa191093990, 7)=[ &lt;([(34608128, 34608639), (34616576, 34616831), (34629376, 34629631), (34642432, 34642687), (34643712, 34644479), (34646016, 34646271),<\/code><\/pre>\n<p>\u0427\u0442\u043e \u0437\u0430 \u0447\u0438\u0441\u043b\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043f\u0440\u0438 \u0432\u044b\u0445\u043e\u0434\u0435 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u044b\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c load_ru_ranges? \u0412\u044b \u0443\u0437\u043d\u0430\u0435\u0442\u0435 \u043e\u0442\u0432\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u043c\u043e\u0442\u0430\u0435\u0442\u0435 \u043b\u043e\u0433\u0438 \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435, \u0438 \u0443\u0432\u0438\u0434\u0438\u0442\u0435:<\/p>\n<p><code>&lt; [IPv4Network('2.16.20.0\/23'), IPv4Network('2.16.53.0\/24'), IPv4Network('2.16.103.0\/24'), IPv4Network('2.16.154.0\/24'), IPv4Network('2.16.159.0\/24'), IPv4Network('2.16.160.0\/23'), IPv4Network('2.16.168.0\/24'), IPv4Network('2.17.144.0\/23')<\/code><\/p>\n<p>\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, 34608128<sub>10<\/sub> = 02101400<sub>16<\/sub> = 2.16.20.0, \u0430<strong> <\/strong>34608639 \u044d\u0442\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u0432\u0435\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441<strong> <\/strong>2.16.21.255<strong>, <\/strong>\u0442\u043e \u0435\u0441\u0442\u044c \u044d\u0442\u0438 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430 \u0437\u0430\u0434\u0430\u044e\u0442 \u043f\u043e\u0434\u0441\u0435\u0442\u044c<strong> <\/strong>2.16.20.0<strong>\/<\/strong>23. \u0418\u0442\u0430\u043a, \u0432\u043e\u043f\u0440\u043e\u0441 \u0437\u043d\u0430\u0442\u043e\u043a\u0430\u043c, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u0436\u0435 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435 \u0434\u043b\u044f DDOS \u0430\u0442\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u044d\u0442\u0438 <strong>18 \u0442\u044b\u0441\u044f\u0447<\/strong> \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 (\u043a\u0430\u043a \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u0442\u0430\u043a \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432)? \u0412\u043e\u043f\u0440\u043e\u0441 \u0440\u0438\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u2013 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0446\u0435\u043b\u0438 DDOS-\u0430\u0442\u0430\u043a\u0438.<\/p>\n<p>\u0412 \u044d\u0442\u043e\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u0432 \u0432\u0445\u043e\u0434\u044f\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u043f\u043e\u0434\u0441\u0435\u0442\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432, \u0432\u043e\u0442 \u043b\u0438\u0448\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>\u0434\u043e\u043c\u0435\u043d\u044b<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>luganet.ru mxc.ru transtelecom.net fiord.ru matrixhome.net kamensktel.ru alfatelplus.ru in-tel.ru 345000.ru stavropol.ru cdn.ngenix.net rascom.as20764.net dr.yandex.net<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0421 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0432<a href=\"https:\/\/github.com\/ogre2007\/mhddos_proxy_config\/blob\/main\/mhddos_ips.txt\"> \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0444\u0430\u0439\u043b\u0435<\/a>. mhddos_proxy \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e IP \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 DDoS \u0430\u0442\u0430\u043a\u0443.<\/p>\n<p>\u0414\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0432 PyArmor, \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0443 \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0435\u0451 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0432 \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u043d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0442\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0440\u0430\u0437 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435, \u0430 \u0442\u043e \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u043e\u0440. \u0415\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043a\u0442\u043e-\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 PyArmor, \u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <a href=\"https:\/\/github.com\/ogre2007\/pyarmor_hook\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/a> (\u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e, \u043c\u043d\u043e\u0433\u043e \u043d\u0435\u043f\u0440\u0438\u0433\u043b\u044f\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0430 \u0421\u0438!).<\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"end\" id=\"end\"><\/a><\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438\u0451\u043c\u043e\u0432 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430 \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0442\u0430\u043a\u0443\u0435\u043c\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 (\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0438\u0445 \u0447\u0430\u0441\u0442\u044c). \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c:<\/p>\n<ol>\n<li>\n<p>\u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c L7 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432\u0448\u0438\u0442\u044b\u043c\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b, \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c PyInstaller.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0431\u043e\u0439\u0442\u0438 \u0437\u0430\u0449\u0438\u0442\u0443 PyArmor \u043f\u0443\u0442\u0451\u043c \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0433\u043b\u0443\u0431\u0438\u043b\u0438 \u043d\u0430\u0448\u0438 \u043f\u043e\u0437\u043d\u0430\u043d\u0438\u044f \u043e \u041f\u0438\u0442\u043e\u043d\u0435 \u0438 \u0435\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0435, \u043e \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0437\u0430\u0449\u0438\u0442\u044b \u043a\u043e\u0434\u0430 \u0432 PyArmor \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u0445 \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u043d\u0438\u043c\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 Linux. \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043d\u044f\u0442\u044c \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u044e PyArmor \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431<em>\u043e<\/em>\u043b\u044c\u0448\u0438\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u043f\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u044d\u0442\u043e \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0441\u0430\u043c\u043e\u0433\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e PyArmor \u043d\u0430 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435, \u043d\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0438\u0432 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u0439. <\/p>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0436\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0444\u0430\u0439\u043b\u044b, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u0438\u0437 \u043b\u044e\u0431\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432 \u0432 \u0441\u0435\u0442\u0438 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u043f\u0435\u0440\u0435\u0434 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c. \u0414\u0430, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b \u0438 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0442\u043e\u0436\u0435. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u043c \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u0435\u0439\u0441\u0430, \u0434\u0430\u0436\u0435 Virustotal \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u0432\u0430\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c. <\/p>\n<p>\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043d\u0430 \u0445\u043e\u0441\u0442\u0435 \u043d\u0435\u0441\u043b\u043e\u0436\u043d\u043e \u2013 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044e \u044d\u0442\u043e\u0433\u043e \u041f\u041e \u0441\u0440\u0435\u0434\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0441\u0435\u0439\u0447\u0430\u0441 \u0432 \u043d\u0451\u043c \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u043f\u043e \u0441\u043e\u043a\u0440\u044b\u0442\u0438\u044e \u0438 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044e. \u0410 \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043f\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0445\u044d\u0448\u0430\u043c \u0438 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u0430 <code>mhddos_proxy_.*<\/code>. \u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 ITW \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043d\u0435 \u043f\u043e\u0434\u0447\u0438\u043d\u044f\u0442\u044c\u0441\u044f \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u0443\u0442\u0451\u043c \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440 PyInstaller \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435<code>src\/)<\/code>, \u0442\u0430\u043a \u043a\u0430\u043a PyInstaller \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0439 \u0430\u0440\u0445\u0438\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0438 \u041e\u0421 \u043f\u0435\u0440\u0435\u0434 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u043e\u0434\u0430.<\/p>\n<p>\u0412 \u043a\u043e\u0434\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u043f\u043e\u043f\u044b\u0442\u043a\u0438 \u043e\u0431\u0445\u043e\u0434\u0430 \u043a\u0430\u043f\u0447 \u0438 \u0437\u0430\u0449\u0438\u0442 \u043e\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0430\u0442\u0430\u043a \u0432 DDOS Guard, Stormwall, iHead, QRator, Variti, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043f\u0447\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 \u0413\u043e\u0441\u0443\u0441\u043b\u0443\u0433. \u042d\u0442\u043e \u0435\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u0435\u0442 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u043e\u0432 \u0437\u0430\u0449\u0438\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u043d\u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u043a\u0430\u043f\u0447.<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0443 \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043e\u043a\u043e\u043b\u043e 500 URL-\u043e\u0432 \u0438 18 \u0442\u044b\u0441\u044f\u0447 IPv4 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a\u0430\u043a \u0446\u0435\u043b\u044b\u0445 \u043f\u043e\u0434\u0441\u0435\u0442\u0435\u0439, \u0442\u0430\u043a \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0445\u043e\u0441\u0442\u043e\u0432. \u041e\u043d\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0441\u0430\u043c\u044b\u043c \u0440\u0430\u0437\u043d\u044b\u043c \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f\u043c \u0420\u0424: \u043e\u0442 \u043a\u0440\u0443\u043f\u043d\u044b\u0445 \u0431\u0430\u043d\u043a\u043e\u0432 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 IT-\u0433\u0438\u0433\u0430\u043d\u0442\u043e\u0432, \u0434\u043e \u043c\u0435\u043b\u043a\u0438\u0445 \u0433\u043e\u0440\u043e\u0434\u0441\u043a\u0438\u0445 ISP; \u043e\u0442 \u0412\u0423\u0417-\u043e\u0432, \u0434\u043e \u0441\u0430\u0439\u0442\u043e\u0432 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431. \u041e\u0446\u0435\u043d\u043a\u0443 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u043a\u0438\u0445 \u0430\u0442\u0430\u043a \u0434\u043b\u044f \u0437\u043b\u043e\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u0438\u043a\u043e\u0432 \u043e\u0441\u0442\u0430\u0432\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0442\u0435\u0445, \u043a\u0442\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0430\u0442\u0430\u043a\u0430\u043c\u0438 \u0438\u043b\u0438 \u0438\u0445 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f\u043c\u0438. \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445 \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0430\u0442\u0430\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432 <a href=\"https:\/\/github.com\/ogre2007\/mhddos_proxy_config\/blob\/main\/mhddos_urls.txt\">\u0441\u043f\u0438\u0441\u043a\u0435 URL-\u043e\u0432<\/a> \u0438 \u0432 <a href=\"https:\/\/github.com\/ogre2007\/mhddos_proxy_config\/blob\/main\/mhddos_ips.txt\">\u0441\u043f\u0438\u0441\u043a\u0435 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432<\/a>.<\/p>\n<p>\u041f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b? \u041f\u0438\u0448\u0438\u0442\u0435 \u0441\u0432\u043e\u0438 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0438 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445!<\/p>\n<hr\/>\n<p><strong>\u041d\u0430\u0448\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u044b:<\/strong> <br \/><a href=\"https:\/\/www.usergate.com\/ru\/security-reports\">https:\/\/www.usergate.com\/ru\/security-reports<\/a> <br \/><a href=\"https:\/\/t.me\/usergatenews\/\">https:\/\/t.me\/usergatenews\/<\/a><br \/><a href=\"mailto:mrc@usergate.com\">mrc@usergate.com<\/a> <\/p>\n<\/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\/companies\/usergate\/articles\/743080\/\"> https:\/\/habr.com\/ru\/companies\/usergate\/articles\/743080\/<\/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<figure class=\"full-width\"><\/figure>\n<h2>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435<\/h2>\n<p>\u0412 \u043d\u0430\u0447\u0430\u043b\u0435 \u0430\u043f\u0440\u0435\u043b\u044f 2023 \u0433\u043e\u0434\u0430 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0445\u043e\u0441\u0442\u043e\u0432 \u0431\u044b\u043b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b mhddos_proxy_linux_arm64 (MD5: 9e39f69350ad6599420bbd66e2715fcb), \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043e\u043c. \u041f\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043e\u0442\u043a\u0430\u0437 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438 (DDoS), \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0442\u0438\u0432 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u0418\u0422-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0446\u0435\u043b\u0435\u0432\u044b\u043c \u0445\u043e\u0441\u0442\u0430\u043c \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 TCP\/IP \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0442\u043a\u0430\u0437\u0430 \u0432 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0438.<\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0434\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u043e\u0439 \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c \u0434\u043b\u044f \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u2013 \u043d\u0435 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u044f \u0438 \u0441\u0430\u043c\u043e\u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u044b\u0442\u044c \u0441\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u0438\u043b\u0438 \u043f\u043e\u0445\u0438\u0449\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441 \u043d\u0435\u0433\u043e \u2013 \u043d\u0438 \u043e\u0434\u0438\u043d \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u043d\u044b\u043c \u0438 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0410 \u0432\u0435\u0434\u044c \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u0434\u043e\u043d\u043e\u0441\u0430, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043f\u0440\u0435\u0434\u0443\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u0438\u044e \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u0445, \u043d\u0430\u043a\u0430\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u043e \u0437\u0430\u043a\u043e\u043d\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0443 \u0420\u0424, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u0435\u0435, \u0447\u0435\u043c \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u044f \u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u043b\u0438 \u043a\u043e\u0440\u043f\u043e\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u0441\u0435\u0442\u0438. <\/p>\n<figure class=\"bordered\"><\/figure>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441 \u0446\u0435\u043b\u044c\u044e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0435\u0433\u043e \u0446\u0435\u043b\u0435\u0439, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435. <\/p>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u043f\u043e \u0418\u0411\/\u0418\u0422, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u044f\u0437\u044b\u043a\u0430 Python \u0438 \u043e\u0431\u0444\u0443\u0441\u043a\u0430\u0446\u0438\u0435\u0439 \u041f\u041e. \u041f\u043e\u043c\u0438\u043c\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0435\u043b\u0435\u0439, \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u043d\u044b\u0439 \u0438\u0437 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p><a href=\"#1\">\u041f\u0435\u0440\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c <\/a>\u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u0442 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044f \u0437\u043d\u0430\u043d\u0438\u044f Python. \u0414\u043b\u044f <a href=\"#2\">\u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a> \u043d\u0435\u043f\u043b\u043e\u0445\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430. \u0410 \u0432 <a href=\"#3\">\u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 <\/a>\u0441\u0442\u0430\u0442\u044c\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0435 \u0437\u043d\u0430\u043d\u0438\u044f Python \u0438 C, \u0438\u043b\u0438 \u0436\u0435 \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0432\u044b\u043a\u0438 \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430. \u0415\u0441\u043b\u0438 \u0436\u0435 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0430 \u043d\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 &#8212; \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a <a href=\"#end\">\u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044e<\/a>.<\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"1\" id=\"1\"><\/a><\/p>\n<h2> Level 1: Easy. \u0420\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u043c L7\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <\/h2>\n<p>\u00a0<\/p>\n<p>\u0421\u043f\u0443\u0441\u0442\u044f \u043f\u0430\u0440\u0443 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0433\u0443\u0433\u043b\u0435 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 \u201cmhddos\u201d \u043b\u0435\u0433\u043a\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0435 <a href=\"https:\/\/github.com\/MatrixTM\/MHDDoS\">mhddos<\/a>. \u042d\u0442\u043e \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, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e \u0441\u0435\u0442\u0435\u0432\u043e\u043c\u0443 \u0441\u0442\u0440\u0435\u0441\u0441-\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u044f\u0445 OSI (Layer 4 &#8212; \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u0440\u0442\u043d\u044b\u0439 \u0438 Layer 7 &#8212; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439) \u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u043e\u0432, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0431\u0445\u043e\u0434\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u043f\u0447 \u0434\u043b\u044f \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0430\u0439\u0442\u043e\u0432 \u043e\u0442 DDoS-\u0430\u0442\u0430\u043a, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u043a\u0441\u0438-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u0422\u043e \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d, \u0438 \u043b\u044e\u0431\u043e\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u0441\u043e \u0437\u043d\u0430\u043d\u0438\u0435\u043c Python \u043c\u043e\u0436\u0435\u0442 \u0435\u0433\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e MHDDoS \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438, \u0430 \u043d\u0435 \u0432 \u0432\u0438\u0434\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430\u2026\u00a0 <\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043f\u043e \u0437\u0430\u043f\u0440\u043e\u0441\u0443 &#171;mhddos_proxy&#187; \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy\">mhddos_proxy <\/a>\u0438 \u0435\u0433\u043e <a href=\"https:\/\/telegra.ph\/MHDDoS-Proxy-03-13\">\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 <\/a>\u0432 Telegraph \u043e\u0442 \u0430\u0432\u0442\u043e\u0440\u043e\u0432, \u0441\u0435\u0442\u0443\u044e\u0449\u0438\u0445 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 mhddos \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043d\u043e\u0432\u0443\u044e, \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0446\u0435\u043b\u0435\u0439 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u0438\u043c\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0435\u0439. \u0427\u0442\u043e \u0436, \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0449\u0438\u0442\u0438\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043d\u0430 Python \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0442\u0430\u043a \u0432\u0435\u0434\u044c? \u0422\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0430\u0439\u0434\u0451\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0446\u0435\u043b\u0435\u0439 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445, \u0434\u0435\u043b\u043e\u0432 \u043d\u0430 \u043f\u0430\u0440\u0443 \u043c\u0438\u043d\u0443\u0442!<\/p>\n<figure class=\"bordered full-width\">\n<div><figcaption>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u043f\u0438\u0442\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u0432 \u0433\u043b\u0430\u0437\u0430 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0431\u0440\u043e\u0441\u0430\u0435\u0442\u0441\u044f \u0444\u0430\u0439\u043b config.json:<\/p>\n<figure class=\"bordered full-width\">\n<div><figcaption>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043f\u0438\u0441\u043a\u0438 \u043f\u0440\u043e\u043a\u0441\u0435\u0439 \u043f\u043e \u044d\u0442\u0438\u043c \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0443\u0436\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u2013 \u0442\u0435\u043f\u0435\u0440\u044c \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u0444\u0430\u0439\u043b\u043e\u0432 \u201c1(2,3,4).txt\u201d, \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f \u0444\u0430\u0439\u043b\u044b \u201c11.txt\u201d, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 mhddos_proxy. <\/p>\n<p>URL\u00a0 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 (\u0444\u0430\u0439\u043b \u201c11.txt\u201d) \u0432\u0441\u0435 \u0435\u0449\u0451 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c, \u0438 \u044d\u0442\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442\u0441\u044f. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 11.txt \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0442\u0435\u043a\u0441\u0442:<\/p>\n<figure class=\"bordered full-width\">\n<div><figcaption>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0444\u0430\u0439\u043b\u0430 11.txt<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0417\u043d\u0430\u0447\u0438\u0442 \u043d\u0443\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041f\u043e\u0438\u0441\u043a \u043f\u043e \u043a\u043e\u0434\u0443 \u0441\u0442\u0440\u043e\u043a\u0438 \u201cconfig.json\u201d\u00a0 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0443\u0436\u043d\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 _possibly_decrypt \u0432 \u0444\u0430\u0439\u043b\u0435 <strong>src\/targets.py<\/strong>:<\/p>\n<figure class=\"bordered full-width\">\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0444\u0430\u0439\u043b\u0430 src\/targets.py<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0435 4 \u0431\u0430\u0439\u0442\u0430 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0432\u0435\u0440\u0441\u0438\u0439 \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u0435 <strong>ENC_KEYS<\/strong>, \u0438 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0438\u0437 \u0441\u043b\u043e\u0432\u0430\u0440\u044f \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f <strong>ChaCha20Poly1305<\/strong>. \u0421\u0430\u043c \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u0443 \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u043a\u043b\u044e\u0447\u043e\u043c:<\/p>\n<pre><code class=\"python\">\u00a0ENC_KEYS = {b'\\xe4\\xdc\\xf7\\x1f': b'fZPK2OTLiNdqVDBxJTSMuph\/rfLzpFWHDmHC1\/+rR1s='}<\/code><\/pre>\n<p>\u0418 \u043e\u043d\u0430 \u0432 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0435\u0442 \u0441 \u043f\u0435\u0440\u0432\u044b\u043c\u0438 4-\u043c\u044f \u0431\u0430\u0439\u0442\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 11.txt. \u0427\u0442\u043e \u0436, \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e \u0438 \u043c\u044b \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e: \u043f\u0440\u043e\u0441\u0442\u043e \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430 \u0441\u0432\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 cryptography \u0434\u043b\u044f python). \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0442\u043e-\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435:<\/p>\n<figure class=\"bordered full-width\">\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0441 \u0446\u0435\u043b\u044f\u043c\u0438 \u0434\u043b\u044f DDoS-\u0430\u0442\u0430\u043a\u0438<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0438\u043c\u0435\u043d\u043d\u043e &#8212; \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u0437 \u043e\u043a\u043e\u043b\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445\u0441\u043e\u0442 URL-\u043e\u0432 \u0441\u0430\u0439\u0442\u043e\u0432 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0445 \u0444\u0435\u0434\u0435\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043c\u0443\u043d\u0438\u0446\u0438\u043f\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0447\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0439, \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0439, \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u0443\u0441\u043b\u0443\u0433. \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0432 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0437\u0430\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 base64 \u0438\u043b\u0438 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043e\u043a\u043e\u043b\u043e 500 URL-\u043e\u0432, \u0432\u043e\u0442 \u043b\u0438\u0448\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0438\u0445:<\/p>\n<details class=\"spoiler\">\n<summary>URLs<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>https:\/\/lk.mid.ru\/ https:\/\/dgp.mid.ru\/ http:\/\/www.college-mid.ru\/ HTTP_TEMPLATE https:\/\/zp2020.midpass.ru\/ https:\/\/biopassportmid.midpass.ru\/ https:\/\/www.muiv.ru\/abiturient\/epk\/#epk_form http:\/\/nnovcons.ru\/obrazovanie\/abiturientam\/ http:\/\/inn.fsb.ru\/pages\/02-rules.html https:\/\/ngieu.ru\/algoritm_postupleniya https:\/\/nnov.hse.ru\/bacnn https:\/\/pk.hse.ru\/ https:\/\/niu.ranepa.ru\/abitur\/bachelor\/ https:\/\/lk.ranepa.ru\/pk\/auth.php https:\/\/lka.nngasu.ru\/register https:\/\/lk.belgorod.ru post http:\/\/beladm.ru get https:\/\/tdpra.ru get http:\/\/93.170.82.246 post<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u043d\u0451\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u0430 \u043c\u043e\u0436\u043d\u043e \u0432   <a href=\"https:\/\/github.com\/ogre2007\/mhddos_proxy_config\/blob\/main\/mhddos_urls.txt\">\u0444\u0430\u0439\u043b\u0435<\/a>. <\/p>\n<p>\u041d\u043e \u0442\u0443\u0442 \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c 500 \u0441\u0441\u044b\u043b\u043e\u043a. \u0418\u0441\u043a\u043b\u044e\u0447\u0430\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0434\u043e\u043c\u0435\u043d\u044b \u041c\u0418\u0414 \u0420\u0424 \u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0411\u0438\u043b\u0430\u0439\u043d\u0430, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0438 \u0442\u043e\u0433\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u2013 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0433\u0443\u0441\u0442\u043e. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u0439\u043b\u044b, \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435, \u043d\u043e \u0443\u0436\u0435 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u043c \u043a\u043b\u044e\u0447\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0430\u043a \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432 \u043d\u0438\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u043e\u043c\u0435\u043d\u043e\u0432.<\/p>\n<p>\u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u044f\u0442\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u043e\u0442\u0438\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0439: \u0432 \u0444\u0430\u0439\u043b\u0435 <code>src\/exclude.py<\/code> \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 IP (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u0435\u0442\u0435\u0432\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, Cloudflare, DNS-\u0441\u0435\u0440\u0432\u0435\u0440\u0430 Google), \u0430 \u0432 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy\/blob\/main\/src\/vendor\/rotate.py\">src\/vendor\/rotate.py<\/a> \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0430\u0442\u0430\u043a\u0430 \u043f\u043e \u0434\u043e\u043c\u0435\u043d\u0430\u043c \u0437\u043e\u043d\u044b .ua. \u041c\u043e\u0436\u0435\u043c \u0434\u0435\u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044f base64 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e https:\/\/www.base64decode.org\/), \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u0443\u044f \u0442\u0435\u043a\u0441\u0442 \u0432 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 hex-\u0441\u0442\u0440\u043e\u043a\u0430\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 <a href=\"https:\/\/codepen.io\/kamakalolii\/pen\/RKNoMr\">https:\/\/codepen.io\/kamakalolii\/pen\/RKNoMr<\/a>), \u0438 \u0441\u043c\u0435\u0449\u0430\u044f \u0442\u0435\u043a\u0441\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e rot13 (<a href=\"https:\/\/rot13.com\/\">https:\/\/rot13.com\/<\/a>). \u041b\u0438\u0431\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043b\u044e\u0431\u044b\u043c \u043e\u043d\u043b\u0430\u0439\u043d-\u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u043c Python \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0443\u0434\u0430 \u043e\u0431\u0444\u0443\u0441\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<pre><code class=\"python\">from yarl import URL suffix = '.ua' params = [ (URL('https:\/\/profile.sber.ru'), '84.252.144.102'), (URL('https:\/\/3dsec.sberbank.ru'), '62.76.205.110'), (URL('https:\/\/cdek.ru'), '178.248.238.208'), (URL('https:\/\/lk.platon.ru'), '83.169.194.22'), (URL('https:\/\/auth.kontur.ru'), '46.17.206.15'), ]<\/code><\/pre>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy\/blob\/main\/src\/vendor\/useragents.py\">src\/vendor\/useragents.py<\/a> \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 Useragent-\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a \u0441\u0430\u0439\u0442\u0430\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u0438\u043c\u0438\u043a\u0440\u0438\u0438 \u043f\u043e\u0434 \u043b\u0435\u0433\u0438\u0442\u0438\u043c\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0438 \u043d\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430. <\/p>\n<p>\u0412 \u0444\u0430\u0439\u043b\u0435 src\/utils.py \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0437\u0430\u0449\u0438\u0442\u044b \u043e\u0442 \u0431\u043e\u0442\u043e\u0432 \u043d\u0430 \u0413\u043e\u0441\u0443\u0441\u043b\u0443\u0433\u0430\u0445 (\u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 Cookie): <\/p>\n<pre><code class=\"python\">mhddos_proxy\/src\/utils.py class GOSSolver: DEFAULT_A = 1800 MAX_RPC = 100 OWN_IP_KEY = \"OWN\" _path = 'https:\/\/www.gosuslugi.ru\/__jsch\/schema.json' _verifier = b'__jsch\/static\/script.js' #... def solve(self, ua, resp, *, cache_key: str) -&amp;gt; Tuple[int, Dict[str, str]]:     a, ip, cn = resp[\"a\"], resp[\"ip\"], resp[\"cn\"]     bucket = self.time_bucket(a)     value = f\"{ua}:{ip}:{bucket}\"      hasher = md5     for pos in range(10_000_000):         response = hasher(f'{value}{pos}'.encode()).hexdigest()         if response[6:10] == '3fe3':             cookies = {                 cn: response.upper(),                 f\"{cn}_2\": pos,                 f\"{cn}_3\": crc32(value.encode())             }             self._cache[cache_key] = (bucket + a, ua, cookies)             return bucket + a, cookies     raise ValueError(\"invalid input\")<\/code><\/pre>\n<p>\u0425\u043e\u0440\u043e\u0448\u043e, \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e. \u041d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0444\u0430\u0439\u043b mhddos_proxy_arm64 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0438\u0442\u043e\u043d\u043e\u0432\u0441\u043a\u0438\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c, \u0442\u0430\u043a \u043e\u0442\u043a\u0443\u0434\u0430 \u0436\u0435 \u043e\u043d \u0432\u0437\u044f\u043b\u0441\u044f? \u041e\u0442\u0432\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0436\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438: \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e python-\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 \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b, \u0438 \u043f\u0440\u0438\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0441\u0435\u0445 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 <a href=\"https:\/\/github.com\/porthole-ascend-cinnamon\/mhddos_proxy_releases\">mhddos_proxy_releases<\/a>. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u043a\u043e\u0434\u044b, \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u0430.<\/p>\n<p>\u0421\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443 \u0434\u043b\u044f linux \u043f\u043e\u0434 x86 (mhddos_proxy_linux v81, MD5: a004b948f72c6eb14f348cc698bda16e) &#8212; \u0435\u0451 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c, \u0447\u0435\u043c \u0431\u0438\u043d\u0430\u0440\u044c \u0434\u043b\u044f ARM. \u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0432 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0438 \u0438 \u0432\u0438\u0434\u0438\u043c \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441 _PYI: <\/p>\n<figure class=\"bordered full-width\">\n<div><figcaption>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0441\u0442\u0440\u043e\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <a href=\"https:\/\/github.com\/pyinstaller\/pyinstaller\">PyInstaller<\/a>. \u042d\u0442\u043e \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, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 Python-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0446\u0435\u043b\u044c\u044e \u0443\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f, \u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043e\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. <\/p>\n<hr\/>\n<p><a class=\"anchor\" name=\"2\" id=\"2\"><\/a><\/p>\n<h3>Level 2: Medium. \u0420\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 PyInstaller<\/h3>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0443\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a\u0430 PyInstaller \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 (\u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438) \u0432 \u0444\u0430\u0439\u043b\u044b \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u0430 .pyc, \u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430 Python \u0432 \u0441\u0430\u043c\u043e\u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0430\u0440\u0445\u0438\u0432 \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0444\u0430\u0439\u043b\u0430 PyInstaller \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0430\u0440\u0445\u0438\u0432 \u0441 \u0431\u0430\u0439\u0442\u043a\u043e\u0434\u043e\u043c \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043f\u0430\u043f\u043a\u0443 (\u043a\u0440\u043e\u043c\u0435 main-\u0441\u043a\u0440\u0438\u043f\u0442\u0430), \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 main-\u0441\u043a\u0440\u0438\u043f\u0442 \u0431\u0435\u0437 \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u043a\u0438, \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 \u0435\u0433\u043e \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u0438\u0437 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0430.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043f\u0438\u0442\u043e\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442<\/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-349197","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349197","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=349197"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/349197\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=349197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=349197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=349197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}