{"id":346270,"date":"2023-03-04T21:01:32","date_gmt":"2023-03-04T21:01:32","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=346270"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=346270","title":{"rendered":"<span>\u0421\u043a\u0430\u043d\u0435\u0440 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/vw\/ax\/tc\/vwaxtcspzyyk1-qw88ent-s4m0s.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/vw\/ax\/tc\/vwaxtcspzyyk1-qw88ent-s4m0s.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0443 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u0440\u0443\u0447\u043d\u044b\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\/TLS \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 ApiSet \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432.<br \/>  \u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 64 \u0431\u0438\u0442\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0447\u0443\u0436\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u0448\u043b\u044e\u0437, \u0442\u0430\u043a \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0433\u0435\u0439\u0442\u0430.<br \/>  \u0411\u0443\u0434\u0435\u0442 \u0434\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443\u00bb \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043a\u0430\u043a \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435, \u0442\u0430\u043a \u0438 \u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u043a\u043e\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h3>0. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0432\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443 \u0441\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0435\u0441\u0442\u044c \u0441\u043b\u0443\u0436\u0431\u0430 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0438 \u044f \u0434\u0443\u043c\u0430\u044e \u0447\u0442\u043e \u043d\u0435 \u043e\u0448\u0438\u0431\u0443\u0441\u044c \u0435\u0441\u043b\u0438 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0438\u0437 \u0432\u0430\u0441 \u043f\u0438\u0441\u0430\u043b\u0430 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0441\u043b\u0443\u0436\u0431\u044b \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b, \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 \u0441\u0431\u043e\u0440\u0449\u0438\u043a\u043e\u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u0449\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u044b \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438 \u0432\u0430\u0448\u0435\u0433\u043e \u0441\u043e\u0444\u0442\u0430, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435.<\/p>\n<p>  \u0423 \u043d\u0430\u0448\u0438\u0445 \u0442\u0435\u0445\u043d\u0430\u0440\u0435\u0439 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u043c\u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043f\u043e\u0434 \u043d\u043e\u0432\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044f \u0442\u0435 \u0438\u043b\u0438 \u0438\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0433\u043d\u0430\u0442\u044c \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u044c, \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430 \u0438\u043b\u0438 \u0438\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0441\u043e\u0444\u0442\u0430 \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435.<\/p>\n<p>  \u0413\u0434\u0435-\u0442\u043e \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 \u0443 \u043d\u0430\u0441 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043d\u043e\u043f\u043b\u0430\u043d\u043e\u0432\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u043f\u043e\u043a\u0440\u044b\u0442\u044c \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u043d\u043e \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0440\u043e\u0431 \u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043e\u043f\u044b\u0442\u0430 \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0441\u043d\u0435\u043d\u043e \u0447\u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u0441\u043e\u0444\u0442\u0430 \u0432 \u0442\u0435\u043b\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u042d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u044b, \u0442\u0430\u043a \u0438 \u0432\u0441\u044f\u043a\u0438\u0435 DLP, \u0430 \u0442\u043e \u0438 \u0432\u043e\u0432\u0441\u0435 \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u0435\u0437\u0443\u0442 \u043a \u043d\u0430\u043c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f API \u043d\u0430 \u0441\u0435\u0431\u044f \u0438 \u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u0445 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043b\u043e\u043c\u0430\u044e\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0432\u043c\u0435\u0448\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0434\u043d\u0443 \u0438\u0437 \u0443\u0442\u0438\u043b\u0438\u0442, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u0448\u0430 \u0441\u043b\u0443\u0436\u0431\u0430 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0435\u0451 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u0432\u044b\u044f\u0441\u043d\u044f\u0442\u044c \u2014 \u043a\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e, \u043a\u0443\u0434\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0432\u043b\u0435\u0437 \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0442\u0430\u043c \u043f\u043e\u043b\u043e\u043c\u0430\u043b.<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438\u0434\u0435\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435\u043c \u043c\u043e\u0435\u0439 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 &#171;<a href=\"https:\/\/habr.com\/ru\/post\/202242\/\">\u041a\u0430\u0440\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/a>&#171;. \u0421\u0443\u0442\u044c \u0435\u0451 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c: \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u044e\u043a, \u043d\u0443\u0436\u043d\u043e \u0443\u043c\u0435\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0442\u0435\u043b\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u044d\u0442\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0438 \u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u043d\u0438\u043c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u0438 \u043e\u0431\u0449\u0435\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u0438\u0434\u0435\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0443\u0434\u043e\u0435\u043c\u043a\u0430\u044f.<br \/>  \u0421\u0430\u043c\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u044b\u043b\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0443\u0442\u0438\u043b\u0438\u0442\u0430 32 \u0431\u0438\u0442\u043d\u0430\u044f, \u0430 \u0441\u043e\u0444\u0442, \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0439 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043a\u0430\u043a 32 \u0431\u0438\u0442\u0430, \u0442\u0430\u043a \u0438 64 (\u0432\u0442\u043e\u0440\u043e\u0435 \u0431\u043e\u043b\u0435\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043e\u0431\u0432\u044f\u0437\u043a\u0443.<\/p>\n<p>  \u0418 \u0442\u043e \u044f \u0431\u044b \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432 \u0444\u0438\u043d\u0430\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u043d\u044b\u043c, \u0442.\u043a. \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043b\u0435\u043d\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0445\u043e\u0442\u0435\u043b \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, (\u043f\u0440\u0430\u0432\u0434\u0430 \u0432 \u043d\u0438\u0445, \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u043d\u0435\u0442 \u043d\u0443\u0436\u043d\u043e\u0439 \u043c\u043d\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438) \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043c \u044f \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u043b\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0442\u0440\u044e\u043a\u043e\u043c, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  \u041a\u043e\u0440\u043e\u0447\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0442\u0430\u043a\u043e\u0435, \u043a\u0430\u043a \u0431\u044b \u044d\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c\u2026 \u0430\u043d\u0442\u0438\u0432\u0438\u0440\u0443\u0441\u043d\u044b\u0439 \u0441\u043a\u0430\u043d\u0435\u0440 \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u043a\u0430\u0445 \ud83d\ude42<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u043f\u0440\u043e\u0439\u0434\u0443\u0441\u044c \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0430\u043f\u0430\u043c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430 \u0441 \u043d\u0443\u043b\u044f, \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0448\u0430\u0433 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0430 \u0447\u0442\u043e\u0431\u044b \u0432\u044b (\u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e) \u043c\u043e\u0433\u043b\u0438 \u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0441\u043a\u0430\u043d\u0435\u0440\u0430, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u0443\u044f\u0441\u044c \u043c\u043e\u0438\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u044d\u0442\u0430\u043f\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u043e\u0439 \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u0441\u044f \u043e\u0442 \u0433\u043b\u0430\u0432\u044b \u043a \u0433\u043b\u0430\u0432\u0435, \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c, \u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u044f \u0434\u0430\u043c \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u0441\u0430\u043c \u0443 \u0441\u0435\u0431\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 (\u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0433\u043e\u0442\u043e\u0432\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u0435\u0433\u043e \u043a \u0441\u0435\u0431\u0435 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442).<\/p>\n<h3>1. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430<\/h3>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0430\u0437\u0431\u0435\u0440\u0435\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c (\u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439) \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0447\u0438\u0442\u0430\u044f \u044d\u0442\u0443 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u0430 \u043d\u0430 \u0436\u0435\u0441\u0442\u043a\u043e\u043c \u0434\u0438\u0441\u043a\u0435. \u0412\u0441\u044f \u044d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441 \u043d\u0435\u0451 \u0438 \u043d\u0430\u0447\u043d\u0435\u043c.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043b\u0438\u043d\u043e\u0432\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c LoadLibrary + GetProcAddress, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438 (\u043d\u0430 \u044d\u0442\u043e\u043c \u043f\u043e\u043a\u0430 \u043d\u0435 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435).<\/p>\n<p>  \u042f \u043d\u0435 \u0431\u0443\u0434\u0443 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0420\u0415 \u0444\u0430\u0439\u043b\u0430, \u0431\u043b\u0430\u0433\u043e \u043d\u0430 \u044d\u0442\u0443 \u0442\u0435\u043c\u0443 \u0435\u0441\u0442\u044c \u043e\u0433\u0440\u043e\u043c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0435\u0439 (\u0441\u0441\u044b\u043b\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0431\u0443\u0434\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0449\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u044b. \u0410 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u043e RAW \u0438 VA \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u043a\u043e\u0434 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/li>\n<li>\u0410 \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 RAW \u0438 VA \u0430\u0434\u0440\u0435\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0436\u0438\u0442 RVA \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/li>\n<\/ol>\n<p>\u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0430\u043a \u043a\u0430\u043a, \u043a\u043e\u0433\u0434\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u0438\u0431\u043e \u043f\u043e \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 (\u043c\u0435\u0442\u043e\u0434\u043e\u043c HotPatch \u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0430\u043c\u043f\u043b\u0438\u043d, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a), \u043b\u0438\u0431\u043e \u043f\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443, \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e GetProcAddress \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0430.<\/p>\n<p>  \u0414\u0430, \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0442\u0440\u0438 \u0442\u0435\u0440\u043c\u0438\u043d\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438:<\/p>\n<ul>\n<li>RAW \u0430\u0434\u0440\u0435\u0441 \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 (\u0432\u0441\u0435\u0433\u0434\u0430 4 \u0431\u0430\u0439\u0442\u0430).<\/li>\n<li>RVA \u0430\u0434\u0440\u0435\u0441 (relative virtual address), \u044d\u0442\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c \u0444\u0430\u0439\u043b\u0435 (\u0432\u0441\u0435\u0433\u0434\u0430 4 \u0431\u0430\u0439\u0442\u0430). \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e ImageBase \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c \u0432 \u0420\u0415 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0444\u0430\u0439\u043b\u0430, \u043b\u0438\u0431\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e hInstance \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u0431\u044b\u0432\u0430\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u044f \u0431\u0443\u0434\u0443 \u0438\u0445 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f.<\/li>\n<li>VA \u0430\u0434\u0440\u0435\u0441 \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0422.\u043a. \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u0441 32 \u0431\u0438\u0442\u0430\u043c\u0438 \u0438 \u0441 64, \u0442\u043e \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 8-\u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e ULONG_PTR64 (UInt64), \u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043b\u0438\u0431\u043e 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u043b\u0438\u0431\u043e 64 \u0431\u0438\u0442\u043d\u044b\u0439. VA \u0430\u0434\u0440\u0435\u0441 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e) \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0431\u0430\u0437\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0444\u0430\u0439\u043b\u0430 IMAGE_OPTIONAL_HEADER\u0445\u0445.ImageBase \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a \u043d\u0435\u0439 RVA \u0430\u0434\u0440\u0435\u0441\u0430, \u043d\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b ApiSet \u0442\u0430\u0431\u043b\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u0430 \u043d\u0435 ImageBase.<\/li>\n<\/ul>\n<p>\u0412\u044b\u0445\u043e\u0434 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u044f \u0442\u0440\u0435\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u0420\u0415 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<ol>\n<li>\u0427\u0442\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b IMAGE_DOS_HEADER, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b<\/li>\n<li>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 IMAGE_DOS_HEADER._lfanew, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e PE \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430<\/li>\n<li>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0447\u0435\u0442\u044b\u0440\u0435\u0445\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b IMAGE_NT_SIGNATURE \u0438 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u0438\u0434\u0443\u0449\u0435\u0439 \u0437\u0430 \u043d\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b IMAGE_FILE_HEADER.<\/li>\n<li>\u0418\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0434\u0432\u0430 \u043f\u043e\u043b\u044f. NumberOfSections \u0438 Machine. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0434\u0443\u0449\u0443\u044e \u0441\u043b\u0435\u0434\u043e\u043c:<\/li>\n<li>\n<ul>\n<li>\u043b\u0438\u0431\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 IMAGE_OPTIONAL_HEADER32 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 IMAGE_FILE_HEADER.Machine = IMAGE_FILE_MACHINE_I386<\/li>\n<li>\u043b\u0438\u0431\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 IMAGE_OPTIONAL_HEADER64 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 IMAGE_FILE_HEADER.Machine = IMAGE_FILE_MACHINE_AMD64<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>\u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ws\/yi\/7p\/wsyi7ptjyjqnhfmynd9lctybwsc.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ws\/yi\/7p\/wsyi7ptjyjqnhfmynd9lctybwsc.png\"\/><\/p>\n<p>  \u0420\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 IMAGE_OPTIONAL_HEADER \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u043f\u043e\u043b\u0435\u0439.<br \/>  32 \u0431\u0438\u0442\u043d\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 4 \u0431\u0430\u0439\u0442\u043d\u044b\u0435 DWORD, \u0430 64 \u0431\u0438\u0442\u043d\u0430\u044f \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u044b\u0435 ULONGLONG.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u0435\u043c IMAGE_OPTIONAL_HEADER\u0445\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 IMAGE_DATA_DIRECTORY (\u0432\u0441\u0435\u0433\u043e 16 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432). \u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d, \u0430 \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, \u0442\u043e \u0441\u0430\u043c\u044b\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c IMAGE_DIRECTORY_ENTRY_EXPORT.<\/p>\n<p>  \u041d\u043e, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u044d\u0442\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0441\u0435\u043a\u0446\u0438\u044f\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0418\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043f\u043e\u043b\u0435 IMAGE_FILE_HEADER.NumberOfSections, \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u043d\u0438 \u0438\u0437 \u0441\u0435\u0431\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 IMAGE_SECTION_HEADER \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 IMAGE_OPTIONAL_HEADER\u0445\u0445.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_EXPORT], \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u043f\u043e\u043b\u044f:<\/p>\n<ol>\n<li>VirtualAddress (DWORD) \u2014 RVA \u0430\u0434\u0440\u0435\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438<\/li>\n<li>Size (DWORD) \u2014 \u0435\u0451 \u0440\u0430\u0437\u043c\u0435\u0440<\/li>\n<\/ol>\n<p>\u0410 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u0441\u0435\u043a\u0446\u0438\u044e (IMAGE_SECTION_HEADER) \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u043e\u043b\u0435\u0439 (\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0438):<\/p>\n<ul>\n<li>VirtualAddress (DWORD) \u2014 RVA \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u043a\u0446\u0438\u0438<\/li>\n<li>VirtualSize (DWORD) \u2014 \u0435\u0451 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/li>\n<li>PointerToRawData (DWORD) \u2014 RAW \u0430\u0434\u0440\u0435\u0441 \u0441\u0435\u043a\u0446\u0438\u0438<\/li>\n<li>SizeOfRawData (DWORD) \u2014 \u0440\u0430\u0437\u043c\u0435\u0440 RAW \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435<\/li>\n<\/ul>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, \u0435\u0441\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0443\u0441\u0442\u043e\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0430\u0434 \u043d\u0438\u043c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u0448\u0430\u0433\u0438, \u0442\u043e \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0431\u0443\u0434\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 (\u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e) \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438:  <\/p>\n<blockquote><p>IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress = 0x103000<br \/>  IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_EXPORT].Size = 0x96<\/p><\/blockquote>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u0433\u043e\u0432\u043e\u0440\u044e \u043f\u0440\u043e Delphi 10.4, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0441 \u0442\u0440\u0435\u043c\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<p>  dbkFCallWrapperAddr, _dbk_fcall_wrapper \u0438 TMethodImplementationIntercept<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 RVA \u0430\u0434\u0440\u0435\u0441 0x103000 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0438 \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0432 RAW \u0438 \u0432\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0443\u0442 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 IMAGE_SECTION_HEADER, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%201\/RawScanner.ModulesData.pas#L39\" rel=\"nofollow noopener noreferrer\">TRawPEImage<\/a>. \u042d\u0442\u0430\u043f\u044b \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 (LoadFromImage + LoadNtHeader) \u0438 \u0441\u0435\u043a\u0446\u0438\u0439 (LoadSections) \u044f \u043f\u0440\u043e\u043f\u0443\u0449\u0443, \u043e\u0442\u043c\u0435\u0447\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043d\u044e\u0430\u043d\u0441.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043f\u043e\u043b\u0435 FNtHeader \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f TImageNtHeaders64 \u0438 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u0430\u043f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0432 64. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  \u041d\u0430\u0447\u043d\u0443 \u0441\u0440\u0430\u0437\u0443 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">function TRawPEImage.RvaToVa(RvaAddr: DWORD): ULONG_PTR64; begin   Result := FImageBase + RvaAddr; end;  function TRawPEImage.VaToRva(VaAddr: ULONG_PTR64): DWORD; begin   Result := VaAddr - FImageBase; end;<\/code><\/pre>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0432\u0441\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 RVA \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0432 VA \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442.<br \/>  \u0414\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437 RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 RAW \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u0440\u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<pre><code class=\"delphi\">function TRawPEImage.AlignDown(Value, Align: DWORD): DWORD; begin   Result := Value and not DWORD(Align - 1); end;  function TRawPEImage.AlignUp(Value, Align: DWORD): DWORD; begin   if Value = 0 then Exit(0);   Result := AlignDown(Value - 1, Align) + Align; end;<\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435, \u0430 \u0442\u0440\u0435\u0442\u044c\u044f \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u0438\u0441\u043a \u0441\u0435\u043a\u0446\u0438\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.GetSectionData<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.GetSectionData(RvaAddr: DWORD;   var Data: TSectionData): Boolean; var   I, NumberOfSections: Integer;   SizeOfRawData, VirtualSize: DWORD; begin   Result := False;    NumberOfSections := Length(FSections);   for I := 0 to NumberOfSections - 1 do   begin      if FSections[I].SizeOfRawData = 0 then       Continue;     if FSections[I].PointerToRawData = 0 then       Continue;      Data.StartRVA := FSections[I].VirtualAddress;     if FNtHeader.OptionalHeader.SectionAlignment >= DEFAULT_SECTION_ALIGNMENT then       Data.StartRVA := AlignDown(Data.StartRVA, FNtHeader.OptionalHeader.SectionAlignment);      SizeOfRawData := FSections[I].SizeOfRawData;     VirtualSize := FSections[I].Misc.VirtualSize;      \/\/ \u0435\u0441\u043b\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0446\u0438\u0438 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0442\u043e \u0431\u0435\u0440\u0435\u043c \u0435\u0433\u043e \u0438\u0437 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0434\u0430\u043d\u043d\u044b\u0445     \/\/ (\u0441\u043c. LdrpSnapIAT \u0438\u043b\u0438 RelocateLoaderSections)     \/\/ \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0443\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f SectionAlignment     if VirtualSize = 0 then       VirtualSize := SizeOfRawData;      if FNtHeader.OptionalHeader.SectionAlignment >= DEFAULT_SECTION_ALIGNMENT then     begin       SizeOfRawData := AlignUp(SizeOfRawData, FNtHeader.OptionalHeader.FileAlignment);       VirtualSize := AlignUp(VirtualSize, FNtHeader.OptionalHeader.SectionAlignment);     end;     Data.Size := Min(SizeOfRawData, VirtualSize);      if (RvaAddr >= Data.StartRVA) and (RvaAddr &lt; Data.StartRVA + Data.Size) then     begin       Data.Index := I;       Result := True;       Break;     end;    end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0441\u0435\u043a\u0446\u0438\u0439, \u0438 \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u043a \u0441\u0435\u043a\u0446\u0438\u0439 \u0441 \u043d\u0443\u043b\u0435\u0432\u044b\u043c \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u044b\u043c \u044d\u0442\u0430\u043f\u043e\u043c \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u0441\u0435\u043a\u0446\u0438\u0438 (\u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u043e) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 VirtualAddress \u0441 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u043d\u0438\u0437 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 SectionAlignment.<\/p>\n<p>  \u0422\u0440\u0435\u0442\u044c\u0438\u043c \u2014 \u0432\u0435\u0440\u0445\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 (\u0435\u0451 \u043a\u043e\u043d\u0435\u0446) \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 Misc.VirtualSize \u0441 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0432\u0435\u0440\u0445 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 SectionAlignment, \u0430 \u043f\u043e\u0442\u043e\u043c SizeOfRawData \u0441 \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0432\u0435\u0440\u0445 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FileAlignment.<\/p>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441, Misc.VirtualSize \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e \u0438 \u044d\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u0435\u043a\u0446\u0438\u0438 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 SizeOfRawData \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u0440\u0443\u0433\u043b\u0435\u043d\u0438\u0435 \u0432\u0432\u0435\u0440\u0445, \u043d\u043e \u0443\u0436\u0435 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 SectionAlignment.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0435\u043a\u0446\u0438\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u0440\u0430\u0432\u0435\u043d \u043c\u0435\u043d\u044c\u0448\u0435\u043c\u0443 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f, \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 RVA \u0430\u0434\u0440\u0435\u0441 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0441\u0435\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u043d\u043e\u043c\u0435\u0440 \u0441\u0435\u043a\u0446\u0438\u0438, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.RvaToRaw<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.RvaToRaw(RvaAddr: DWORD): DWORD; var   NumberOfSections: Integer;   SectionData: TSectionData;   SizeOfImage: DWORD;   PointerToRawData: DWORD; begin   Result := 0;    \/\/ ... \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u044b     if GetSectionData(RvaAddr, SectionData) then   begin     PointerToRawData := FSections[SectionData.Index].PointerToRawData;     if FNtHeader.OptionalHeader.SectionAlignment >= DEFAULT_SECTION_ALIGNMENT then       PointerToRawData := AlignDown(PointerToRawData, DEFAULT_FILE_ALIGNMENT);      Inc(PointerToRawData, RvaAddr - SectionData.StartRVA);      if PointerToRawData &lt; FSizeOfFileImage then       Result := PointerToRawData;   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043d\u0435\u0439 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 RVA \u0430\u0434\u0440\u0435\u0441 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c \u0444\u0430\u0439\u043b\u0430 \u0438 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442 \u0441\u0435\u043a\u0446\u0438\u0439 (\u0441\u043b\u0443\u0447\u0430\u0438 \u0433\u0440\u0430\u043d\u0438\u0447\u043d\u044b\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443).<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0430\u043c\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f, \u0438\u0437 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u044b\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f RVA \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438 \u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f PointerToRawData, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0441\u0435\u043a\u0446\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 RAW \u0430\u0434\u0440\u0435\u0441, \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u0430 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043e\u043d\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 TRawPEImage \u0445\u0440\u0430\u043d\u0438\u0442 \u0443\u0436\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0432 VA.<\/p>\n<pre><code class=\"delphi\">function TRawPEImage.VaToRaw(VaAddr: ULONG_PTR64): DWORD; begin   Result := RvaToRaw(VaToRva(VaAddr)); end;<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043d\u0430 &#8216;ntdll.dll&#8217; \u0442\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 Win11 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u0437 SysWOW64) \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0442\u0430\u043a\u0438\u0435:<\/p>\n<ul>\n<li>RVA \u0430\u0434\u0440\u0435\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 = 0\u0445110360 (VA \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0440\u0430\u0432\u0435\u043d 0x77A60360)<\/li>\n<li>\u041f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 &#8216;.text&#8217;, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 RVA 0x1000, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 0\u0445122800 \u0431\u0430\u0439\u0442, PointerToRawData = 0\u0445400.<\/li>\n<li>\u0417\u043d\u0430\u0447\u0438\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 RAW \u0430\u0434\u0440\u0435\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d: 0\u0445110360 \u2014 0x1000 + 0\u0445400 = 0\u044510F760<\/li>\n<\/ul>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 HEX \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e VA \u0430\u0434\u0440\u0435\u0441\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vm\/wt\/5f\/vmwt5ff2kap9lfb6je5vk183wwe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vm\/wt\/5f\/vmwt5ff2kap9lfb6je5vk183wwe.png\"\/><\/p>\n<p>  \u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u0437\u043d\u0430\u0447\u0438\u0442 RAW \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0446\u0438\u043f\u0438\u0435\u043d\u0442\u0430 \u044f \u0432\u0437\u044f\u043b \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 ACE \u0430\u0440\u0445\u0438\u0432\u0430\u043c\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0435\u0439 \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u0418\u0442\u0430\u043a, \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b IMAGE_EXPORT_DIRECTORY, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.LoadExport<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.LoadExport(Raw: TStream): Boolean; var   I, Index: Integer;   LastOffset: Int64;   ImageExportDirectory: TImageExportDirectory;   FunctionsAddr, NamesAddr: array of DWORD;   Ordinals: array of Word;   ExportChunk: TExportChunk; begin   Result := False;   LastOffset := VaToRaw(ExportDirectory.VirtualAddress);   if LastOffset = 0 then Exit;   Raw.Position := LastOffset;   Raw.ReadBuffer(ImageExportDirectory, SizeOf(TImageExportDirectory));    if ImageExportDirectory.NumberOfFunctions = 0 then Exit;    \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 ApiSet,   \/\/ \u043e\u043d \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d \u0438\u043c\u0435\u043d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438   \/\/ \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:   \/\/ kernel.appcore.dll -> appcore.dll   \/\/ gds32.dll -> fbclient.dll   Raw.Position := RvaToRaw(ImageExportDirectory.Name);   if Raw.Position = 0 then     Exit;   FOriginalName := ReadString(Raw);    \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043c\u0430\u0441\u0438\u0432 Rva \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439   SetLength(FunctionsAddr, ImageExportDirectory.NumberOfFunctions);   Raw.Position := RvaToRaw(ImageExportDirectory.AddressOfFunctions);   if Raw.Position = 0 then     Exit;   Raw.ReadBuffer(FunctionsAddr[0], ImageExportDirectory.NumberOfFunctions shl 2);<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c VA \u0430\u0434\u0440\u0435\u0441 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0432 RAW (\u0442.\u0435. \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b VaToRaw). \u0422\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u043a\u043e\u0434\u0443 \u043c\u043d\u043e\u0433\u043e, \u0438 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435 \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u0432 \u043a\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c.<\/p>\n<p>  \u041e\u0441\u043e\u0431\u043e \u043e\u0442\u043c\u0435\u0447\u0443 \u2014 \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b IMAGE_EXPORT_DIRECTORY \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 RVA, \u0442.\u0435. \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435, \u043b\u0438\u0431\u043e \u0432 RAW \u0435\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 \u0444\u0430\u0439\u043b\u0430, \u043b\u0438\u0431\u043e \u0432 VA \u0435\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438!<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0435\u0449\u0435 \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435.<br \/>  \u0414\u0430\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0421\u0435\u0439\u0447\u0430\u0441 \u043e\u043d\u043e \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u0430\u0432\u0430\u0445.<br \/>  \u041d\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u042d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a DWORD, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 UNACEV2.DLL<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/dh\/jx\/2r\/dhjx2rdnx0oaqnniw2krfqqhzx0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/dh\/jx\/2r\/dhjx2rdnx0oaqnniw2krfqqhzx0.png\"\/><\/p>\n<p>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0434\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 IMAGE_EXPORT_DIRECTORY \u0438 \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0435\u0451 \u043f\u043e\u043b\u044f. \u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u044f \u0432 \u043d\u0435\u0439 \u044d\u0442\u043e NumberOfFunctions + AddressOfFunctions.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0441\u043e \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 NumberOfNames + AddressOfNames + AddressOfNameOrdinals \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e, \u043d\u043e NumberOfFunctions + AddressOfFunctions \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0442.\u043a. \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e \u0438\u0445 ORDINAL \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e (\u0442.\u0435. \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043d\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438). <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0441\u0438\u043d\u044f\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c:<\/p>\n<pre><code class=\"delphi\">03517034: 08 DB 00 00    EAT FuncAddr [1] UNACEV2.DLL!ACEInitDll = [34DDB08]<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>03517034- \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f RVA \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 ACEInitDll<\/li>\n<li>08 DB 00 00- \u044d\u0442\u043e 4 \u0431\u0430\u0439\u0442\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f RVA \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0432 DWORD \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c 0x0000DB08 (\u0447\u0438\u0441\u043b\u0430 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432 little-endian \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0442.\u0435. \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0438\u0445 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u043e\u043c\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044e).<\/li>\n<li>EAT FuncAddr [1] \u2014 \u044d\u0442\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u044f\u0441\u043d\u044f\u044e\u0449\u0438\u0439 \u0442\u0438\u043f \u0430\u0434\u0440\u0435\u0441\u0430 \u0438 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 ORDINAL \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0417\u0430\u043c\u0435\u0447\u0443 \u2013 Ordinal \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440, \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043d\u0434\u0435\u043a\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c IMAGE_EXPORT_DIRECTORY.Base \u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u0433\u043e \u043d\u043e\u043c\u0435\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u041f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0443 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 GetProcAddress(dll, MAKEINTRESOURCE(ordinal)). \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043e\u043d \u0440\u0430\u0432\u0435\u043d \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0430 \u0432\u043e\u0442 \u0432 ntdll \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u043d \u0440\u0430\u0432\u0435\u043d \u0432\u043e\u0441\u044c\u043c\u0438.<\/li>\n<li>UNACEV2.DLL!ACEInitDll = [34DDB08] \u2014 \u0441\u0430\u043c\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0430 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0435\u0451 VA \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0435\u0440\u043d\u0435\u0442 GetProcAddress (VA = RVA + ImageBase)<\/li>\n<\/ul>\n<p>  \u0418\u0437 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0433\u043e \u043f\u0443\u043d\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a \u043a\u0430\u043a RVA \u0440\u0430\u0432\u0435\u043d 0xDB08, \u0430 VA \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0432\u0435\u043d 0\u044534DDB08 \u0442\u043e Instance \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043e\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430) \u0440\u0430\u0432\u0435\u043d 0\u0445034D0000<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u0432 \u043f\u0435\u0440\u0432\u044b\u0445 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u043a\u043e\u0431\u043a\u0430\u0445) \u0438\u0434\u0443\u0442 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u043e\u0442 \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u0434\u043e \u0448\u0435\u0441\u0442\u0438. \u042d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c\u0441\u044f, \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u043e (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e) \u0442\u043e\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0432 \u043a\u043e\u0434\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0412\u043e\u0442 \u043a\u0430\u043a \u043e\u043d\u0438 \u0438\u0434\u0443\u0442 \u0432 \u043a\u043e\u0434\u0435, \u0442\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0438 \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 (\u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043f\u043e \u0438\u0445 RVA \u0438\u043b\u0438 VA \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0434\u0443\u0442 \u043d\u0430 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435, \u043f\u0440\u0430\u0432\u0434\u0430 \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a).<\/p>\n<p>  \u0411\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0434\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 AddressOfNames. \u042d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0435\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 IMAGE_EXPORT_DIRECTORY.NumberOfNames \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u0433\u043e \u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 (\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435), \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u0438\u043c \u0438\u043c\u0435\u043d\u0430\u043c \u0438\u0434\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 GetProcAddress, \u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u2014 \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 RVA \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0431\u0443\u0444\u0435\u0440 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c (\u0441\u0442\u0440\u043e\u0433\u043e \u043d\u0430 Ansi \u0431\u0443\u0444\u0435\u0440).<\/p>\n<p>  \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0435\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e (AddressOfFunctions) \u0441\u043f\u0438\u0441\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u043a\u043e\u0435 \u0438\u043c\u044f \u043a\u0430\u043a\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 AddressOfNameOrdinals. \u042d\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0445 WORD, \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 IMAGE_EXPORT_DIRECTORY.NumberOfNames \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 (\u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443) \u0442\u0430\u043a\u043e\u043c\u0443 \u0436\u0435 \u0438\u043c\u0435\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u0442 \u043d\u0443\u043b\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 AddressOfFunctions.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435:<br \/>  1. \u0438\u043c\u044f \u0441\u0430\u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 AddressOfNames:<br \/>  0351704C: 70 70 04 00 EAT Name [5] UNACEV2.DLL!ACEExtract = [3517070]<br \/>  2. \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0435\u0439 \u043e\u0440\u0434\u0438\u043d\u0430\u043b \u0438\u043d\u0434\u0435\u043a\u0441 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 AddressOfNameOrdinals<br \/>  03517064: 04 00 EAT Ordinal [5] UNACEV2.DLL!ACEExtract = 4<br \/>  3. \u0438\u043d\u0434\u0435\u043a\u0441 \u0440\u0430\u0432\u0435\u043d \u0447\u0435\u0442\u044b\u0440\u0435\u043c. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u0442 \u043d\u0443\u043b\u044f \u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 RVA \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0427\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 AddressOfFunctions:<br \/>  03517044: 67 DD 00 00 FuncAddr [5] UNACEV2.DLL!ACEExtract = [34DDD67]<br \/>  4. \u041d\u0443 \u0430 ORDINAL \u0438\u043d\u0434\u0435\u043a\u0441 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0432\u0435\u043d \u0438\u043d\u0434\u0435\u043a\u0441\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 + \u0431\u0430\u0437\u0430, \u0442.\u0435. \u043f\u044f\u0442\u0438. <\/p>\n<p>  \u0425\u0438\u0442\u0440\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 <b>\u0438\u043d\u0434\u0435\u043a\u0441 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430<\/b>!<br \/>  \u0418\u043c\u0435\u043d\u043d\u043e \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0438 \u0443 \u043a\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0431\u043e\u043b\u044c\u0448\u0435 65535 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u044f \u0437\u043d\u0430\u044e \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438).<\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0427\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">  \/\/ \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442!   \/\/ \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0438\u043c\u0435\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u043f\u043e \u0438\u043c\u0435\u043d\u0438,   \/\/ \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0430\u043c. \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: mfperfhelper.dll   \/\/ \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043d\u0430 \u0438\u0445 \u043d\u0430\u043b\u0438\u0447\u0438\u0435   if ImageExportDirectory.NumberOfNames > 0 then   begin      \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 Rva \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438\u043c\u0435\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u0439     SetLength(NamesAddr, ImageExportDirectory.NumberOfNames);     Raw.Position := RvaToRaw(ImageExportDirectory.AddressOfNames);     if Raw.Position = 0 then       Exit;     Raw.ReadBuffer(NamesAddr[0], ImageExportDirectory.NumberOfNames shl 2);      \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u043e\u0432 - \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439     \/\/ \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u0432     SetLength(Ordinals, ImageExportDirectory.NumberOfNames);     Raw.Position := RvaToRaw(ImageExportDirectory.AddressOfNameOrdinals);     if Raw.Position = 0 then       Exit;     Raw.ReadBuffer(Ordinals[0], ImageExportDirectory.NumberOfNames shl 1);      \/\/ \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u043e \u0438\u043c\u0435\u043d\u0438     for I := 0 to ImageExportDirectory.NumberOfNames - 1 do     begin       Raw.Position := RvaToRaw(NamesAddr[I]);       if Raw.Position = 0 then Continue;        \/\/ \u0434\u0432\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438       ExportChunk.FuncName := ReadString(Raw);       ExportChunk.Ordinal := Ordinals[I];        \/\/ VA \u0430\u0434\u0440\u0435\u0441 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0435\u0436\u0430\u0442\u044c Rva \u043b\u0438\u043d\u043a \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438       \/\/ \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043f\u0430\u0442\u0447\u0430       \/\/ \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.         ExportChunk.ExportTableVA := RvaToVa(         ImageExportDirectory.AddressOfFunctions + ExportChunk.Ordinal shl 2);        \/\/ \u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 RAW \u0444\u0430\u0439\u043b\u0435 \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043b\u0435\u0436\u0438\u0442 Rva \u043b\u0438\u043d\u043a       ExportChunk.ExportTableRaw := VaToRaw(ExportChunk.ExportTableVA);        \/\/ \u0421\u0430\u043c\u043e RVA \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u043c\u0435\u043d\u044f\u0442\u044c       ExportChunk.FuncAddrRVA := FunctionsAddr[ExportChunk.Ordinal];        \/\/ VA \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e) \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442       \/\/ \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0441\u043f\u043b\u0430\u0439\u0441\u0438\u043d\u0433\u0430 \u0438\u043b\u0438 \u0445\u043e\u0442\u043f\u0430\u0442\u0447\u0430 \u0447\u0435\u0440\u0435\u0437 \u0442\u0440\u0430\u043c\u043f\u043b\u0438\u043d       ExportChunk.FuncAddrVA := RvaToVa(ExportChunk.FuncAddrRVA);        \/\/ Raw \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u0438\u043a\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430       \/\/ \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438       ExportChunk.FuncAddrRaw := RvaToRaw(ExportChunk.FuncAddrRVA);        \/\/ \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430       FunctionsAddr[ExportChunk.Ordinal] := 0;        \/\/ \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0432 NameOrdinal \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430       Inc(ExportChunk.Ordinal, ImageExportDirectory.Base);        \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u043d\u0430\u0440\u0443\u0436\u0438       Index := FExport.Add(ExportChunk);        \/\/ vcl270.bpl \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u0435\u0442 4 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438       \/\/ \u0432\u043e\u0442 \u044d\u0442\u0438 '@$xp$39System@%TArray__1$p17System@TMetaClass%'       \/\/ \u0441 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0430\u043c\u0438 7341, 7384, 7411, 7222       \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0438\u043c\u0435\u043d \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0440\u0432\u0443\u044e       \/\/ \u0438\u0431\u043e \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u044b       \/\/ upd: \u0430 \u043e\u043d\u0438 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043b\u0438\u043d\u043a\u0443\u044e\u0442\u0441\u044f, \u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0434\u0436\u0435\u043d\u0435\u0440\u0438\u043a\u0430\u043c\u0438 \u0441 \u043b\u0438\u043d\u043a\u043e\u043c \u043d\u0430 \u043a\u043b\u0430\u0441\u0441       \/\/ \u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u043c \u0447\u0435\u0440\u0435\u0437 Symbols \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430       \/\/ \u0441 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u043e\u043c 7384       FExportIndex.TryAdd(ExportChunk.FuncName, Index);       \/\/ \u0438\u043d\u0434\u0435\u043a\u0441 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0443       \/\/ (\u0435\u0441\u043b\u0438 \u0442\u0443\u0442 \u0443\u043f\u0430\u0434\u0435\u0442 \u0441 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u043c, \u0437\u043d\u0430\u0447\u0438\u0442 \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0432\u0435\u0440\u043d\u043e \u0437\u0430\u0447\u0438\u0442\u0430\u043d\u043e)       FExportOrdinalIndex.Add(ExportChunk.Ordinal, Index);     end;   end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0427\u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442:<\/p>\n<p>  \u0421\u0430\u043c\u044b\u043c \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0430 \u0435\u0441\u0442\u044c \u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043c\u0435\u043d? \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u0441\u0435 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u043b \u0432\u044b\u0448\u0435 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0415\u0451 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e, \u043e\u043d\u0430 \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u043e\u0437\u0436\u0435, \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0447\u0442\u043e \u0443\u043f\u043e\u043c\u044f\u043d\u0443, \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 VA \u0430\u0434\u0440\u0435\u0441 \u043a\u0430\u0436\u0434\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Instance \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0435 \u043a\u043b\u0430\u0441\u0441\u0430, \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u043d \u0432 ExportChunk.FuncAddrVA, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u043b\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u044d\u0442\u043e ExportChunk.ExportTableVA.<\/p>\n<p>  \u041e\u0431\u0430 \u044d\u0442\u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445, \u0442.\u043a. \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 ExportTableVA \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0430\u0432\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0430 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 FuncAddrVA \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043a\u043e\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u043a\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0447\u0435\u0440\u0435\u0437 HotPatch \u0438\u043b\u0438 \u0442\u0440\u0430\u043c\u043f\u043b\u0438\u043d \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0435\u0451 \u043a\u043e\u0434\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c).<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043b\u0430\u0441\u0441\u043e\u043c \u043f\u043e\u043c\u0438\u043c\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 FExport \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u044f.<\/p>\n<ul>\n<li>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u0438\u043c\u0435\u043d \u0444\u0443\u043d\u043a\u0446\u0438\u0439 FExportIndex<\/li>\n<li>\u0421\u043b\u043e\u0432\u0430\u0440\u044c \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 FExportOrdinalIndex<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0443\u0436\u0435 \u0447\u0438\u0441\u0442\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0442\u0443\u0442 \u044f \u0438\u0445 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0438\u043c\u0435\u043d \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0431\u044b\u0442\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e, \u043d\u043e \u043a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044e \u043a \u043a\u043e\u0434\u0443, Delphi \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b, \u043f\u0440\u0430\u0432\u0434\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u044d\u0442\u0438 \u0438\u043c\u0435\u043d\u0430 \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u044b\u043c, \u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043d\u0435\u043a\u0438\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0422\u0430\u043a\u043e\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u0432 \u0448\u0442\u0430\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0438\u0437 ntdll RtlNtdllName \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0442.\u043a. \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443.<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445 \u0447\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0430\u043c (\u0431\u0435\u0437 \u0438\u043c\u0435\u043d\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FunctionsAddr[Index], \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u0438\u043b\u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u043e\u0432).<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0414\u0430\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0438\u0434\u0442\u0438 \u0441 \u0440\u0430\u0437\u0440\u044b\u0432\u0430\u043c\u0438, \u0442.\u0435. \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u044f\u0437\u044b\u043a\u043e\u043c, \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043f\u043e \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0443 \u043c\u043e\u0433\u0443\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c. \u0422\u043e\u0433\u0434\u0430 \u0432\u043c\u0435\u0441\u0442\u043e RVA \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u043e\u043b\u044c, \u0432\u043e\u0442 \u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 cabinet.dll<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/3f\/54\/i7\/3f54i7b-q3qpzhxoxnrpd01byoy.png\" data-src=\"https:\/\/habrastorage.org\/webt\/3f\/54\/i7\/3f54i7b-q3qpzhxoxnrpd01byoy.png\"\/><\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u043d\u0430 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0438 \u0438 \u0438\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u0430\u0434\u043a\u0430, \u043a\u043e\u0433\u0434\u0430 \u044f \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 FunctionsAddr[Index]. \u0418\u0442\u0430\u043a \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0448\u0430\u0433:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">  \/\/ \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u043f\u043e \u0438\u043d\u0434\u0435\u043a\u0441\u0443   for I := 0 to ImageExportDirectory.NumberOfFunctions - 1 do     if FunctionsAddr[I] &lt;> 0 then     begin       \/\/ \u0437\u0434\u0435\u0441\u044c \u0432\u0441\u0435 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0447\u0442\u043e \u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u0442 \u0438\u043c\u0435\u043d\u0438       \/\/ \u0438 \u0435\u0451 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0430 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0435\u0451 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f       \/\/ \u043e\u0442 \u0431\u0430\u0437\u044b \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430       ExportChunk.FuncAddrRVA := FunctionsAddr[I];       ExportChunk.Ordinal := ImageExportDirectory.Base + DWORD(I);       ExportChunk.FuncName := EmptyStr;        \/\/ \u0441\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0435\u0441\u0442\u044c, \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u0441\u0447\u0435\u0442\u0430 \u0432 \u043e\u0440\u0434\u0438\u043d\u0430\u043b       ExportChunk.ExportTableVA := RvaToVa(         ImageExportDirectory.AddressOfFunctions + DWORD(I shl 2));        ExportChunk.FuncAddrVA := RvaToVa(ExportChunk.FuncAddrRVA);       ExportChunk.FuncAddrRaw := RvaToRaw(ExportChunk.FuncAddrRVA);        \/\/ \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u043d\u0430\u0440\u0443\u0436\u0438       Index := FExport.Add(ExportChunk);        \/\/ \u0438\u043c\u0435\u043d\u0438 \u043d\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0438\u043d\u0434\u0435\u043a\u0441 \u043e\u0440\u0434\u0438\u043d\u0430\u043b\u043e\u0432       FExportOrdinalIndex.Add(ExportChunk.Ordinal, Index);     end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u043e \u0447\u0442\u0435\u043d\u0438\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432\u0441\u0451, \u0442\u043e\u0447\u043d\u0435\u0435 \u044d\u0442\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u0442\u0430\u043f, \u043d\u043e \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043b\u0430\u0441\u0441\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. <\/p>\n<pre><code class=\"delphi\">var   Raw: TRawPEImage;   hLib: THandle;   ExportFunc: TExportChunk; begin   hLib := GetModuleHandle('ntdll.dll');   Raw := TRawPEImage.Create('c:\\windows\\system32\\ntdll.dll', ULONG64(hLib));   try     for ExportFunc in Raw.ExportList do       if ExportFunc.FuncAddrVA &lt;> ULONG64(GetProcAddress(hLib, PChar(ExportFunc.FuncName))) then         Writeln(ExportFunc.FuncName, ' wrong addr: ', ExportFunc.FuncAddrVA);   finally     Raw.Free;   end; end.<\/code><\/pre>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f ntdll.dll \u0438 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 GetProcAddress.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430  <\/p>\n<blockquote><p>Export count: 2469<\/p><\/blockquote>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u044d\u0442\u0430\u043f\u0443, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0431\u0440\u0430\u0442\u044c \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%201\" rel=\"nofollow noopener noreferrer\">\u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u0435\u0441\u043b\u0438 \u043c\u0435\u043d\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u044e\u0442 \u043b\u044e\u0434\u0438, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0439\u0442\u0435 \u0432\u043e\u0437\u043c\u0443\u0449\u0430\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u043d\u0435 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0448\u0430\u0433\u0438 \u043f\u043e \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430. \u042f \u043f\u0440\u043e \u044d\u0442\u043e \u0432 \u043a\u0443\u0440\u0441\u0435, \u043d\u043e \u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u043e\u043d\u0438 \u043f\u043e\u043a\u0430 \u0447\u0442\u043e \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u2014 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442, \u043d\u043e \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435. <\/p>\n<h3>2. \u0420\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430<\/h3>\n<p>  \u0412\u0441\u0442\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441 \u2014 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432(\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a) \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438 \u0435\u0441\u0442\u044c \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431, \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/psapi\/nf-psapi-enumprocessmodulesex\" rel=\"nofollow noopener noreferrer\">EnumProcessModulesEx<\/a>, \u043d\u043e \u0441 \u043d\u0438\u043c \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441 \u2014 \u043e\u043d \u043d\u0435 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e 64 \u0431\u0438\u0442\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u044f\u043c, \u0431\u0443\u0434\u0443\u0447\u0438 \u0432\u044b\u0437\u0432\u0430\u043d \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">  function EnumProcessModulesEx(hProcess: THandle; lphModule: PHandle;     cb: DWORD; var lpcbNeeded: DWORD; dwFilterFlag: DWORD): BOOL; stdcall;     external 'psapi.dll';  procedure TestEnumSelfModules; const   LIST_MODULES_ALL = 3; var   Buff: array of THandle;   Needed: DWORD;   I: Integer;   FileName: array[0..MAX_PATH] of Char; begin   EnumProcessModulesEx(GetCurrentProcess, nil, 0, Needed, LIST_MODULES_ALL);   SetLength(Buff, Needed shr 2);   if EnumProcessModulesEx(GetCurrentProcess, @Buff[0], Needed, Needed, LIST_MODULES_ALL) then   begin     for I := 0 to Integer(Needed) - 1 do       if Buff[I] &lt;> 0 then       begin         FillChar(FileName, MAX_PATH, 0);         GetModuleFileNameEx(GetCurrentProcess, Buff[I], @FileName[1], MAX_PATH);         Writeln(I, ': ', IntToHex(Buff[I], 1), ' ', string(PChar(@FileName[1])));       end;   end; end;<\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/cj\/ux\/gq\/cjuxgqv8zdq5nwbpkcd_3ghtvoo.png\" data-src=\"https:\/\/habrastorage.org\/webt\/cj\/ux\/gq\/cjuxgqv8zdq5nwbpkcd_3ghtvoo.png\"\/><\/p>\n<p>  \u0421\u043b\u0435\u0432\u0430 \u0442\u043e \u0447\u0442\u043e \u043e\u043d \u0432\u044b\u0432\u0435\u0434\u0435\u0442, \u0430 \u0441\u043f\u0440\u0430\u0432\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f. \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043f\u043a\u0438 C:\\Windows\\SysWOW64\\ \u043f\u0440\u0438\u0447\u0435\u043c \u0438\u0437-\u0437\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0435\u0433\u043e \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430, \u044d\u0442\u043e\u0442 \u0444\u0430\u043a\u0442 \u043f\u0440\u044f\u0447\u0435\u0442\u0441\u044f \u0438 \u043f\u0443\u0442\u0438 \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a C:\\Windows\\System32\\ \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0435 \u0442\u0430\u043a.<\/p>\n<p>  \u0422\u0430\u043a\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432, \u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442.\u0435. \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u043e \u0441\u0443\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043b\u044f 32 \u0431\u0438\u0442 \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 4 \u0431\u0430\u0439\u0442\u0430 \u0438 \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043f\u043e\u043b\u043d\u044b\u0439 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u0442\u043e\u0447\u043d\u044e \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u0412 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421 <b>\u041d\u0415 \u0421\u0423\u0428\u0415\u0421\u0422\u0412\u0423\u0415\u0422<\/b> 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432! \u0412\u0441\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0431\u0435\u0437 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f 64 \u0431\u0438\u0442\u043d\u044b\u043c\u0438, \u0438 \u043a\u043e\u0433\u0434\u0430 \u0441\u0442\u0430\u0440\u0442\u0443\u0435\u0442 32 \u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 WOW64 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043c \u0432 \u043d\u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e\u0442\u0441\u044f 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0441 \u041e\u0421 \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0430 \u0447\u0435\u0440\u0435\u0437 WOW64 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443, \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0443\u044e \u0432\u0441\u0435 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b API \u0432 \u0438\u0445 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438.<\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443:<\/p>\n<ol>\n<li>\u0412 32 \u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/li>\n<li>\u0424\u043b\u0430\u0433 IMAGE_FILE_LARGE_ADDRESS_AWARE \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0432 \u0420\u0415 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a\u043e \u0432\u0441\u0435\u043c 4 \u0433\u0438\u0433\u0430\u0431\u0430\u0439\u0442\u0430\u043c \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u043d\u0435 \u043a \u0442\u0440\u0435\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 32 \u0431\u0438\u0442\u043d\u043e\u0439 OS \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c PAE (Physical Address Extension) \u0438 \u0444\u043b\u0430\u0433\u0435 \/3GB \u0432 boot.ini<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u043d\u0443\u0436\u043d\u044b \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0438\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0443.<\/p>\n<p>  \u0412 \u043c\u043e\u0434\u0443\u043b\u0435 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%202\/RawScanner.Types.pas\" rel=\"nofollow noopener noreferrer\">RawScanner.Types<\/a> \u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0438\u0440\u0443\u044e \u0442\u0440\u0438 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TModuleData, UNICODE_STRING32 \u0438 UNICODE_STRING64, \u0438 \u0441\u043e\u0437\u0434\u0430\u044e \u043d\u043e\u0432\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%202\/RawScanner.Wow64.pas\" rel=\"nofollow noopener noreferrer\">RawScanner.Wow64<\/a>. \u041e\u043d \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0430\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438:<\/p>\n<ol>\n<li>IsWow64Process \u2014 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b WOW64 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/li>\n<li>Wow64DisableWow64FsRedirection + Wow64RevertWow64FsRedirection \u2014 \u0434\u043b\u044f \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u0437 System32 \u0432 SysWOW64<\/li>\n<li>NtWow64QueryInformationProcess64 \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 NtQueryInformationProcess \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438.<\/li>\n<li>NtWow64ReadVirtualMemory64 \u2014 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e 64 \u0431\u0438\u0442\u043d\u044b\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c, \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 ReadProcessMemory<\/li>\n<\/ol>\n<p>\u0422\u0430\u043a \u0436\u0435 \u0432 \u043c\u043e\u0434\u0443\u043b\u044c <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%202\/RawScanner.Utils.pas\" rel=\"nofollow noopener noreferrer\">RawScanner.Utils<\/a> \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e ReadRemoteMemory, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043a\u0430\u043a\u043e\u0439 \u0438\u0437 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>  \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 TModuleData \u0438 \u0441\u043f\u0438\u0441\u043e\u043a TModuleList \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c \u043c\u043e\u0434\u0443\u043b\u044f\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u044d\u0442\u0430\u043f\u0430\u0445.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0433\u0434\u0435 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445? \u0418\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u0434\u0432\u0443\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 32 \u0431\u0438\u0442\u043d\u044b\u0439). \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u043f\u043e \u0441\u0435\u0431\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u043b\u0435\u0439 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/winternl\/ns-winternl-peb\" rel=\"nofollow noopener noreferrer\">PPEB_LDR_DATA->Ldr<\/a>. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0443\u0447\u0438\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0447\u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u044d\u0442\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432.<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0447\u0435\u0442\u044b\u0440\u0435 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438:<\/p>\n<ol>\n<li>\u041c\u044b 32 \u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e<\/li>\n<li>\u041c\u044b 64 \u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e<\/li>\n<li>\u041c\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 (\u0442.\u0435. \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u0443\u044e \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c).<\/li>\n<\/ol>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0440\u0430\u0441\u043f\u0438\u0448\u0443 \u043f\u043e \u0448\u0430\u0433\u0430\u043c.<\/p>\n<p>  \u0428\u0430\u0433 \u043f\u0435\u0440\u0432\u044b\u0439, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0433\u043e \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"delphi\">var   hProcess: THandle;   IsWow64Mode: LongBool; begin   hProcess := OpenProcess(     PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,     False, GetCurrentProcessId);    Wow64Support.IsWow64Process(hProcess, IsWow64Mode);<\/code><\/pre>\n<p>  \u0424\u043b\u0430\u0433 IsWow64Mode \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 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u043e\u0434 WOW64 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0431\u043b\u043e\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u043e\u043b\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e \u043f\u043e\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430):<\/p>\n<pre><code class=\"delphi\">  TPEB = record     InheritedAddressSpace: BOOLEAN;     ReadImageFileExecOptions: BOOLEAN;     BeingDebugged: BOOLEAN;     BitField: BOOLEAN;     Mutant: THandle;     ImageBaseAddress: PVOID;     LoaderData: PVOID; \/\/ \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043d\u0430\u0441 \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442   end;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0435\u0449\u0435 \u0434\u0432\u0435 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0438 \u0435\u0451-\u0436\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0433\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0447\u0442\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0415\u0449\u0435 \u0440\u0430\u0437 \u0437\u0430\u043e\u0441\u0442\u0440\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0443 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421 \u0442\u0430\u043a\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u0432\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043b\u043e\u043a\u043e\u0432 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0445\u043e\u0434 \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0430\u043a\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u0432\u0430, \u0434\u043b\u044f 64 \u0431\u0438\u0442 \u0438 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0434\u043b\u044f WOW64!   <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TPEB32 \u0438 TPEB64<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">  TPEB32 = record     InheritedAddressSpace: BOOLEAN;     ReadImageFileExecOptions: BOOLEAN;     BeingDebugged: BOOLEAN;     BitField: BOOLEAN;     Mutant: ULONG;     ImageBaseAddress: ULONG;     LoaderData: ULONG;   end;      TPEB64 = record     InheritedAddressSpace: BOOLEAN;     ReadImageFileExecOptions: BOOLEAN;     BeingDebugged: BOOLEAN;     BitField: BOOLEAN;     Mutant: ULONG_PTR64;     ImageBaseAddress: ULONG_PTR64;     LoaderData: ULONG_PTR64;   end;   <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0430\u044f, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 NtQueryInformationProcess \u0441 \u0444\u043b\u0430\u0433\u043e\u043c ProcessBasicInformation \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439, \u043f\u043e\u043c\u0438\u043c\u043e \u043f\u0440\u043e\u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435 <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/winternl\/nf-winternl-ntqueryinformationprocess\" rel=\"nofollow noopener noreferrer\">PROCESS_BASIC_INFORMATION.PebBaseAddress<\/a>, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0430\u0434\u0440\u0435\u0441 \u0431\u043b\u043e\u043a\u0430 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u0438\u0437 \u043d\u0435\u0433\u043e \u0438 \u0431\u0443\u0434\u0443\u0442 \u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0443\u0436\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ReadNativePeb<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function ReadNativePeb(hProcess: THandle; out APeb: TPEB64): Boolean; const   ProcessBasicInformation = 0; var   PBI: PROCESS_BASIC_INFORMATION;   dwReturnLength: Cardinal;   NativePeb: TPEB; begin   Result := NtQueryInformationProcess(hProcess,     ProcessBasicInformation, @PBI, SizeOf(PBI), @dwReturnLength) = 0;   if not Result then     Exit;    Result := ReadRemoteMemory(hProcess, ULONG_PTR64(PBI.PebBaseAddress),     @NativePeb, SizeOf(TPEB));   if Result then   {$IFDEF WIN32}     APeb := Convert32PebTo64(TPEB32(NativePeb));   {$ELSE}     APeb := TPEB64(NativePeb);   {$ENDIF} end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 64 \u0431\u0438\u0442\u043d\u044b\u0439 PEB, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439. \u0415\u0441\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f 32 \u0431\u0438\u0442\u043d\u044b\u0439 PEB, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0432\u044b\u0437\u043e\u0432\u043e\u043c Convert32PebTo64.<\/p>\n<p>  \u041d\u043e \u043e\u043d\u0430 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u0441\u043b\u0443\u0447\u0430\u044f \u0438\u0437 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0432\u044b\u0448\u0435\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445.  <\/p>\n<blockquote>\n<ol>\n<li>\u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0441\u0430\u043c\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435)<\/li>\n<li>\u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB \u0438\u0437 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043c\u044b \u0441\u0430\u043c\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u0432 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0435)<\/li>\n<\/ol>\n<\/blockquote>\n<p>\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Read64PebFrom32Bit<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function Read64PebFrom32Bit(hProcess: THandle; out APeb: TPEB64): Boolean; const   ProcessBasicInformation = 0; var   PBI64: PROCESS_BASIC_INFORMATION64;   dwReturnLength: Cardinal; begin   Result := Wow64Support.QueryInformationProcess(hProcess,     ProcessBasicInformation, @PBI64, SizeOf(PBI64), dwReturnLength);   if not Result then     Exit;    Result := ReadRemoteMemory(hProcess, PBI64.PebBaseAddress,     @APeb, SizeOf(TPEB64)); end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043e\u0434 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u0435\u043d \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0437\u0430 \u043e\u0434\u043d\u0438\u043c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c, \u0437\u0434\u0435\u0441\u044c \u0442\u0430\u043a-\u0436\u0435 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c ProcessBasicInformation, \u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 WOW64 \u0445\u044d\u043b\u043f\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e 64 \u0431\u0438\u0442\u043d\u043e\u043c\u0443 PEB, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430\u043f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0442\u0443\u0442 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d, \u0438\u0431\u043e \u044d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u0447\u0438\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e 64 \u0431\u0438\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0432\u044b\u0437\u0432\u0430\u043d \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u043b\u044e\u0431\u043e\u0439 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">Read32PebFrom64Bit<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function Read32PebFrom64Bit(hProcess: THandle; out APeb: TPEB64): Boolean; const   ProcessWow64Information = 26; var   PebWow64BaseAddress: ULONG_PTR;   dwReturnLength: Cardinal;   Peb32: TPEB32; begin   Result := NtQueryInformationProcess(hProcess,     ProcessWow64Information, @PebWow64BaseAddress, SizeOf(ULONG_PTR),     @dwReturnLength) = 0;   if not Result then     Exit;    Result := ReadRemoteMemory(hProcess, PebWow64BaseAddress,     @Peb32, SizeOf(TPEB32));   if Result then     APeb := Convert32PebTo64(Peb32); end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u042d\u0442\u043e\u0442 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u0433\u043e \u0438\u0437 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u0434\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB \u0432 32 \u0431\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 (\u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c \u043e\u043d \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442).<\/p>\n<p>  \u0418\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u043e\u043f\u044f\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 NtQueryInformationProcess \u043d\u043e \u0443\u0436\u0435 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c ProcessWow64Information \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0438\u043c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e 32 \u0431\u0438\u0442\u043d\u043e\u043c\u0443 PEB, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u043e\u043d\u0446\u0435, \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438\u0434\u0435\u0442 \u044d\u0442\u0430\u043f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u0432 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433.<\/p>\n<p>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0448\u043b\u044e\u0437, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043a\u043e\u0434\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<pre><code class=\"delphi\">function ReadPeb(hProcess: THandle; Read32Peb: Boolean; out APeb: TPEB64): Boolean; begin   ZeroMemory(@APeb, SizeOf(TPEB64));   if Read32Peb then   {$IFDEF WIN32}     Result := ReadNativePeb(hProcess, APeb)   else     Result := Read64PebFrom32Bit(hProcess, APeb);   {$ELSE}     Result := Read32PebFrom64Bit(hProcess, APeb)   else     Result := ReadNativePeb(hProcess, APeb);   {$ENDIF} end;<\/code><\/pre>\n<p>  \u0422\u0435\u0441\u0442 \u0448\u043b\u044e\u0437\u0430 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">var   PEB32, PEB64: TPEB64;      \/\/ \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u043b\u043e\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c)   ReadPeb(hProcess, True, PEB32);   ReadPeb(hProcess, False, PEB64);<\/code><\/pre>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0433\u043e\u0442\u043e\u0432, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043d\u0438\u043c, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qg\/02\/9h\/qg029h7wwt_bvhhyflj6im0dt_0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qg\/02\/9h\/qg029h7wwt_bvhhyflj6im0dt_0.png\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c \u044f \u0432\u0437\u044f\u043b \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438\u0437 WinXP \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0442\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0447\u0442\u043e \u0432 \u043d\u0435\u0439 \u0441\u043f\u0438\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e, \u0447\u0435\u043c \u0432 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Windows, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0438 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d\u044b \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0441\u0438\u043b\u044c\u043d\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u0430\u044f \u0440\u0430\u043d\u0435\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 PEB \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 PEB_LDR_DATA, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0442\u0440\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 \u0434\u0432\u0443\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 LDR_DATA_TABLE_ENTRY.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u0432 MSDN, \u0442\u043e \u0432 \u043d\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u044b, \u043a\u0440\u043e\u043c\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 <\/p>\n<p>  <a href=\"https:\/\/learn.microsoft.com\/ru-ru\/windows\/win32\/api\/winternl\/ns-winternl-peb_ldr_data\" rel=\"nofollow noopener noreferrer\">PEB_LDR_DATA structure<\/a><\/p>\n<p>  \u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a InLoadOrderModuleList (\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438) \u0438 InInitializationOrderModuleList (\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438).<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0447\u0438\u0441\u0442\u043e \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438, \u043f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u0435\u0440\u0436\u0438\u0442 \u0435\u0449\u0435 32 \u0442\u0430\u043a\u0438\u0445-\u0436\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0442\u043e\u0433\u043e-\u0436\u0435 GetModuleHandle (\u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430 \u043f\u0438\u0448\u0443\u0442 \u043a\u043e\u0434, \u0441\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0441\u0435\u0431\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0442\u0440\u0435\u0445 \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u0442\u0438\u043f\u0430 \u0440\u0443\u0442\u043a\u0438\u0442 \u043d\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u043a\u0430\u0445 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0431\u044b\u0432\u0430\u044e\u0442 \u0435\u0449\u0435 \u0438 \u043f\u0440\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u0441\u043a\u0440\u044b\u0442\u044b\u0435).<\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u043b\u0438\u0440\u0438\u043a\u0430, \u0441\u0435\u0439\u0447\u0430\u0441 \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u044e\u0430\u043d\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043d\u043e\u0433\u0438\u0435 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f. \u0410 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u044e\u0442\u0441\u044f, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 MSDN \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b (\u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043a \u043d\u0438\u043c).<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">LIST_ENTRY32, PEB_LDR_DATA32 \u0438 LDR_DATA_TABLE_ENTRY32<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">  LIST_ENTRY32 = record     FLink, BLink: ULONG;   end;    PEB_LDR_DATA32 = record     Length: ULONG;     Initialized: BOOL;     SsHandle: ULONG;     InLoadOrderModuleList: LIST_ENTRY32;     InMemoryOrderModuleList: LIST_ENTRY32;     InInitializationOrderModuleList: LIST_ENTRY32;     \/\/ etc...   end;    LDR_DATA_TABLE_ENTRY32 = record     InLoadOrderLinks: LIST_ENTRY32;     InMemoryOrderLinks: LIST_ENTRY32;     InInitializationOrderLinks: LIST_ENTRY32;     DllBase: ULONG;     EntryPoint: ULONG;     SizeOfImage: ULONG;     FullDllName: UNICODE_STRING32;     BaseDllName: UNICODE_STRING32;     Flags: ULONG;     \/\/ etc...   end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0432\u043e\u0442 \u0434\u0432\u0430 \u043f\u043e\u043b\u044f, \u043f\u0435\u0440\u0432\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0434\u0432\u0443\u0441\u0432\u044f\u0437\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 PEB_LDR_DATA.<b>InLoadOrderModuleList.FLink<\/b>, \u0442\u043e\u0447\u043d\u0435\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 VA \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b LDR_DATA_TABLE_ENTRY \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430.<br \/>  \u041f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0438 PEB_LDR_DATA.<b>InMemoryOrderModuleList.FLink<\/b> \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 LDR_DATA_TABLE_ENTRY \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438\u0431\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 MSDN.<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u0443\u0444:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/bg\/gn\/at\/bggnatmh3k0qyxox6-rfencu1sm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/bg\/gn\/at\/bggnatmh3k0qyxox6-rfencu1sm.png\"\/><\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438!<br \/>  \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 LIST_ENTRY \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0430 \u043d\u0435 \u043d\u0430 \u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u043e, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>PEB_LDR_DATA.InLoadOrderModuleList.FLink \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 LDR_DATA_TABLE_ENTRY.InLoadOrderLinks (+0 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 LDR_DATA_TABLE_ENTRY)<\/li>\n<li>PEB_LDR_DATA.InMemoryOrderModuleList.FLink \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 LDR_DATA_TABLE_ENTRY.InMemoryOrderLinks (+ sizeof(LIST_ENTRY) \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 LDR_DATA_TABLE_ENTRY)<\/li>\n<li>PEB_LDR_DATA.InInitializationOrderModuleList.FLink \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 LDR_DATA_TABLE_ENTRY.InInitializationOrderLinks (+ sizeof(LIST_ENTRY) * 2 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 LDR_DATA_TABLE_ENTRY)<\/li>\n<\/ul>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u044d\u0442\u043e \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435, \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0438\u043b \u043b\u0438\u043d\u043a\u0438 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0446\u0432\u0435\u0442\u0430\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0430\u0441\u043d\u044b\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u0438\u0434\u0443\u0442 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0441\u0438\u043d\u044f\u044f (\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0430\u044f \u0441\u043f\u0438\u0441\u043e\u043a InMemoryOrderLinks) \u0438\u0434\u0435\u0442 \u0441\u043e \u0441\u0434\u0432\u0438\u0433\u043e\u043c, \u0430 \u0437\u0435\u043b\u0435\u043d\u0430\u044f, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0430\u044f InInitializationOrderLinks \u043c\u0430\u043b\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e \u0438\u0434\u0435\u0442 \u0441 \u0435\u0449\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u0434\u0432\u0438\u0433\u043e\u043c (\u0442.\u043a. \u043e\u043d\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0434\u0432\u0430 \u0434\u0432\u0443\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430) \u0442\u0430\u043a \u0435\u0449\u0435 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 ntdll \u043f\u0435\u0440\u0432\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0430, \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b.<\/p>\n<p>  \u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0431\u0443\u0434\u0435\u0442 InLoadOrderModuleList.  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TLoaderData.Scan64LdrData<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TLoaderData.Scan64LdrData(LdrAddr: ULONG_PTR64): Integer; var   Ldr: PEB_LDR_DATA64;   Entry: LDR_DATA_TABLE_ENTRY64;   Module: TModuleData; begin   Result := 0;    \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043f\u0438\u0441\u043a\u0430   if not ReadRemoteMemory(FProcess, LdrAddr,     @Ldr, SizeOf(PEB_LDR_DATA64)) then     Exit;    LdrAddr := Ldr.InLoadOrderModuleList.FLink;    \/\/ \u043a\u0440\u0443\u0442\u0438\u043c \u0446\u0438\u043a\u043b, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443   while (ReadRemoteMemory(FProcess, LdrAddr,     @Entry, SizeOf(LDR_DATA_TABLE_ENTRY64))) and (Entry.DllBase &lt;> 0) do   begin     Module.ImageBase := Entry.DllBase;     Module.Is64Image := True;     SetLength(Module.ImagePath, Entry.FullDllName.Length shr 1);     if not ReadRemoteMemory(FProcess, Entry.FullDllName.Buffer,       @Module.ImagePath[1], Entry.FullDllName.Length) then     begin       LdrAddr := Entry.InLoadOrderLinks.FLink;       Continue;     end;  \/\/ ...      FModuleList.Add(Module);      LdrAddr := Entry.InLoadOrderLinks.FLink;     Inc(Result);   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0446\u0438\u043a\u043b \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB->Ldr. \u041e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0432 \u0441\u043f\u0438\u0441\u043a\u0435, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u043e\u043b\u044e Entry.DllBase).<\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0434\u043b\u044f 64 \u0431\u0438\u0442, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0430 \u0432\u043e\u0442 \u0441 32 \u0431\u0438\u0442\u0430\u043c\u0438 \u0432\u0441\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0445\u0438\u0442\u0440\u0435\u0435. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0435\u043b\u044c\u0437\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u043f\u0438\u0441\u043e\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0430\u043c\u0443\u044e \u043f\u0435\u0440\u0432\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0433\u043b\u0430\u0432\u044b, \u043a\u0430\u043a \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435, \u043e\u0442\u043a\u0443\u0434\u0430 EnumProcessModulesEx \u0431\u0440\u0430\u043b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u043e\u0434\u0443\u043b\u044f\u0445? \u0412\u0441\u0435 \u0432\u0435\u0440\u043d\u043e, \u043e\u0442\u0442\u0443\u0434\u0430 \u0436\u0435 \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441, \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0438 \u0442\u0430\u043c, \u0432 \u044d\u0442\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0434\u043b\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e PEB->Ldr \u0432\u0441\u0435 \u043f\u0443\u0442\u0438 \u0432\u0435\u0434\u0443\u0442 \u043a c:\\windows\\system32\\ \u0445\u043e\u0442\u044f \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0443\u0442\u0438.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b\u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u0438\u0437 \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u0432\u0441\u0435 \u0432 \u043e\u0434\u043d\u0443 \u043a\u0443\u0447\u0443, \u044f \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u0441\u0442\u044b\u043b\u044f. \u041e\u043d \u043d\u0443\u0436\u0435\u043d \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0432 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0438 \u0434\u0430\u043b\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 (\u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c) \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a (\u0446\u0435\u043b\u0438\u043a\u043e\u043c \u043a\u043e\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043e\u043d \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 64 \u0431\u0438\u0442).<\/p>\n<p>  \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0441\u0442\u044b\u043b\u044c, \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044e\u0449\u0438\u0439 \u2014 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 32 \u0431\u0438\u0442\u043d\u044b\u043c:<\/p>\n<pre><code class=\"delphi\">  function IsFile32(const FilePath: string): Boolean;   var     DosHeader: TImageDosHeader;     NtHeader: TImageNtHeaders32;     Raw: TBufferedFileStream;   begin     Raw := TBufferedFileStream.Create(FilePath, fmShareDenyWrite);     try       Raw.ReadBuffer(DosHeader, SizeOf(TImageDosHeader));       Raw.Position := DosHeader._lfanew;       Raw.ReadBuffer(NtHeader, SizeOf(TImageNtHeaders32));       Result := NtHeader.FileHeader.Machine = IMAGE_FILE_MACHINE_I386;     finally       Raw.Free;     end;   end;<\/code><\/pre>\n<p>  \u0430 \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u0442\u0440\u043e\u0435\u0442\u043e\u0447\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0432\u044b\u0448\u0435 \u0432\u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0441\u0442\u044b\u043b\u044c:  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f IsFile32<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">    \/\/ \u043d\u044e\u0430\u043d\u0441, 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 LDR \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0441 \u043f\u0443\u0442\u0435\u043c \u0438\u0437     \/\/ \u0434\u0435\u0444\u043e\u043b\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u0445\u043e\u0442\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043e\u043d\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f     \/\/ \u0438\u0437 SysWow64 \u043f\u0430\u043f\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u043b\u0438 SysWow64 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442     \/\/ \u0442\u043e \u0432\u0441\u0435 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u043f\u0443\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043c\u0435\u043d\u044f\u0435\u043c \u043d\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c     \/\/ \u0432\u044b\u0437\u043e\u0432\u0430 GetMappedFileName + \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.     \/\/ \u0414\u043b\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430, \u0442.\u043a. \u043e\u043d\u0438 \u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u043f\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u043c     \/\/ \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043a\u0443\u0434\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 32 \u0431\u0438\u0442\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0430 \u043f\u043e \u043c\u043b\u0430\u0434\u0448\u0438\u043c     \/\/ \u043c\u044b \u0438 \u0441\u0430\u043c\u0438 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438     if FUse64Addr then     begin       \/\/ GetMappedFileName \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 MM_HIGHEST_USER_ADDRESS       \/\/ \u0435\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 - \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u043d\u043e\u043b\u044c \u0441 \u043e\u0448\u0438\u0431\u043a\u043e\u0439 ERROR_INVALID_PARAMETER       if Module.ImageBase &lt; MM_HIGHEST_USER_ADDRESS then       begin         MapedFilePathLen := GetMappedFileName(FProcess, Pointer(Module.ImageBase),           @MapedFilePath[1], MAX_PATH * SizeOf(Char));         if MapedFilePathLen > 0 then           Module.ImagePath := NormalizePath(Copy(MapedFilePath, 1, MapedFilePathLen));       end       else       begin         \/\/ \u0430 \u0435\u0441\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u044b\u0448\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0433\u043e, \u0442\u043e \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c         \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043b\u0438 \u0444\u0430\u0439\u043b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438?         if Module.ImagePath.StartsWith(Wow64Support.SystemDirectory, True) then         begin           \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0435\u0441\u0442\u044c \u043b\u0438 \u0444\u0430\u0439\u043b \u043d\u0430 \u0434\u0438\u0441\u043a\u0435 \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043d 32 \u0431\u0438\u0442\u043d\u044b\u043c?           if not (FileExists(Module.ImagePath) and IsFile32(Module.ImagePath)) then           begin             \/\/ \u043d\u0435\u0442, \u0444\u0430\u0439\u043b \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u0438\u0431\u043e \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 32 \u0431\u0438\u0442\u043d\u044b\u043c             \/\/ \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0443\u0442\u044c \u043d\u0430 SysWow64 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e             Module.ImagePath := StringReplace(               Module.ImagePath,               Wow64Support.SystemDirectory,               Wow64Support.SysWow64Directory, [rfIgnoreCase]);             \/\/ \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430             if not (FileExists(Module.ImagePath) and IsFile32(Module.ImagePath)) then               \/\/ \u0435\u0441\u043b\u0438 \u0432 SysWow64 \u043d\u0435\u0442 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0447\u0442\u043e\u0436 - \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0435\u0433\u043e               \/\/ \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u0435\u0433\u043e \u0432\u0441\u0435\u0440\u0430\u0432\u043d\u043e \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c               Module.ImagePath := EmptyStr;           end;         end;       end;     end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041b\u043e\u0433\u0438\u043a\u0430 \u043a\u043e\u0434\u0430 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u0430, \u0432\u0441\u0435 \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 GetMappedFileName, \u0447\u0438\u0442\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e (\u043f\u043e\u043b\u0443\u0447\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435).<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 GetMappedFileName \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0443\u0442\u0438, \u0442.\u043a. \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0430\u044f \u0438\u043c \u0441\u0442\u0440\u043e\u043a\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a &#171;\\Device\\HarddiskVolume1\\Windows\\SysWOW64\\ntdll.dll&#187; \u0438 \u0435\u0451 \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u0443\u043a\u0432\u0435 \u0434\u0438\u0441\u043a\u0430 (\u043d\u043e \u044d\u0442\u043e \u043c\u0435\u043b\u043e\u0447\u0438).<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e \u0447\u0442\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u0441\u0442\u044b\u043b\u044c, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043b\u0435\u0436\u0430\u0449\u0430\u044f \u0432 c:\\windows\\system32\\ \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0439, \u0438 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0430 \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u0430\u044f \u0436\u0435, \u043d\u043e \u0443\u0436\u0435 \u0432 syswow64, \u0438 \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u2014 \u0442\u043e \u043f\u0443\u0442\u044c \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439\u00bb.<\/p>\n<p>  \u041d\u0443 \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"delphi\">var   Loader: TLoaderData;      \/\/ \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u043b\u043e\u0430\u0434\u0435\u0440\u0443 \u0441\u043f\u0438\u0441\u043a\u043e\u0432   Loader := TLoaderData.Create(hProcess, IsWow64Mode);   try     Loader.Load32LoaderData(PEB32.LoaderData);     Loader.Load64LoaderData(PEB64.LoaderData);     Writeln(0, ': ', IntToHex(Loader.RootModule.ImageBase, 1), ' ', Loader.RootModule.ImagePath);     for var I := 0 to Loader.Modules.Count - 1 do       Writeln(I + 1, ': ', IntToHex(Loader.Modules[I].ImageBase, 1), ' ', Loader.Modules[I].ImagePath);   finally     Loader.Free;   end;  <\/code><\/pre>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/wf\/wp\/mx\/wfwpmx0dseomfmnylcfoksopuec.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/wf\/wp\/mx\/wfwpmx0dseomfmnylcfoksopuec.png\"\/><\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043e\u0432\u043f\u0430\u043b, \u043a\u043e\u0434 \u0432\u044b\u0432\u0435\u043b \u0432\u0441\u0435 27 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0432 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 C:\\Windows\\System32\\en-US\\kernel32.dll.mui<\/p>\n<p>  \u041d\u043e \u0441 \u043d\u0438\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0432\u0441\u0435 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0442.\u043a. \u0434\u0430\u043d\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0442.\u043a. \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c LOAD_LIBRARY_AS_DATAFILE.<\/p>\n<p>  \u041a\u043e\u0434 \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%202\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043a\u043e\u0441\u0442\u044b\u043b\u0435\u043c \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430<\/p>\n<h3>3. \u0412\u044b\u0437\u043e\u0432 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<\/h3>\n<p>  \u0418\u0442\u0430\u043a, \u0435\u0449\u0435 \u0440\u0430\u0437 \u043d\u0430\u043f\u043e\u043c\u043d\u044e \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0442\u0435\u0437\u0438\u0441 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b: \u0432 64 \u0431\u0438\u0442\u043d\u043e\u0439 OS \u043d\u0435\u0442 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u0415\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0440\u043e\u0433\u043e 64 \u0431\u0438\u0442\u043d\u044b\u0435, \u0430 \u0432\u0441\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c \u044d\u043c\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c WOW64 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0435 \u043a\u0430\u043a\u0443\u044e-\u043b\u0438\u0431\u043e API \u0438\u0437 \u0441\u0432\u043e\u0435\u0433\u043e 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0435\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u044d\u0442\u0430\u043f \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u044d\u0442\u043e\u0439 API \u0438 \u0435\u0451 \u043f\u0440\u044f\u043c\u043e\u0439 \u0432\u044b\u0437\u043e\u0432.<\/p>\n<p>  \u0427\u0442\u043e \u0437\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f: \u0442\u0443\u0442 \u0432\u0441\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0438 \u043e \u0432\u044b\u0437\u043e\u0432\u0430\u0445. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u044d\u0442\u043e STDCALL \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 32 \u0431\u0438\u0442\u0430\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u0441\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u044d\u043a, \u0430 \u0432\u043e\u0442 \u0432 64 \u0431\u0438\u0442\u0430\u0445 STDCALL \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u0441 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435\u043c FASTCALL, \u0433\u0434\u0435 \u043f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0438\u0434\u0443\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b (RCX\/RDX\/R8\/R9) \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u043a.<\/p>\n<p>  <a href=\"https:\/\/en.wikipedia.org\/wiki\/X86_calling_conventions#Microsoft_x64_calling_convention\" rel=\"nofollow noopener noreferrer\">Microsoft x64 calling convention<\/a><\/p>\n<p>  \u041d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441, \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432\u044b\u0437\u0432\u0430\u0442\u044c 64-\u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u043d\u0435\u043b\u044c\u0437\u044f. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u044e\u0431\u043e\u0439 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\u0445!<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0435 \u0441\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u0442\u0435 \u0432 \u0440\u0435\u0436\u0438\u043c \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430, \u0442\u043e \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 CS \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d 0\u044523 (\u0434\u043b\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f), \u0430 \u0435\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c 64 \u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0441\u0442\u0430\u043d\u0435\u0442 \u0440\u0430\u0432\u0435\u043d 0x33.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e4\/i9\/e7\/e4i9e7hcmj6p_cr0ongq4yj-af0.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/e4\/i9\/e7\/e4i9e7hcmj6p_cr0ongq4yj-af0.png\"\/><\/p>\n<p>  \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0430\u043a\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u043e \u0432\u0441\u0435 \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u2014 \u0432\u044b\u0437\u043e\u0432\u0443 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439<\/p>\n<ol>\n<li>JMP FAR 0x33:addr<\/li>\n<li>CALL FAR 0x33:addr<\/li>\n<li>PUSH 0x33 + PUSH addr + RETF<\/li>\n<\/ol>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u044d\u0442\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0441 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 64 \u0431\u0438\u0442\u0430 (\u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u0440\u0430\u0432\u0435\u043d 0\u044523).<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u044d\u0442\u043e \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 NtQueryVirtualMemory() \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0432 Windows 8.1 (\u043d\u0430 Windows 10 \u0438 \u0432\u044b\u0448\u0435 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u0430\u044f, \u043d\u043e \u0441\u0443\u0442\u044c \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f).<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ip\/zl\/ku\/ipzlkuv-mbcayu9v-5c3wu0en2k.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ip\/zl\/ku\/ipzlkuv-mbcayu9v-5c3wu0en2k.png\"\/><\/p>\n<p>  \u041f\u043e \u0448\u0430\u0433\u0430\u043c:<br \/>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EAX \u043d\u0435\u043a\u043e\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u043e\u0439 0\u044522. \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 SDT \u0438\u043d\u0434\u0435\u043a\u0441 (\u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u0438\u043b\u0438 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0435 \u2014 System Service Dispatch Table).<\/p>\n<p>  \u041d\u0443 \u0442\u043e\u0447\u043d\u0435\u0435 \u043a\u0430\u043a, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 SDT \u0438\u043d\u0434\u0435\u043a\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043b\u0430\u0434\u0448\u0435\u0435 \u0441\u043b\u043e\u0432\u043e (16 \u0431\u0438\u0442), \u0430 \u0432\u043e\u0442 \u0441\u0442\u0430\u0440\u0448\u0435\u0435 \u0443\u0436\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0434\u043b\u044f WDT (\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 Wow64 \u0432\u044b\u0437\u043e\u0432\u043e\u0432, \u043e \u043d\u0435\u0439 \u0447\u0443\u0442\u044c \u043f\u043e\u0437\u0436\u0435).<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 FS \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c 0xC0.<\/p>\n<p>  C\u0435\u0433\u043c\u0435\u043d\u0442 FS \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 Thread Environment Block (TEB), \u0442.\u043d. \u0431\u043b\u043e\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 (\u0432 64 \u0431\u0438\u0442\u0430\u0445 \u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 GS), \u0430 \u0430\u0434\u0440\u0435\u0441 0xC0 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u043e\u0442 \u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u0430.<\/p>\n<p>  \u0412 MSDN \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0432\u044b \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u0442\u0435, \u043d\u043e (\u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e) \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0432\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438:<\/p>\n<p>  <a href=\"https:\/\/en.wikipedia.org\/wiki\/Win32_Thread_Information_Block\" rel=\"nofollow noopener noreferrer\">Win32 Thread Information Block<\/a><\/p>\n<p>  \u042d\u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0439 Windows, \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430\u0445 (32 \u0438 64 \u0431\u0438\u0442\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e).<\/p>\n<p>  \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u0443\u0447\u0443 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u0435\u0439, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0441\u0430\u043c\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e TEB \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0443 SEH \u0444\u0440\u0435\u0439\u043c\u043e\u0432 (\u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439), \u0447\u0435\u0440\u0435\u0437 TEB \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0432\u0441\u0435 threadvar (\u0442\u043e\u0447\u043d\u0435\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0435 TLS \u0441\u043b\u043e\u0442\u043e\u0432) \u0438 \u043f\u0440\u043e\u0447\u0435\u0435-\u043f\u0440\u043e\u0447\u0435\u0435\u2026 \u0421\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u043e\u043b\u0435 Wow32Reserved, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0444\u0444\u0441\u0435\u0442 0\u0445\u04210, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 KiFastSystemCall, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0435\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 JMP FAR<\/p>\n<p>  \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f KiFastSystemCall, \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0430\u044f \u043a\u0430\u043a JMP FAR 0x33:0x77C331A4 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 CS \u0432 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u0441 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 0\u044533 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434, \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e CpupReturnFromSimulatedCode.<\/p>\n<p>  \u041d\u0435 \u0443\u0434\u0438\u0432\u043b\u044f\u0439\u0442\u0435\u0441\u044c \u0442\u0430\u043a\u043e\u043c\u0443 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u043a \u044f \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b \u2014 \u0432 64 \u0431\u0438\u0442\u043d\u043e\u0439 Windows \u043d\u0435\u0442 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043c\u044b \u0432\u0435\u0440\u043d\u0443\u043b\u0438\u0441\u044c \u0432 \u0440\u043e\u0434\u043d\u0443\u044e \u0441\u0440\u0435\u0434\u0443 \u0438\u0437 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 32 \u0431\u0438\u0442.<\/p>\n<p>  CpupReturnFromSimulatedCode, \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432 CPUCONTEXT, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 TurboDispatchJumpAddressStart().<\/p>\n<p>  \u0418\u043c\u0435\u043d\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u0442\u0430\u0440\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EAX, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u0435\u0449\u0435 \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u0442\u0430\u043f\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u2014 \u044d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430 (\u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0440\u0430\u043d\u0436\u0435\u0432\u044b\u043c) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u0432 \u0442.\u043d. Wow64 Dispatch Table (WDT) \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 R15. \u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0435\u0439 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (R15 + \u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c EAX, \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u043d\u0430\u044f \u0432 ECX) \u0438\u0437 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 (\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044f 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<p>  \u0422\u043e\u0447\u043d\u0435\u0435 \u043a\u0430\u043a, \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f TurboDispatchJumpAddressEnd \u044d\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043c\u0435\u043b\u044c \u043a\u043e\u0434\u0430 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0430\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0435\u043c \u0438\u043b\u0438 \u0438\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c, \u0430 \u0432\u043e\u0442 WDT \u044d\u0442\u043e \u0432 \u043e\u0431\u0449\u0435\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u0430\u043d\u0430\u043b\u043e\u0433 \u043d\u0435\u043a\u043e\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b switch-case \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e) \u0447\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0432\u043e\u0442 \u044f \u0442\u0443\u0442 \u0432\u044b\u043f\u0438\u0441\u0430\u043b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u043d\u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043e\u0431\u0449\u0435\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0434\u0435\u043b\u0430\u0435\u0442:<\/p>\n<blockquote><p>ServiceNoTurbo \u2014 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 TurboDispatchJumpAddressEnd (\u0445\u044d\u043d\u0434\u043b\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u0432)<br \/>  Thunk0Arg<br \/>  Thunk0ArgReloadState<br \/>  Thunk1ArgSp<br \/>  Thunk1ArgNSp<br \/>  Thunk2ArgNSpNSp<br \/>  \u2026<br \/>  Thunk4ArgSpNSpNSpNSpReloadState<br \/>  Thunk4ArgNSpSpNSpNSp<br \/>  Thunk4ArgSpSpSpNSp<br \/>  ThunkNone \u2014 \u043a\u043e\u043d\u0435\u0446 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0438\u0441\u043f\u0430\u0442\u0447\u0430, \u043f\u0440\u044f\u043c\u043e\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 INT3<\/p><\/blockquote>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lt\/nh\/zs\/ltnhzsh3s1so_xl2p2aua0b7a2m.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/lt\/nh\/zs\/ltnhzsh3s1so_xl2p2aua0b7a2m.png\"\/><\/p>\n<p>  \u0421\u0430\u043c \u0436\u0435 SDT \u0438\u043d\u0434\u0435\u043a\u0441 NtQueryVirtualMemory \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432 \u043c\u043b\u0430\u0434\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u044d\u0442\u043e\u0439 \u043d\u0435\u043a\u043e\u0435\u0439 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b \u0438 \u0440\u0430\u0432\u0435\u043d \u043e\u043d 0\u044522 \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u0432 \u044f\u0434\u0440\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0435\u043c\u0443 64 \u0431\u0438\u0442\u043d\u043e\u043c\u0443 \u0430\u043d\u0430\u043b\u043e\u0433\u0443.<\/p>\n<p>  \u041a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 NtQueryVirtualMemory WDT \u0438\u043d\u0434\u0435\u043a\u0441 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0445\u044d\u043d\u0434\u043b\u0435\u0440 ServiceNoTurbo \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u0432\u044b\u0437\u043e\u0432 Wow64SystemServiceEx.<\/p>\n<p>  <u>\u0414\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438<\/u>: \u0412 Windows 10 \u0438 \u0432\u044b\u0448\u0435 \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u0438\u0445 \u0448\u0430\u0433\u043e\u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0437\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 TEB \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0435\u043c\u0443 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 Wow64SystemServiceCall -> KiFastSystemCall, \u043f\u0440\u0438\u0447\u0435\u043c KiFastSystemCall \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 CpupReturnFromSimulatedCode, \u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0435\u0451 \u0430\u0434\u0440\u0435\u0441 \u0447\u0435\u0440\u0435\u0437 WDT (\u0442\u0430\u043a\u0430\u044f \u0432\u043e\u0442 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u0432\u0438\u0434\u0438\u043c\u043e \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0431\u0443\u0434\u0443\u0442 \u0435\u0449\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c).<\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0430\u044f \u0436\u0435 \u043e\u0431\u0432\u044f\u0437\u043a\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 32-\u0431\u0438\u0442\u043d\u043e\u0439 API \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 \u0434\u043b\u044f GetMappedFileName (\u0430 \u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435 \u0434\u043b\u044f NtQueryVirtualMemory \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b).<\/p>\n<p>  \u041d\u043e \u043c\u0438\u043d\u0443\u0441 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u0438\u0437 WDT \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0438\u0445 \u0432\u044b\u0437\u0432\u0430\u043b\u0438 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0430 \u0441\u0442\u0430\u043b\u043e \u0431\u044b\u0442\u044c, \u043e\u043d\u0438 \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u043a \u043d\u0438\u043c \u043f\u0440\u0438\u0439\u0442\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442.<\/p>\n<p>  \u0410 \u0437\u0430\u0434\u0430\u0447\u0430 \u0441\u0442\u043e\u0438\u0442, \u043d\u0430\u043f\u043e\u043c\u043d\u044e (\u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u0435) \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0438\u043c\u0435\u043d\u043d\u043e NtQueryVirtualMemory), \u043f\u0435\u0440\u0435\u0434\u0430\u0432 \u0432 \u043d\u0435\u0451 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 NtQueryVirtualMemory \u0431\u0443\u0434\u0435\u0442 \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044d\u0434\u0430\u043a\u0438\u043c \u043a\u0440\u0430\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u043c \u043a\u0430\u043c\u043d\u0435\u043c, \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0435 \u0432\u0435\u0440\u0442\u0438\u0442\u0441\u044f. \u041e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 (\u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u0432\u0438\u0434\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u044c\u0438 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437 32 \u0431\u0438\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e):<\/p>\n<ol>\n<li>VirtualQueryEx \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 NtQueryVirtualMemory \u0441 \u0444\u043b\u0430\u0433\u043e\u043c MemoryBasicInformation (\u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e)<\/li>\n<li>QueryWorkingSet \u2014 \u0442\u043e \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043b\u0430\u0433 MemoryWorkingSetList (\u0440\u0430\u0432\u043d\u044b\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435)<\/li>\n<li>GetMappedFileName \u2014 \u0442\u043e \u0436\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u0444\u043b\u0430\u0433 MemoryMappedFilenameInformation (\u0440\u0430\u0432\u043d\u044b\u0439 \u0434\u0432\u043e\u0439\u043a\u0435)<\/li>\n<\/ol>\n<p>\u0412\u0441\u0435 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e\u0447\u043d\u0435\u0435 \u0438\u0445 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438), \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. <\/p>\n<p>  \u0410 \u0441\u0435\u0439\u0447\u0430\u0441 \u043d\u0430\u0434\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u043f\u043e \u0441\u0443\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433 Wow64SystemServiceEx (\u043d\u0435 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0430\u043d\u0430\u043b\u043e\u0433). <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 TEB \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 FS (\u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0447\u0442\u043e \u0442\u0430\u043c \u0436\u0434\u0443\u0442 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c), \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u043a-\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u042d\u0442\u043e \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a:<\/p>\n<ol>\n<li>\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 64 \u0431\u0438\u0442\u043d\u043e\u0439 NTDLL (\u043a\u043e\u0434 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b)<\/li>\n<li>\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043a\u043e\u0434 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0433\u043b\u0430\u0432\u044b)<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0435\u0449\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 64 \u0431\u0438\u0442\u0430 \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 32.<\/p>\n<p>  1. \u041d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a. \u0412 32 \u0431\u0438\u0442\u0430\u0445 \u0441\u0442\u0435\u043a \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 4 \u0431\u0430\u0439\u0442, \u0430 \u0432\u043e\u0442 \u0432 64 \u0431\u0438\u0442\u0430\u0445 \u043e\u043d \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 8 \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440 ESP \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0433\u0440\u0443\u0431\u043e ESP mod 8 = 0).<\/p>\n<p>  \u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0432\u0443\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 ESP + EBP, \u043d\u043e \u0438\u0437-\u0437\u0430 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0435\u0439 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e ESP, \u0442.\u043a. \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043e \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u0432 RBP \u0438 \u043e\u0431\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0443\u0436\u0435 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  2. \u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0442\u0435\u043d\u0435\u0432\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 (ShadowSpace), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0434\u043b\u044f \u0441\u0431\u0440\u043e\u0441\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 RCX\/RDX\/R8\/R9. \u0414\u0430\u043d\u043d\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u0441\u0435\u0433\u0434\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043b\u044e\u0431\u043e\u0439 64 \u0431\u0438\u0442\u043d\u043e\u0439 stdcall \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0434\u0430\u0436\u0435 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u0442\u044b\u0440\u0435\u0445, \u0440\u0430\u0437\u043c\u0435\u0440 ShadowSpace \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440.<\/p>\n<p>  3. \u041f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 (\u0438\u0437-\u0437\u0430 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f STDCALL) \u0432 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430.<\/p>\n<p>  NtQueryVirtualMemory \u0438\u043c\u0435\u0435\u0442 \u0448\u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432: <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows-hardware\/drivers\/ddi\/ntifs\/nf-ntifs-ntqueryvirtualmemory\" rel=\"nofollow noopener noreferrer\">NtQueryVirtualMemory function<\/a><\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0435 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0443\u0442 \u0438\u0434\u0442\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445 RCX\/RDX\/R8\/R9, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u043f\u0440\u0438\u0447\u0435\u043c \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0435 \u0448\u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043d\u0430 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0441 \u043e\u0444\u0444\u0441\u0435\u0442\u043e\u043c \u0432 4 \u0431\u0430\u0439\u0442\u0430, \u0430 \u0432\u043e\u0442 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0434\u0432\u0443\u0445 \u043d\u0430 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043a, \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e \u043e\u043d\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c 8 \u0431\u0430\u0439\u0442\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  4. \u0415\u0441\u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c\u0438 EAX\/EBX\/ECX\/EDX\/ESI\/EDI \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0442\u0441\u044f \u043a RAX\/RBX\/RCX\/RDX\/RSI\/RDI. \u0422\u043e\u0436\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0438 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0447\u0442\u043e \u0441\u0442\u0430\u0440\u0448\u0438\u0435 32 \u0431\u0438\u0442\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0440\u0435\u0437\u0430\u043d\u044b, \u0442.\u0435. \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043b\u0430\u0434\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 (\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043c \u0438 \u043d\u0435 \u043d\u0430\u0434\u043e).<\/p>\n<p>  5. 8 \u0431\u0430\u0439\u0442\u043e\u0432\u044b\u0439 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u043c\u0435\u0440 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 RAX, \u043d\u043e \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0435\u0433\u043e \u0432 32 \u0431\u0438\u0442\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u0443 EAX+EDX \u0433\u0434\u0435 EDX \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u0448\u0438\u0435 32 \u0431\u0438\u0442\u0430 RAX.<\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a: <\/p>\n<pre><code class=\"delphi\">function NtQueryVirtualMemory64(FuncRVA: ULONG_PTR64; hProcess: THandle;   BaseAddress: ULONG_PTR64; MemoryInformationClass: DWORD;   MemoryInformation: Pointer; MemoryInformationLength: DWORD;   ReturnLength: PULONG64): NTSTATUS; assembler; stdcall; asm  end;<\/code><\/pre>\n<p>  \u041a \u0441\u043f\u0438\u0441\u043a\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440), \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u0441 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u2014 \u044d\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c \u043a\u043e\u0434\u0435, \u0438 \u043e\u043d \u0440\u0430\u0432\u0435\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 NtQueryVirtualMemory \u0432 64 \u0431\u0438\u0442\u043d\u043e\u0439 NTDLL.<\/p>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0438 \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u043a\u0430\u043a ULONG_PTR64. \u042d\u0442\u043e \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0442\u0438\u043f, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u043d\u044f\u0442\u044c 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u0432 32 \u0431\u0438\u0442\u043d\u043e\u043c \u043a\u043e\u0434\u0435.<\/p>\n<p>  \u0414\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u044f stdcall (\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430) \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442 Delphi \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u043b\u043e\u0433 \u0438 \u044d\u043f\u0438\u043b\u043e\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0443\u043d\u043a\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u0438\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044e \u0441\u0442\u0435\u043a\u0430 \u043f\u043e \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435. \u0415\u0441\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e \u043f\u0440\u043e\u043b\u043e\u0433 \u0438 \u044d\u043f\u0438\u043b\u043e\u0433 (\u0432 CPU) \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">asm   \/\/ \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d Delphi \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438     \/\/ ... \u043f\u0440\u043e\u043b\u043e\u0433 ...   push ebp          \/\/ \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430   mov ebp, esp      \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0437\u044b \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u043e\u0439 \u0441\u0442\u0435\u043a\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440       \/\/ ... \u0438 \u044d\u043f\u0438\u043b\u043e\u0433 ...   pop ebp           \/\/ \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0437\u044b \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u0430\u0434\u0440\u0430   ret $24           \/\/ \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0441 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0435\u0439 \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0438 \u0441\u0442\u0435\u043a\u0430 (ESP) 0\u044524 = \u043f\u044f\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043f\u043e 4 \u0431\u0430\u0439\u0442\u0430 + 2 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u043f\u043e 8 \u0431\u0430\u0439\u0442 end;<\/code><\/pre>\n<p>   \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u2014 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430 \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 8 \u0431\u0430\u0439\u0442:<\/p>\n<pre><code class=\"delphi\">  mov eax, esp \/\/ \u0431\u0435\u0440\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 Stack Pointer   and eax, 7   \/\/ \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0442\u0440\u0435\u0445 \u0431\u0438\u0442, \u043e\u0442\u0441\u0435\u043a\u0430\u0435\u043c \u0432\u0441\u0435 \u043b\u0438\u0448\u043d\u0435\u0435   cmp eax, 0   \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c - \u0440\u0430\u0432\u043d\u043e \u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0435\u0441\u044f \u0447\u0438\u0441\u043b\u043e \u043d\u0443\u043b\u044e?   je @stack_aligned    \/\/ \u0435\u0441\u043b\u0438 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e, \u0442\u043e\u0433\u0434\u0430 \u0441\u0442\u0435\u043a \u043d\u0435 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d, \u0432 EAX \u0431\u0443\u0434\u0435\u0442 \u043e\u0444\u0444\u0441\u0435\u0442 \u043e\u0442 ESP \u043d\u0430 \u0441\u043a\u043e\u043b\u044c\u043a\u043e   \/\/ \u0441\u0434\u0432\u0438\u043d\u0443\u043b\u0438\u0441\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 32-\u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ESP   sub esp, eax  @stack_aligned:    \/\/ \u043e\u0442\u0441\u044e\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0441 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u044b\u043c \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 8 \u0431\u0430\u0439\u0442 \u0441\u0442\u0435\u043a\u043e\u043c<\/code><\/pre>\n<p>  \u0412\u0430\u0436\u043d\u044b\u0439 \u043d\u044e\u0430\u043d\u0441, \u0442.\u043a. \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f stdcall, \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435. \u041d\u043e \u0442.\u043a. \u043c\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044e \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0438 \u0441\u0442\u0435\u043a\u0430, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u044d\u0442\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u0438\u0437 ESP\/RSP \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b. \u0418\u043c\u0435\u043d\u043d\u043e \u0437\u0430 \u044d\u0442\u043e \u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EAX, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u043b\u0438\u0431\u043e \u043d\u043e\u043b\u044c (\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0438\u0439 \u0447\u0442\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b\u0430\u0441\u044c) \u043b\u0438\u0431\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (\u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u043a\u0430, \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e). \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EBP \u043a\u0430\u043a \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443, \u043d\u043e \u043d\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0432 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0433\u0434\u0435 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u0444\u0440\u0435\u0439\u043c, \u0430 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ESP\/RSP, \u0442\u0430\u043a \u0447\u0442\u043e EBP \u043d\u0435 \u043f\u043e\u0434\u043e\u0439\u0434\u0435\u0442. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/mt\/q5\/35\/mtq535q7rpbd9dihytppbpurox4.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/mt\/q5\/35\/mtq535q7rpbd9dihytppbpurox4.png\"\/><\/p>\n<p>  \u0422.\u0435. \u043b\u0438\u0431\u043e \u0441\u0442\u0435\u043a \u0423\u0416\u0415 \u0431\u044b\u043b \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u0438 \u0442\u043e\u0433\u0434\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ESP \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0438 \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e EBP. \u041b\u0438\u0431\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ESP \u0441\u0442\u0430\u043b\u043e \u043c\u0435\u043d\u044c\u0448\u0435 EBP \u043d\u0430 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043e\u0431\u044b\u0447\u043d\u043e \u043d\u0430 4).<br \/>  \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u0442\u0443\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u2014 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043a \u043d\u0430\u0447\u043d\u0435\u0442\u0441\u044f \u041f\u041e\u0421\u041b\u0415 ESP, \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u0432\u0438\u0436\u043a\u0430 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u043d\u0435\u0442. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433 \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c:<\/p>\n<pre><code class=\"delphi\">  push $33                        \/\/ \u043f\u0438\u0448\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430   db $E8, 0, 0, 0, 0              \/\/ call +5   add [esp], 5                    \/\/ \u043f\u0440\u0430\u0432\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430 \u0438\u0434\u0443\u0449\u0438\u0439 \u0437\u0430 retf   retf \/\/ \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0441\u043e \u0441\u043c\u0435\u043d\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 CS:0\u044533 + \u0430\u0434\u0440\u0435\u0441    \/\/ \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442\u0441\u044e\u0434\u0430 \u043c\u044b \u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435!!!<\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0437\u0434\u0435\u0441\u044c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f RETF, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u043d\u044b\u0439 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 CS \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u043f\u0440\u0438\u0447\u0435\u043c \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043d\u0430 \u0441\u0442\u0435\u043a\u0435. \u0418 \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u2014 \u043e\u043d\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0431\u043b\u043e\u043a\u043e\u043c \u0441\u0442\u0440\u043e\u0433\u043e 8 \u0431\u0430\u0439\u0442 (\u0441\u0435\u0433\u043c\u0435\u043d\u0442+\u0430\u0434\u0440\u0435\u0441), \u043d\u0435 \u0432\u0430\u0436\u043d\u043e \u0438\u0437 \u043a\u0430\u043a\u043e\u0433\u043e \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432, \u0438\u0437 32 \u0431\u0438\u0442 \u0438\u043b\u0438 \u0438\u0437 64. <\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c ESP \u0443 \u043d\u0430\u0441 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0432\u043d\u044f\u043b\u0441\u044f 0x100 (\u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b)<\/p>\n<ol>\n<li>push $33 \u2014 \u044d\u0442\u0438\u043c \u043c\u044b \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u043b\u0438 4 \u0431\u0430\u0439\u0442\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0441 \u043d\u043e\u0432\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0430 \u0441\u0442\u0435\u043a\u0430 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u043b\u0430\u0441\u044c \u043d\u0430 \u044d\u0442\u0438 4 \u0431\u0430\u0439\u0442\u0430 (ESP = 0xFC)<\/li>\n<li>call +5 \u2014 (\u0432\u044b\u0437\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u0432\u0438\u0434\u0435 \u043e\u043f\u043a\u043e\u0434\u043e\u0432, \u0442.\u043a. \u0434\u0435\u043b\u044c\u0444\u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u0434\u0435), \u0434\u0430\u043d\u043d\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 4 \u0431\u0430\u0439\u0442\u0430 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430, \u0442.\u0435. \u043a\u0443\u0434\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430, \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 (\u0442.\u0435. \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EIP \u0440\u043e\u0432\u043d\u043e \u043d\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 5 \u0431\u0430\u0439\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0432\u043d\u044b \u0434\u043b\u0438\u043d\u0435 \u044d\u0442\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438). \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443 \u043d\u0430\u0441 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u043b\u0435\u0436\u0430\u0442 \u0443\u0436\u0435 \u0434\u0432\u0430 \u0447\u0438\u0441\u043b\u0430, \u043f\u0435\u0440\u0432\u043e\u0435 \u0441 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c, \u0432\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 add (\u0441\u0442\u0435\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0432\u0435\u043d ESP = 0xF8)<\/li>\n<li>add [esp], 5 \u2014 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435, \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043d\u0430 \u043f\u044f\u0442\u044c \u0431\u0430\u0439\u0442. \u041f\u044f\u0442\u044c \u0431\u0430\u0439\u0442 \u2014 \u044d\u0442\u043e \u043e\u0431\u0449\u0430\u044f \u0434\u043b\u0438\u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 add[] (4 \u0431\u0430\u0439\u0442\u0430) \u0438 retf (1 \u0431\u0430\u0439\u0442), \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0430\u0434\u0440\u0435\u0441 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 RETF (\u0440\u0435\u0433\u0438\u0441\u0442\u0440 ESP \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f \u0438 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u0440\u0430\u0432\u0435\u043d ESP = 0xF8)<\/li>\n<li>retf \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 [ESP + 4] \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 [ESP], \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ESP \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 8 \u0431\u0430\u0439\u0442 (\u0432 \u0438\u0442\u043e\u0433\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u0430 \u0441\u0442\u0435\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0432\u043d\u043e\u0439 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e, ESP\/RSP = 0x100)<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f RETF \u2014 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. Delphi \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 RETF \u0443 \u043d\u0430\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438, \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u043c \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0440\u044f\u043a\u043f\u043e\u0439\u043d\u0442 \u043f\u043e\u0441\u043b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 RETF \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0435 \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c. \u041e\u0442\u043b\u0430\u0434\u043a\u0443 64 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0432 64 \u0431\u0438\u0442\u0430\u0445 \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u043b\u0438\u0441\u044c \u0447\u0442\u043e \u043e\u043d \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u044c \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u044f \u043f\u043e \u043e\u043f\u043a\u043e\u0434\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0447\u0442\u043e\u0431\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u043f\u043b\u044b\u043b\u043e. <\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c (\u0434\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438) \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c 64 \u0431\u0438\u0442\u043d\u044b\u0439 WinDbg \u2014 \u043e\u043d \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u044b\u0433\u0430\u0435\u0442 \u0438\u0437 32 \u0431\u0438\u0442 \u0432 64 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u043a\u043e \u0432\u0442\u043e\u0440\u043e\u043c\u0443 \u044d\u0442\u0430\u043f\u0443, \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0443 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0432 \u0438\u0445 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 \u0438 \u043f\u0438\u0448\u0435\u043c \u0443\u0436\u0435 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434. <\/p>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440:<\/p>\n<pre><code class=\"delphi\">  push ebp                              \/\/ push rbp   db $48 sub esp, $30                   \/\/ sub rsp, $30   db $48 mov ebp, esp                   \/\/ mov rbp, rsp<\/code><\/pre>\n<p>  \u0412\u043e\u0442 \u0442\u0443\u0442 \u0442\u0430\u043a\u043e\u0439\u2026 \u0442\u043e\u043d\u043a\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u044f \u043f\u0438\u0448\u0443 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043e\u0434\u043d\u0430\u043a\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u0442\u043e \u0438 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a 64 \u0431\u0438\u0442\u043d\u044b\u0435, \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438 \u0441\u043f\u0440\u0430\u0432\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u044d\u0442\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u0442\u043e\u0440\u043e\u0439 \u0438 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 \u0432\u0432\u0438\u0434\u0435 db $48.<\/p>\n<p>  \u042d\u0442\u043e \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 REX \u043f\u0440\u0435\u0444\u0438\u043a\u0441. \u0413\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u2014 \u044d\u0442\u043e \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u043a\u043e\u0434\u043e\u0432 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0449\u0438\u0445 \u043a\u0430\u043a \u043f\u0440\u0435\u0444\u0438\u043a\u0441 + \u043e\u043f\u043a\u043e\u0434 + ModRM + SIB \u043d\u0443 \u0438 \u0434\u0430\u043b\u0435\u0435\u2026<br \/>  \u0412\u043e\u0442 \u043f\u043e\u043b\u0435 ModRM \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 (\u0433\u0434\u0435 \u043e\u043d\u043e \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438, \u0430 REX \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u0443 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c. \u0415\u0441\u043b\u0438 \u0443\u0431\u0440\u0430\u0442\u044c REX \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0442\u043e \u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u044d\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0442\u0430\u043a-\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 32 \u0431\u0438\u0442\u043d\u043e\u043c, \u0442.\u0435. \u0440\u0430\u0431\u043e\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 ESP + EBP, \u0430 \u043d\u0435 RSP + RBP. \u0418 \u0445\u043e\u0442\u044f \u0441\u0435\u0439\u0447\u0430\u0441 \u044d\u0442\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u043e 32 \u0431\u0438\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0441\u0435-\u0436\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e (\u0432\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435).<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0445 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u043a\u043e\u0434\u044b (DB\/DW\/DD) \u043d\u043e \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c. <\/p>\n<p>  \u041d\u0443 \u0438 \u0435\u0441\u043b\u0438 \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043a \u0441\u0442\u0435\u043a\u043e\u0432\u043e\u043c\u0443 \u043a\u0430\u0434\u0440\u0443 \u2014 \u0435\u0433\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442.\u043a. \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u0448\u0435\u0441\u0442\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0443 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 64 \u0431\u0438\u0442\u043d\u043e\u0439 NtQueryVirtualMemory \u043f\u043e\u0439\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u043c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0434 \u043d\u0438\u0445 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 (\u0442.\u043d. ShadowSpace), \u044d\u0442\u0438\u043c \u0438 \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 sub rsp, $30 (0\u044530 = 6 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 * 8 \u0431\u0430\u0439\u0442). <\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0430\u0434\u0440\u0435\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e ReturnLength \u0438 \u0442\u0443\u0442 \u043d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0438.<\/p>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432\u044b\u0448\u0435, ReturnLength \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 EBP + 0x28.<br \/>  \u0421\u0430\u043c EBP \u0440\u0430\u0432\u0435\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e ESP + \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 EAX, \u0442.\u0435. ReturnLength = ESP + EAX + 0x28;<br \/>  \u0414\u0430\u043b\u044c\u0448\u0435, \u043c\u044b \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u043b\u0438 \u043d\u0430 \u0441\u0442\u0435\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 RBP \u0438\u0437\u043c\u0435\u043d\u0438\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RSP (\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043d \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0438\u0437 ESP \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430) \u0440\u043e\u0432\u043d\u043e \u043d\u0430 8 \u0431\u0430\u0439\u0442, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043c\u0435\u0441\u0442\u043e \u043d\u0430 64 \u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0435\u0449\u0435 \u043f\u043e\u0434 \u0448\u0435\u0441\u0442\u044c \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u044d\u0442\u0438 8 \u0431\u0430\u0439\u0442 + 6 * 8 (\u0432\u0441\u0435\u0433\u043e 0x38) \u043a \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0435, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0430\u0434\u0440\u0435\u0441 \u2014 RSP + RAX + 0x60: <\/p>\n<pre><code class=\"delphi\">  db $48 lea eax, [esp + eax + $60]     \/\/ lea rax, [rsp + rax + $60]<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0443\u0447\u0438\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043d\u0430 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435, \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 (ReturnLength + MemoryInformationLength) \u043d\u0430 64 \u0431\u0438\u0442\u043d\u044b\u0439:<\/p>\n<pre><code class=\"delphi\">  \/\/ 1. ReturnLength   mov ecx, [eax]                        \/\/ mov ecx, dword ptr [rax]   db $48 mov [esp + $28], ecx           \/\/ mov [rsp + $28], rcx    \/\/ 2. \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \"MemoryInformationLength\"   mov ecx, [eax - 4]                    \/\/ mov ecx, dword ptr [rax - 4]   db $48 mov [esp + $20], ecx           \/\/ mov [rsp + $20], rcx<\/code><\/pre>\n<p>  \u0421\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u043f\u043e\u0434 64 \u0431\u0438\u0442\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043e 0\u044530 \u0431\u0430\u0439\u0442, ReturnLength \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u0437\u043d\u0430\u0447\u0438\u0442 \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u043e\u0441\u044c\u043c\u0438 \u0431\u0430\u0439\u0442\u0430\u0445, \u0442.\u0435. \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0x28 \u0434\u043e 0x30.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043d\u0430 \u0441\u0442\u0435\u043a \u043f\u043e\u0439\u0434\u0435\u0442 MemoryInformationLength \u0441\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 0x20 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430.<\/p>\n<p>  \u0418 \u043d\u0430 \u044d\u0442\u043e\u043c \u0441\u043e \u0441\u0442\u0435\u043a\u043e\u043c \u0432\u0441\u0435 \u2014 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 4 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b: <\/p>\n<pre><code class=\"delphi\">  \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440 R9 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u0430\u043c\u044f\u0442\u044c (MemoryInformation),   \/\/ \u043a\u0443\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442   db $44 mov ecx, [eax - 8]             \/\/ mov r9d, dword ptr [rax - 8]    \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440 R8 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 MemoryInformationClass   db $44 mov eax, [eax - $C]            \/\/ mov r8d, dword ptr [rax - $\u0421]    \/\/ \u0440\u0435\u0433\u0438\u0441\u0442\u0440 RDX \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 BaseAddress   db $48 mov edx, [eax - $14]           \/\/ mov rdx, [rax - $14]    \/\/ RCX \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c hProcess   mov ecx, [eax - $18]                  \/\/ mov ecx, dword ptr [rax - $18]<\/code><\/pre>\n<p>  \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u0432\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c BaseAddress \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 32 \u0431\u0438\u0442\u0430 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a\u0430\u043a dword ptr[], \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u0433\u0434\u0430 \u0438\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 ECX (\u044f\u0432\u043b\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u043c\u043b\u0430\u0434\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u044c\u044e RCX) \u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 RCX \u043e\u0447\u0438\u0449\u0430\u0435\u0442\u0441\u044f. \u0412 \u044d\u0442\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043c\u043b\u0430\u0434\u0448\u0438\u043c\u0438 \u0447\u0430\u0441\u0442\u044f\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 ECX, \u0433\u0434\u0435 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 CX\/CL\/CH \u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. <\/p>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b \u0432\u0441\u0435 \u0442\u0435-\u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Wow64SystemServiceEx, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e, \u043d\u0430\u0441\u0442\u0430\u043b \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0439 NtQueryVirtualMemory:<\/p>\n<pre><code class=\"delphi\">  call [eax - $20]                      \/\/ call [rax - $20]<\/code><\/pre>\n<p>  \u0412\u0441\u0451! \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0430\u0441\u044c, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 RAX, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u043b\u0435 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 EAX, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043b\u0438\u0448\u043d\u0438\u0445 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0434\u0435\u0441\u044c \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0432\u0435\u0440\u043d\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435 RAX, \u043d\u043e \u0447\u0442\u043e\u0431 \u0431\u044b\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0432\u0441\u0435 \u0436\u0435 \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432\u0443\u044e \u043f\u0430\u0440\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u043a\u043e\u0434 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0432\u043e\u0441\u044c\u043c\u0438\u0431\u0430\u0439\u0442\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"delphi\">  db $48 mov edx, eax                   \/\/ mov rdx, rax   db $48, $C1, $EA, $20                 \/\/ shr rdx, $20<\/code><\/pre>\n<p>  \u041c\u043b\u0430\u0434\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 RAX \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u0432 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 EAX, \u0430 \u0441\u0442\u0430\u0440\u0448\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u0438\u0445 \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0430 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 EDX \u043e\u0442\u043a\u0443\u0434\u0430 \u0435\u0433\u043e \u0437\u0430\u0431\u0435\u0440\u0435\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f). \u041f\u0440\u0430\u0432\u0434\u0430 Delphi \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e SHR \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0438\u0434\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0430 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 \u043a\u0430\u043a \u043d\u0430\u0431\u043e\u0440 \u043e\u043f\u043a\u043e\u0434\u043e\u0432.<\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439:<\/p>\n<pre><code class=\"delphi\">  db $48 lea esp, [ebp + $30]           \/\/ lea rsp, [rbp + $30]   pop ebp    <\/code><\/pre>\n<p>  \u042d\u0442\u0438\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u043c\u0438 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u0442\u0435\u043a\u043e\u0432\u044b\u0439 \u043a\u0430\u0434\u0440, \u043e\u043d \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d \u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u0432 32 \u0431\u0438\u0442\u0430: <\/p>\n<pre><code class=\"delphi\">  db $E8, 0, 0, 0, 0              \/\/ call +5   mov [esp + 4], $23              \/\/ mov dword ptr [rsp + 4], $23   add [esp], $0D                  \/\/ add dword ptr [rsp], $0D   retf                            \/\/ \u0434\u0430\u043b\u044c\u043d\u0438\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u0441\u043e \u0441\u043c\u0435\u043d\u043e\u0439 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430 CS:0\u044523 + \u0430\u0434\u0440\u0435\u0441      \/\/ \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u043e\u0442\u0441\u044e\u0434\u0430 \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u0432 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435<\/code><\/pre>\n<p>  \u0412\u044b\u0445\u043e\u0434 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u043e \u043a\u043e\u0434\u0443 \u0432\u0445\u043e\u0434\u0430, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430. \u0422.\u043a. \u0432\u044b\u0437\u043e\u0432 CALL \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 64 \u0431\u0438\u0442\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043d\u0430 \u0441\u0442\u0435\u043a \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f 8 \u0431\u0430\u0439\u0442 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e PUSH \u0443\u0436\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e [ESP + 4] \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0440\u0430\u0432\u0435\u043d 0x23 \u0430 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 [ESP] \u043d\u0443\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043d\u0430 13 \u0431\u0430\u0439\u0442 (\u0434\u043b\u0438\u043d\u043d\u0430 \u0442\u0440\u0435\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 mov + add + retf)<\/p>\n<p>  \u041d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0431\u043e\u044f\u0442\u0441\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 CALL \u043d\u0430 \u0441\u0442\u0435\u043a \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u043b \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d 8 \u0431\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0442.\u043a. \u043e\u043d \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0432 32 \u0431\u0438\u0442\u043d\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043a\u043e\u0434\u0430 \u0441\u0442\u0430\u0440\u0448\u0438\u0435 32 \u0431\u0438\u0442\u0430 (\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0441\u0435\u043b\u0435\u043a\u0442\u043e\u0440) \u0431\u0443\u0434\u0443\u0442 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0434\u043e \u0443\u0431\u0440\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0432\u0435\u0440\u0445\u0443\u0448\u043a\u0438 \u0441\u0442\u0435\u043a\u0430, \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 ESP \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e\u0435 EBP:<\/p>\n<pre><code class=\"delphi\">  mov esp, ebp<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0432\u0441\u0451 \u2014 \u0434\u0430\u043b\u044c\u0448\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u043f\u0438\u043b\u043e\u0433 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0447\u0438\u0441\u0442\u0438\u0442 \u0432\u0441\u0435 \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0438 \u0432\u0435\u0440\u043d\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434\u0443. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%203\/RawScanner.Utils.pas#L44\" rel=\"nofollow noopener noreferrer\">\u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0446\u0435\u043b\u0438\u043a\u043e\u043c<\/a>. \u042f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0435\u0451 \u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0435\u0451 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u00ab\u043f\u043e\u0449\u0443\u043f\u0430\u0442\u044c\u00bb \u0432 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0435.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0433\u043b\u0430\u0432\u0430\u0445 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%204\/RawScanner.X64Gates.pas\" rel=\"nofollow noopener noreferrer\">\u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0433\u0435\u0439\u0442\u0430<\/a>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u043a\u043e\u0434, \u043a\u0430\u043a \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 (\u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c JMP FAR \u0438 \u043f\u0440\u044f\u043c\u043e\u0433\u043e CALL) \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u044e 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 (\u0442.\u0435. \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0433\u0435\u0439\u0442\u0430 \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043b\u044e\u0431\u043e\u0439 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0441\u043e\u0433\u043b\u0430\u0448\u0435\u043d\u0438\u0435\u043c STDCALL, \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0435\u0451 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0438 \u0430\u0434\u0440\u0435\u0441). <\/p>\n<p>  \u0412\u0441\u0435 \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435 \u0438\u043c\u0435\u0435\u0442 \u0434\u0430\u0436\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 (\u043d\u0435 \u044f \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b) \u2014 Heavens Gate \ud83d\ude42<br \/>  \u041f\u043e\u0447\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043a\u0442\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b \u0438 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u0437\u0430\u0447\u0435\u043c \u2014 \u0432\u043e\u043f\u0440\u043e\u0441 \u043d\u0435 \u043a\u043e \u043c\u043d\u0435. <\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u0431\u044b\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0441\u0442\u0430\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a \u043a\u043e\u0434\u0443 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b \u0447\u0442\u043e\u0431\u044b \u0443\u0431\u0440\u0430\u0442\u044c \u00ab\u043a\u043e\u0441\u0442\u044b\u043b\u044c\u00bb \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e \u0435\u0451 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0443.<\/p>\n<p>  \u041e\u0434\u0438\u043d \u0438\u0437 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0430\u043a\u0438\u043c \u043f\u0440\u044f\u043c\u044b\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0444\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0438\u0448\u0435\u0442 MemoryInformation, \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 8 \u0431\u0430\u0439\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0442\u044c \u043e \u0442\u0430\u043a\u043e\u043c \u043d\u044e\u0430\u043d\u0441\u0435 \u043f\u0440\u043e\u0449\u0435 \u0441\u0440\u0430\u0437\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0443\u044e \u043e\u0431\u0435\u0440\u0442\u043a\u0443. \u0412\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">GetMappedFileName64<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function GetMappedFileName64(hProcess: THandle; lpv: ULONG_PTR64;   lpFilename: LPCWSTR; nSize: DWORD): DWORD; ... begin {$IFDEF WIN32}   Result := 0;   if NtQueryVirtualMemoryAddr &lt;> 0 then   begin     \/\/ \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 TMappedFileName \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u0430 \u043f\u043e 8-\u0431\u0430\u0439\u0442\u043d\u043e\u0439 \u0433\u0440\u0430\u043d\u0438\u0446\u0435     \/\/ \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0442\u0435\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e     MappedFileName := VirtualAlloc(nil,       SizeOf(TMappedFileName), MEM_COMMIT, PAGE_READWRITE);     try       Status := NtQueryVirtualMemory64(NtQueryVirtualMemoryAddr, hProcess, lpv,         MemoryMappedFilenameInformation, MappedFileName,         SizeOf(TMappedFileName), @ReturnLength);        if not NT_SUCCESS(Status) then       begin         BaseSetLastNTError(Status);         Exit(0);       end;        nSize := nSize shl 1;       cb := MappedFileName^.ObjectNameInfo.MaximumLength;        if nSize &lt; cb then         cb := nSize;        Move(MappedFileName^.FileName[0], lpFilename^, cb);        if cb = MappedFileName^.ObjectNameInfo.MaximumLength then         Dec(cb, SizeOf(WChar));        Result := cb shr 1;      finally       VirtualFree(MappedFileName, SizeOf(TMappedFileName), MEM_RELEASE);     end;   end   else   {$ENDIF}   Result := GetMappedFileName(hProcess, Pointer(lpv), lpFilename, nSize); end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u042d\u0442\u043e\u0442 \u043a\u043e\u0434 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u0438\u043d \u0432 \u043e\u0434\u0438\u043d \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e GetMappedFileName, \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 NtQueryVirtualMemory64 \u0434\u043b\u044f 32 \u0431\u0438\u0442, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0431\u044b\u043b \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0435\u0451 \u0430\u0434\u0440\u0435\u0441. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u0434 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%203\/RawScanner.LoaderData.pas#L159\" rel=\"nofollow noopener noreferrer\">TLoaderData.Scan32LdrData<\/a> \u0443\u0434\u0430\u043b\u0438\u0432 \u043e\u0442\u0442\u0443\u0434\u0430 \u043a\u043e\u0434 \u00ab\u043a\u043e\u0441\u0442\u044b\u043b\u044f\u00bb \u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u043d\u0430 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u043e\u0432:<\/p>\n<pre><code class=\"delphi\">    if FUse64Addr then     begin       MapedFilePathLen := GetMappedFileName64(FProcess, Module.ImageBase,         @MapedFilePath[1], MAX_PATH * SizeOf(Char));       if MapedFilePathLen > 0 then         Module.ImagePath := NormalizePath(Copy(MapedFilePath, 1, MapedFilePathLen));     end;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0430\u0434\u0440\u0435\u0441 64 \u0431\u0438\u0442\u043d\u043e\u0439 NtQueryVirtualMemory, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043a\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0437\u0432\u0430\u043d \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0431\u043e\u0442\u043e\u0439 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0438\u0437 \u0432\u0442\u043e\u0440\u043e\u0439 \u0433\u043b\u0430\u0432\u044b:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f NtQueryVirtualMemory Gate<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">  if IsWow64Mode then   begin     LocalLoader := TLoaderData.Create(hProcess, True);     try       if LocalLoader.Load64LoaderData(PEB64.LoaderData) > 0 then         for var Module in LocalLoader.Modules do         begin           if ExtractFileName(Module.ImagePath).ToLower = 'ntdll.dll' then           begin             Wow64Support.DisableRedirection;             try               NtDll := TRawPEImage.Create(Module.ImagePath, Module.ImageBase);               try                 Index := NtDll.ExportIndex('NtQueryVirtualMemory');                 if Index >= 0 then                   SetNtQueryVirtualMemoryAddr(NtDll.ExportList.List[Index].FuncAddrVA);               finally                 NtDll.Free;               end;             finally               Wow64Support.EnableRedirection;             end;             Break;           end;         end;     finally       LocalLoader.Free;     end;   end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430:<\/p>\n<ol>\n<li>\u0447\u0435\u0440\u0435\u0437 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043d\u0441 NTDLL<\/li>\n<li>\u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0435\u0451 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 NtQueryVirtualMemory<\/li>\n<li>\u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439<\/li>\n<\/ol>\n<p>\u0428\u0430\u0433\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u044b\u0435, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u044e\u0430\u043d\u0441\u0430, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 NTDLL (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c TRawPEImage.Create) \u043d\u0443\u0436\u043d\u043e \u041e\u0411\u042f\u0417\u0410\u0422\u0415\u041b\u042c\u041d\u041e \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d\u0430 32 \u0431\u0438\u0442\u043d\u0430\u044f ntdll \u0438\u0437 SysWow64 \u0438 \u0430\u0434\u0440\u0435\u0441 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d \u043d\u0435 \u0432\u0435\u0440\u043d\u043e, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u0432\u044b\u0437\u043e\u0432 NtQueryVirtualMemory64 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442\u044c\u0441\u044f \u0441 AccessViolation \u0432\u043d\u0443\u0442\u0440\u0438 NTDLL.<\/p>\n<p>  \u041a\u043e\u0434 \u043a \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u0433\u043b\u0430\u0432\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%203\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<h3>4. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 Forward \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430<\/h3>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0448\u0430\u0433\u0443 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043d\u0430 \u043d\u0438\u0445 \u043d\u0435 \u043e\u0442\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0434\u0435\u043b\u043e\u043c, \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u0438\u0437 test.dpr \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b, \u0443\u0445\u043e\u0434\u0438\u0442 \u0432 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%204\/RawScanner.Core.pas#L38\" rel=\"nofollow noopener noreferrer\">TRawScanner<\/a>, \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0430\u0434\u0440\u0435\u0441\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0439 NtQueryVirtualMemory). \u042d\u0442\u043e\u0442 \u043a\u043b\u0430\u0441\u0441 \u0431\u0443\u0434\u0435\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439, \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u0442\u0438\u0441\u044c \u0432\u0441\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c (\u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430).<\/p>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%204\/RawScanner.ModulesData.pas#L110\" rel=\"nofollow noopener noreferrer\">TRawModules<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0441\u043f\u0438\u0441\u043e\u043a TRawPEImage \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438.<\/p>\n<p>  \u0428\u043b\u044e\u0437 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 64 \u0431\u0438\u0442\u043d\u043e\u0439 NtQueryVirtualMemory \u0437\u0430\u043c\u0435\u043d\u0435\u043d \u043d\u0430 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%204\/RawScanner.X64Gates.pas\" rel=\"nofollow noopener noreferrer\">\u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0433\u0435\u0439\u0442<\/a>, \u0435\u0433\u043e \u043a\u043e\u0434 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043a\u043e\u0434\u043e\u043c \u0448\u043b\u044e\u0437\u0430 \u0438\u0437 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0432\u0441\u044e \u0440\u0443\u0442\u0438\u043d\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0435 \u0441\u0440\u0435\u0434\u044b \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>  \u0423 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e TRawScanner \u0431\u0443\u0434\u0435\u0442, \u043f\u043e\u043c\u0438\u043c\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0438 \u0434\u0435\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430, \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043c\u0435\u0442\u043e\u0434 InitFromProcess(PID), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<ul>\n<li>\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Modules \u2014 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u043a\u043b\u0430\u0441\u0441 TRawModules<\/li>\n<li>\u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e Analizer \u2014 \u043d\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435.<\/li>\n<\/ul>\n<p>\u041d\u0443 \u0430 TRawModules \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a (\u0444\u0443\u043d\u043a\u0446\u0438\u044f AddImage), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e \u0435\u0451 hInstance (\u0444\u0443\u043d\u043a\u0446\u0438\u044f GetModule), \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 (\u0444\u0443\u043d\u043a\u0446\u0438\u044f GetProcData):<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawModules<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">  TRawModules = class   private     FItems: TObjectList;     FIndex: TDictionary;     FImageBaseIndex: TDictionary;   ...   public         function AddImage(const AModule: TModuleData): Integer;     procedure Clear;     function GetModule(AddrVa: ULONG_PTR64): Integer;     function GetProcData(const LibraryName, FuncName: string; Is64: Boolean;       var ProcData: TExportChunk; CheckAddrVA: ULONG_PTR64): Boolean; overload;     function GetProcData(const LibraryName: string; Ordinal: Word;       Is64: Boolean; var ProcData: TExportChunk; CheckAddrVA: ULONG_PTR64): Boolean; overload;     function GetProcData(const ForvardedFuncName: string; Is64: Boolean;       var ProcData: TExportChunk; CheckAddrVA: ULONG_PTR64): Boolean; overload;       property Items: TObjectList read FItems;   end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439 GetModule \u0438 GetProcData \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0441\u043b\u043e\u0432\u0430\u0440\u044f:<\/p>\n<ol>\n<li>FIndex \u2014 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u043f\u043e \u0438\u043c\u0435\u043d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/li>\n<li>FImageBaseIndex \u2014 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441 \u043a\u043b\u044e\u0447\u043e\u043c \u043f\u043e hInstance \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<\/li>\n<\/ol>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u043a\u0440\u0430\u0442\u0446\u0435 \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435, \u043e\u0431\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a \u2014 \u0438\u043c\u0435\u044f \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (\u043a\u0430\u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430, \u0442\u0430\u043a \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a) \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437 \u0432\u0441\u0435\u0445 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0438\u0445 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c \u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0432 \u043b\u043e\u0433 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0431\u044f \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u2014 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u0431\u044b\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0438\u043b\u0438 \u043a\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043e\u0448\u0438\u0431\u0441\u044f. <\/p>\n<p>  \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 API <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/api\/psapi\/nf-psapi-queryworkingset\" rel=\"nofollow noopener noreferrer\">QueryWorkingSet<\/a>. \u0421\u0443\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u0449\u0438\u0439 \u043f\u0443\u043b, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 WorkingSet \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u0443\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0438 \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0442\u0430\u043a, \u043d\u043e \u0431\u043b\u0438\u0437\u043a\u043e), \u0433\u0434\u0435 \u043f\u043e\u043c\u0438\u043c\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u044d\u0442\u043e\u0442 \u043f\u0443\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u0445 \u0437\u0430\u0449\u0438\u0442\u044b \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b (Protection), \u0444\u043b\u0430\u0433 \u2014 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f (Shared), \u0430 \u0442\u0430\u043a\u0436\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 (SharedCount). <\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0438\u0437 \u043d\u0438\u0445 (\u0442.\u043d. knowndlls) \u044d\u0442\u0430\u043f \u0447\u0442\u0435\u043d\u0438\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0441 \u0434\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043c\u0430\u043f\u0438\u0442\u0441\u044f \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u0430\u043a \u0441\u0435\u0433\u043c\u0435\u043d\u0442, \u043d\u0443 \u044d\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b. \u0418 \u0432\u0441\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435, \u0442.\u0435. \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443\u0436\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0447\u0442\u0435\u043d\u0438\u044f) \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u0441\u044f \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 (\u043d\u0443, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0432\u0430\u043c\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e) \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0436\u0435 \u0438\u0434\u0435\u0442 \u0435\u0451 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0441 \u0434\u0438\u0441\u043a\u0430, \u041d\u041e \u0434\u0430\u0436\u0435 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e, \u0432\u0441\u0435 \u0435\u0451 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043e\u043c\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435. <\/p>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0430 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u043b\u044e\u0431\u0443\u044e \u0438\u0437 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u043a\u043e\u043f\u0438\u044f \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0438, \u0430 \u0441\u0430\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0430 \u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u043e \u0441\u0431\u0440\u043e\u0441\u043e\u043c \u0444\u043b\u0430\u0433\u043e\u0432 Shared \u0438 SharedCount. \u0412\u043e\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0438 \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0438.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 (\u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438) QueryWorkingSet \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0430\u043d\u0442\u0438\u043e\u0442\u043b\u0430\u0434\u043a\u0435, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044f \u043f\u043e\u043c\u0438\u043c\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043a\u0430\u043d\u0435\u0440\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0449\u0443\u0442 \u0447\u0442\u043e-\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435.<\/p>\n<p>  \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440 \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430:<\/p>\n<ol>\n<li>\u0412\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0447\u0435\u0440\u0435\u0437 VirtualAlloc \u0438 \u0435\u0451 \u0430\u0434\u0440\u0435\u0441 \u0433\u0434\u0435-\u043b\u0438\u0431\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f.<\/li>\n<li>\u0414\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u0431\u0440\u043e\u0441 \u0432\u043e\u0440\u043a\u0441\u0435\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c SetProcessWorkingSetSize \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0432\u0442\u043e\u0440\u044b\u043c \u0438 \u0442\u0440\u0435\u0442\u044c\u0438\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u00abSIZE_T(-1)\u00bb<\/li>\n<\/ol>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438\u0437 \u0440\u0430\u0431\u043e\u0447\u0435\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0432 \u043d\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u0435\u0451 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c. \u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0430\u043c\u0438 \u043c\u044b \u0447\u0438\u0442\u0430\u0442\u044c \u0435\u0451 \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c, \u0435\u0451 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u0432\u043e\u0440\u043a\u0441\u0435\u0442\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 (\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443) \u043c\u043e\u0436\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e \u2014 \u043d\u0430\u0441 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0441\u043d\u0430\u0440\u0443\u0436\u0438! <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u0443\u044e \u0432 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435 NtQueryVirtualMemory64 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u044f \u0435\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0444\u043b\u0430\u0433\u0430 MemoryWorkingSetList \u0440\u0430\u0432\u043d\u044b\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b\u0437\u043e\u0432\u0430\u0442\u044c QueryWorkingSet \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0438\u0437 32 \u0431\u0438\u0442 (\u0434\u043e \u043b\u0438\u043c\u0438\u0442\u0430 \u0432 MM_HIGHEST_USER_ADDRESS), \u0430 \u0442\u0430\u043a \u043a\u0430\u043a \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u043e\u043b\u043d\u044b\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0451 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u043e\u0433 (\u0442\u043e\u0447\u043d\u0435\u0435 64 \u0431\u0438\u0442\u043d\u0443\u044e NtQueryVirtualMemory).<\/p>\n<p>  \u041d\u044e\u0430\u043d\u0441 \u0441 \u0432\u044b\u0437\u043e\u0432\u043e\u043c NtQueryVirtualMemory64 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0442.\u043a. \u044d\u0442\u043e 64 \u0431\u0438\u0442\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u0442\u043e \u0438 \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d\u0430 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434, \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u044f\u0442\u044c 64 \u0431\u0438\u0442\u043d\u044b\u0439 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c, \u0442.\u0435. \u0432\u0441\u0435 \u044d\u0442\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0432\u044b\u0440\u0430\u0432\u043d\u0435\u043d\u044b \u043f\u043e \u0433\u0440\u0430\u043d\u0438\u0446\u0435 8 \u0431\u0430\u0439\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 NtQueryVirtualMemory64 \u0432\u0435\u0440\u043d\u0435\u0442 STATUS_DATATYPE_MISALIGNMENT. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u043f\u0440\u043e \u044d\u0442\u043e\u0442 \u043d\u044e\u0430\u043d\u0441 \u0438 \u043d\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u0430\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0430:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">InternalNtQueryVirtualMemory64<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">{$IFDEF WIN32} function InternalNtQueryVirtualMemory64(FuncRVA: ULONG_PTR64; hProcess: THandle;   BaseAddress: ULONG_PTR64; MemoryInformationClass: DWORD;   MemoryInformation: Pointer; MemoryInformationLength: DWORD;   ReturnLength: PULONG64): NTSTATUS; var   AlignedBuff: Pointer; begin   AlignedBuff := VirtualAlloc(nil,     MemoryInformationLength, MEM_COMMIT, PAGE_READWRITE);   try     Result := NtQueryVirtualMemory64(FuncRVA, hProcess, BaseAddress,       MemoryInformationClass, AlignedBuff, MemoryInformationLength,       ReturnLength);     Move(AlignedBuff^, MemoryInformation^, MemoryInformationLength);   finally     VirtualFree(AlignedBuff, MemoryInformationLength, MEM_RELEASE);   end; end; {$ENDIF}<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0434\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0435\u0440\u0442\u043a\u0438 \u043d\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0438 AlignedBuff \u0432\u0441\u0435\u0433\u0434\u0430 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0431\u0443\u0444\u0435\u0440 MemoryInformation.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u044b\u043c\u0438 \u043a\u043e\u0434\u0430\u043c\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043f\u043e\u043c\u0438\u043c\u043e STATUS_SUCCESS \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0438 STATUS_INFO_LENGTH_MISMATCH, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0431\u0443\u0444\u0435\u0440\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 AlignedBuff \u0438 \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043a\u043e\u0434\u0443. <\/p>\n<p>  \u0421\u0430\u043c\u0430 \u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">QueryWorkingSet64<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function QueryWorkingSet64(hProcess: THandle; pv: Pointer; cb: DWORD): Boolean; {$IFDEF WIN32} const   MemoryWorkingSetList = 1; var   Status: NTSTATUS; {$ENDIF} begin   {$IFDEF WIN32}     \/\/ \u0435\u0441\u043b\u0438 \u043c\u044b \u0432 \u0447\u0438\u0441\u0442\u043e\u0439 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421 \u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c 32 \u0431\u0438\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432   \/\/ \u0441 \u043f\u0435\u0440\u0435\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438   if not Wow64Support.Use64AddrMode then   begin     Result := QueryWorkingSet32(hProcess, pv, cb);     Exit;   end;     \/\/ \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 WorkSet \u0441 64 \u0431\u0438\u0442\u043d\u044b\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438   if Assigned(NtQueryVirtualMemory64) then   begin     Status := InternalNtQueryVirtualMemory64(       hProcess, 0, MemoryWorkingSetList, pv, cb, nil);     if NT_SUCCESS(Status) then       Exit(True);   end;     Result := False;     {$ELSE}   Result := QueryWorkingSet(hProcess, pv, cb);   {$ENDIF} end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u043d\u0435\u0439 \u0432\u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0435\u0441\u043b\u0438 \u043c\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u043c\u0441\u044f \u043f\u043e\u0434 \u0447\u0438\u0441\u0442\u043e\u0439 32 \u0431\u0438\u0442\u043d\u043e\u0439 \u041e\u0421, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 QueryWorkingSet32, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 \u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0439 QueryWorkingSet \u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432\u044b\u0437\u043e\u0432\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439.<\/p>\n<p>  \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c NtQueryVirtualMemory64 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c MemoryWorkingSetList. <\/p>\n<p>  \u0421 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u043c\u0438 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0438, \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0412 \u043d\u043e\u0432\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435 RawScanner.Analyzer \u043f\u0438\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441:<\/p>\n<pre><code class=\"delphi\">  TPatchAnalyzer = class     private     ...     function CheckPageSharing(AddrVa: ULONG_PTR64;       out SharedCount: Byte): Boolean;   protected     procedure DoModifyed(HookData: THookData);     procedure InitWorkingSet;         procedure ScanExport(Index: Integer; Module: TRawPEImage);     procedure ScanModule(Index: Integer);   public     constructor Create(AProcessHandle: THandle; ARawModules: TRawModules);     destructor Destroy; override;     function Analyze(       AProcessTableHook: TProcessTableHookCallBack;       AProcessCodeHook: TProcessCodeHookCallBack): TAnalizeResult;   end;<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0435\u0433\u043e \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u043e\u043f\u0438\u0448\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0438\u0439 \u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0438 \u0443\u0437\u043a\u0438\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b.<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0445\u044d\u043d\u0434\u043b \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 (\u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\u043e\u043c TRawScanner). \u0425\u044d\u043d\u0434\u043b \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b QueryWorkingSet64, \u043d\u0443 \u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043d\u0435\u043c\u0443 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0430\u043d\u0430\u043b\u0438\u0437. <\/p>\n<p>  \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u043c \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f Analyze, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0434\u0432\u0430 \u043a\u0430\u043b\u0431\u044d\u043a\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435 \u043a\u043e\u0434\u0435, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c WorkingSet \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b InitWorkingSet \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 TRawModules \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 ScanModule.<\/p>\n<p>  ScanModule \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043e\u0431\u0440\u0430\u0437 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f (\u0432 TMemoryStream) \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 ScanExport.<\/p>\n<p>  \u0418 \u0432\u043e\u0442 ScanExport \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0435 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432 \u043d\u0435\u0439 \u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u043e\u0434\u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0451 \u0447\u0430\u0441\u0442\u044c \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TPatchAnalyzer.ScanExport<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TPatchAnalyzer.ScanExport(Index: Integer; Module: TRawPEImage); begin   ExportDirectory := TRemoteStream.Create(FProcessHandle,     Module.ExportDirectory.VirtualAddress, Module.ExportDirectory.Size);   try     ZeroMemory(@HookData, SizeOf(THookData));     ... \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b     for Exp in Module.ExportList do     begin       ...     HookData.RawVA := Exp.FuncAddrVA;       ...         if not ExportDirectory.ReadMemory(Exp.ExportTableVA, 4,         @HookData.ExportAdv.ExpRemoteRva) then         Continue;        HookData.RemoteVA :=         HookData.ExportAdv.ExpRemoteRva + Module.ImageBase;        if HookData.RemoteVA &lt;> HookData.RawVA then       begin          if Exp.ForvardedTo &lt;> EmptyStr then           if not FRawModules.GetProcData(Exp.ForvardedTo,             Module.Image64, ForvardedExp, HookData.RemoteVA) then           begin             HookData.Calculated := False;             DoModifyed(HookData);             Continue;           end           else             HookData.RawVA := ForvardedExp.FuncAddrVA;          if HookData.RemoteVA &lt;> HookData.RawVA then         begin           DoModifyed(HookData);           Continue;         end;       end;     end;   finally     ExportDirectory.Free;   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u0435\u0440\u0432\u044b\u043c \u0438\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 TRemoteStream.Create \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0437 \u0441\u0435\u0431\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u0443 \u043d\u0430\u0434 TMemoryStream \u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u044d\u0448\u0430, \u0442.\u043a. \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0431\u0443\u0434\u0435\u0442 \u043c\u043d\u043e\u0433\u043e \u0447\u0442\u0435\u043d\u0438\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0447\u0438\u0445 ReadRemoteMemory \u0432\u0441\u044f \u043f\u0430\u043c\u044f\u0442\u044c, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435, \u0441\u0440\u0430\u0437\u0443 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u043a\u044d\u0448 \u0437\u0430 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u0441\u0435\u0441\u0442.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u0438\u0434\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u0445\u043e\u0434 \u043c\u043e\u0434\u0443\u043b\u044f Module.ExportList, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0440\u0443\u0436\u0443 \u0432 \u043a\u0430\u043b\u0431\u044d\u043a, \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043a\u043e\u0434\u043e\u043c.<\/p>\n<p>  \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f RVA \u0430\u0434\u0440\u0435\u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 (\u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 \u0435\u0449\u0435 \u0432 TRawPEImage \u0430\u0434\u0440\u0435\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430) Exp.ExportTableVA, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0439 RVA \u0430\u0434\u0440\u0435\u0441 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 VA \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0441 \u0431\u0430\u0437\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f ImageBase (\u043d\u0443 \u0442.\u0435. \u0441 \u0435\u0433\u043e hInstance).<br \/>  \u0418 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u2014 \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u0442\u043e\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043b \u043d\u0430\u0448 \u043a\u043e\u0434 \u0435\u0449\u0435 \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 TRawPEImage (\u0432\u0442\u043e\u0440\u0430\u044f \u0433\u043b\u0430\u0432\u0430) \u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0437\u043d\u0430\u0447\u0430\u0442\u044c \u0442\u0440\u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<ol>\n<li>\u043a\u043e\u0434 \u0440\u0430\u0441\u0447\u0435\u0442\u0430 \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u0447\u0435\u043d<\/li>\n<li>\u043a\u043e\u0434 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0435\u043d \u0438 \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0438\u0437\u0432\u043d\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a.<\/li>\n<li>\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430, \u0438 \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043c\u043e\u0434\u0443\u043b\u0435<\/li>\n<\/ol>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443 \u2014 \u043a\u043e\u0434 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 (\u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0447\u043d\u043e).<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u043d\u043e \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430, \u0442.\u0435. \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0448\u0430\u0433\u043e\u043c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u043d\u0430\u0439\u0442\u0438 \u2014 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u0438 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u0442\u043e\u0433\u0434\u0430 \u0443\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u0447\u0435\u0440\u0435\u0437 DoModifyed, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0448\u0430\u0440\u0438\u043d\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 CheckPageSharing \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043e\u0442\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u0432 \u043a\u0430\u043b\u0431\u044d\u043a. \u0412 \u043d\u0435\u0439 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0435\u0451 \u043a\u043e\u0434 \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439: <\/p>\n<pre><code class=\"delphi\">function TPatchAnalyzer.CheckPageSharing(AddrVa: ULONG_PTR64;   out SharedCount: Byte): Boolean; begin   Result := FWorkingSet.TryGetValue(AddrVA and PageMask, SharedCount);   if not Result then         if ReadRemoteMemory(FProcessHandle, AddrVa, @Tmp, 1) then     begin       InitWorkingSet;       Result := FWorkingSet.TryGetValue(AddrVA and PageMask, SharedCount);     end;       end;<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435, \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441, \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u043f\u0443\u043b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0432\u043e\u0440\u043a\u0441\u0435\u0442\u0430, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c (\u0442.\u043a. \u0433\u0440\u0430\u043d\u0443\u043b\u044f\u0446\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 4096 \u0431\u0430\u0439\u0442\u0430), \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u043a\u0430, \u043e\u0442\u0441\u0435\u043a\u0430\u044e\u0449\u0430\u044f \u043c\u043b\u0430\u0434\u0448\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430\u0441\u044c, \u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0435\u0451 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0432\u043e\u0440\u043a\u0441\u0435\u0442 \u0447\u0442\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0431\u0430\u0439\u0442\u0430 \u043f\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 (\u0447\u0443\u0442\u044c \u0432\u044b\u0448\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u043f\u0440\u043e \u0434\u0435\u0442\u0435\u043a\u0442 \u0441\u043a\u0430\u043d\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u043e\u0442 \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435) \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e (\u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c) \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0432\u043e\u0440\u043a\u0441\u0435\u0442 \u0438 \u0435\u0449\u0435 \u0440\u0430\u0437 \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435. <\/p>\n<p>  \u0422\u0430\u043a \u0432\u043e\u0442, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0448\u043b\u043e\u0441\u044c \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043b\u0431\u044d\u043a, \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u043a\u043e\u0434\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u043c\u0438 \u2014 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0430\u0448 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0430\u0448\u0435\u043b \u0438 \u0447\u0442\u043e \u0435\u043c\u0443 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043a\u0430\u043b\u0431\u044d\u043a\u0430 \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u043e\u043d \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u044d\u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435. \u041a\u043e\u0434 \u043a\u043e\u043b\u0431\u044d\u043a\u0430 \u0438 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0443\u043b\u0435 &#171;<a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/blob\/main\/raw_scanner\/part%204\/display_utils.pas#L125\" rel=\"nofollow noopener noreferrer\">display_utils.pas<\/a>&#171;.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412 \u043a\u043e\u0434\u0435 \u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0432\u0432\u0435\u043b \u0434\u0435\u0444\u0430\u0439\u043d, \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u0440\u0438 \u0435\u0449\u0435 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0444\u043e\u0440\u0432\u0430\u0440\u0434 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0441\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 DISABLE_FORWARD_PROCESSING \u0432 \u0438\u043d\u043a\u043b\u0443\u0434\u0435 \u00abdefines.inc\u00bb.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ix\/7_\/ts\/ix7_tslo6x3xtn0bbpccq0zmn9e.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ix\/7_\/ts\/ix7_tslo6x3xtn0bbpccq0zmn9e.png\"\/><\/p>\n<p>  \u0412\u043e\u0442 \u043e\u043d\u0438 \u0432\u0441\u0435, \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 user32.dll (\u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442 \u0441\u043d\u044f\u0442 \u043d\u0430 Windows 11, \u043d\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u041e\u0421 \u0441\u043f\u0438\u0441\u043e\u043a \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u043c).<\/p>\n<p>  \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0432\u0435\u0434\u0443\u0442 \u0432\u043c\u0435\u0441\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 user32 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442) \u043a\u0443\u0434\u0430-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u044c ntdll.dll <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0442\u043e \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u044e:<\/p>\n<ol>\n<li>\u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0442\u0438\u043f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0430 (Export\/Import\/Delay Import), \u0434\u0430\u043b\u0435\u0435 \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<li>\u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0443\u0441, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0448\u0430\u0440\u0438\u043d\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b. Status: PATCHED \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0431\u044b\u043b\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0430.<\/li>\n<li>Expected: HEX_VALUE \u2014 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<li>present: HEX_VALUE \u2014 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u2014 \u043f\u0438\u0448\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043c\u043e\u0434\u0443\u043b\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441)<\/li>\n<li>\u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e\u043b\u0435 Raw (0xHEX_VALUE) \u2014 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0430\u0439\u043b\u0430, \u0433\u0434\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f RVA \u0430\u0434\u0440\u0435\u0441 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/li>\n<li>\u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 VA \u0430\u0434\u0440\u0435\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u043e\u0431 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 <\/li>\n<\/ol>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 user32.dll \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438 \u0442\u0430\u043c \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0430\u043a\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ro\/o4\/4m\/roo44muilhxt8lauowttoih9tcm.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ro\/o4\/4m\/roo44muilhxt8lauowttoih9tcm.png\"\/><\/p>\n<p>  \u0414\u0430, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043e\u0442 \u044d\u0442\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0432\u044b\u0432\u043e\u0434\u0430 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439: <\/p>\n<pre><code class=\"delphi\">Export modified user32.dll -> DefDlgProcA. Status: PATCHED! Expected: 0000000076F2A133, present: 0000000077B884A0 --> ntdll.dll Addr:           |Raw (0xA61C4):                                            |Remote: ---------------------------------------------------------------------------------------------------------------------------- 0000000076F26DC4|33 A1 0A 00                                               |A0 84 D0 00<\/code><\/pre>\n<p>  \u0438 \u0431\u0443\u0434\u0435\u043c \u0441\u0432\u0435\u0440\u044f\u0442\u044c \u0435\u0451 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430:   <\/p>\n<blockquote><p>76F26DC4: A0 84 D0 00 EAT FuncAddr [1669] user32.dll!DefDlgProcA -> NTDLL.NtdllDialogWndProc_A = [77B884A0]<\/p><\/blockquote>\n<ol>\n<li>\u0430\u0434\u0440\u0435\u0441 76F26DC4 \u2014 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0430\u0434\u0440\u0435\u0441 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b, \u0447\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00abA0 84 D0 00\u00bb \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u043c\u0443.<\/li>\n<li>\u00abpresent: 0000000077B884A0 &#8212;> ntdll.dll\u00bb \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438 \u043e\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u00abNTDLL.NtdllDialogWndProc_A = [77B884A0]\u00bb \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/li>\n<li>\u00abExpected: 0000000076F2A133\u00bb \u0430 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0436\u0438\u0434\u0430\u043b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440.<\/li>\n<\/ol>\n<p>\u0410 \u0442\u0430\u043c\u2026<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-u\/yi\/be\/-uyibe5nhla44bg1qbimyiqq-ti.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/-u\/yi\/be\/-uyibe5nhla44bg1qbimyiqq-ti.png\"\/><\/p>\n<p>  \u0410 \u0442\u0430\u043c \u0441\u0442\u0440\u043e\u043a\u0430 \u00abNTDLL.NtdllDialogWndProc_A\u00bb!!! \u041f\u0440\u0438\u0447\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.<\/p>\n<p>  \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u2014 \u044d\u0442\u043e \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u043f\u0440\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0441\u0435\u0440\u044c\u0435\u0437\u043d\u043e \ud83d\ude42<\/p>\n<p>  \u041d\u0443 \u0430 \u0435\u0441\u043b\u0438 \u0431\u0435\u0437 \u0448\u0443\u0442\u043e\u043a, \u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 RVA \u0430\u0434\u0440\u0435\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432\u0435\u0434\u0435\u0442 \u043a\u0443\u0434\u0430-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u044c \u0441\u0435\u043a\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u043c\u043e\u0434\u0443\u043b\u044f, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u043d \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0442.\u0435. \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0430\u043a\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0432 TRawPEImage:<\/p>\n<pre><code class=\"delphi\">function TRawPEImage.IsExportForvarded(RvaAddr: DWORD): Boolean; begin   Result := DirectoryIndexFromRva(RvaAddr) = IMAGE_DIRECTORY_ENTRY_EXPORT; end;<\/code><\/pre>\n<p>  \u0418 \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0441 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u043e\u043c \u044d\u0442\u043e \u043e\u043d\u0438 \u0443\u0434\u0430\u0447\u043d\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u044c \u0440\u0430\u043d\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u0443\u0441\u043a\u0438 \u043a\u043e\u0434 \u0442\u0430\u0441\u0443\u044f \u0438\u0445 \u043c\u0435\u0436\u0434\u0443 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u043f\u0440\u0438\u0447\u0435\u043c \u0431\u0435\u0437 \u043f\u043e\u0442\u0435\u0440\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435, \u0441\u0430\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430!<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u043d\u0430\u0448\u043b\u043e\u0441\u044c \u0432 Win11): USP10.ScriptGetLogicalWidths -> GDI32.ScriptGetLogicalWidths -> gdi32full.ScriptGetLogicalWidths<\/p>\n<p>  \u0418 \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0435\u0442\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0442\u043e\u0447\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430) \u0444\u043e\u0440\u0432\u0430\u0440\u0434 \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e. <\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0431\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430 \u0432 \u043a\u043b\u0430\u0441\u0441 TRawPEImage (\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 DISABLE_FORWARD_PROCESSING). <\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u043e\u043d\u0438 \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"delphi\">      {$IFNDEF DISABLE_FORWARD_PROCESSING}       if IsExportForvarded(FunctionsAddr[ExportChunk.Ordinal]) then       begin         Raw.Position := ExportChunk.FuncAddrRaw;         if Raw.Position = 0 then Continue;         ExportChunk.OriginalForvardedTo := ReadString(Raw);         ProcessApiSetRedirect(FOriginalName, ExportChunk);       end       else       begin         ExportChunk.OriginalForvardedTo := EmptyStr;         ExportChunk.ForvardedTo := EmptyStr;       end;       {$ENDIF}<\/code><\/pre>\n<p>  \u0422.\u0435. \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 IsExportForvarded, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0439, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430 \u2014 \u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430.<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435, \u0433\u0434\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u043f\u043e \u043e\u0440\u0434\u0438\u043d\u0430\u0440\u0443. <\/p>\n<p>  \u041a\u043e\u0434 \u043a \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%204\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<p>  \u041f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0433\u0434\u0435 \u043f\u043e\u043c\u0438\u043c\u043e \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u044b\u2026<\/p>\n<h3>5. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430<\/h3>\n<p>  \u0418\u043c\u043f\u043e\u0440\u0442 \u0432 \u0420\u0415 \u0444\u0430\u0439\u043b\u0430\u0445, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043e\u043d \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u043d\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0432 \u0434\u0432\u0443\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f\u0445. \u042d\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 IMAGE_DIRECTORY_ENTRY_IMPORT \u0438 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0441 \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 IMAGE_DIRECTORY_ENTRY_IAT.<\/p>\n<p>  \u0411\u044b\u0432\u0430\u044e\u0442, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438, \u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0434\u043a\u043e\u0441\u0442\u044c. \u0412 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0435\u0434\u0438\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430, \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440.<\/p>\n<p>  \u041a\u0430\u0436\u0434\u044b\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u2014 \u044d\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 IMAGE_IMPORT_DESCRIPTOR, \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0420\u0415 \u0444\u0430\u0439\u043b\u0430, \u0442\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u043e, \u043f\u0440\u0438\u0447\u0435\u043c \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u043d\u0430 \u043e\u0434\u043d\u0443 \u0438 \u0442\u0443 \u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u043f\u0438\u0441\u0430\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0437\u0430 \u043e\u0434\u043d\u0438\u043c, \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 IMAGE_DIRECTORY_ENTRY_IMPORT, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u0430\u043c\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0432 \u043f\u043e\u043b\u0435 Characteristics \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u043e\u043b\u044c, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432. <\/p>\n<p>  \u0412 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b \u0442\u0440\u0438 \u043f\u043e\u043b\u044f.<\/p>\n<p>  1. Name \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441 \u0441 Ansi \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u0439 \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0422.\u0435. \u0433\u0440\u0443\u0431\u043e \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u044f \u0435\u0433\u043e \u0432 VA\/Raw \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u00abkernel32.dll\u00bb<\/p>\n<p>  2. FirstThunk \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043f\u0438\u0441\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 IMAGE_THUNK_DATA, \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u0438 \u043f\u043e \u0441\u0443\u0442\u0438) \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f, \u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043b\u0438\u0431\u043e DWORD, \u043b\u0438\u0431\u043e ULONGLONG \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0445\u0440\u0430\u043d\u0438\u0442 \u043d\u0435\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438:<\/p>\n<p>  \u0410: \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0432 \u0447\u0438\u0441\u043b\u0435 \u0432\u0437\u0432\u0435\u0434\u0435\u043d \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442, \u0442.\u0435. \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0435 Value and IMAGE_ORDINAL_FLAGXX &lt;> 0, \u0434\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a Ordinal, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438 Name \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 GetProcAddress \u043f\u043e \u0435\u0451 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u043e\u043c\u0443 \u043d\u043e\u043c\u0435\u0440\u0443 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.<\/p>\n<p>  \u0411: \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u0440\u0448\u0438\u0439 \u0431\u0438\u0442 \u043d\u0435 \u0432\u0437\u0432\u0435\u0434\u0435\u043d, \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e \u0447\u0438\u0441\u043b\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 IMAGE_IMPORT_BY_NAME<\/p>\n<p>  \u0412: \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 (\u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043d\u0435 \u0431\u0443\u0434\u0435\u0442) \u0434\u0430\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0442\u0440\u0430\u043a\u0442\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u043a VA \u0430\u0434\u0440\u0435\u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u042d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u043f\u0438\u0441\u043a\u0430, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 FirstThunk, \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 OriginalFirstThunk \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0413: \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ForwarderChain \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c RVA \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b, \u043d\u0435 \u0432\u0438\u0434\u0435\u043b \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043d\u0438\u044f \u043d\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e \u0420\u0415 \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0438 \u044d\u0442\u043e\u0442 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443.<\/p>\n<p>  \u0412\u0441\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0438\u0437 \u0444\u0430\u0439\u043b\u0430. \u041a\u043e\u0433\u0434\u0430 \u043e\u043d \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0432 \u043d\u0435\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u044b VA \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041a\u043e\u043d\u0435\u0446 \u0441\u043f\u0438\u0441\u043a\u0430 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043d\u043e\u043b\u044c.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438, \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 FirstThunk \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 IMAGE_DIRECTORY_ENTRY_IAT, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 Import Address Table. \u041f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u044e \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u044d\u0442\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u043e\u0442\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0448\u0430\u0440\u0438\u043d\u0433\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432\u044b\u043d\u0435\u0441\u044f \u0432\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c \u043f\u043e\u043b\u044f \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u043b\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0418 \u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<p>  3. OriginalFirstThunk \u2014 \u0432\u0441\u0435 \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0447\u0442\u043e \u0438 FirstThunk, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043f\u0438\u0441\u043a\u043e\u0432, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0434\u0432\u0430 \u043f\u0443\u043d\u043a\u0442\u0430, \u0442.\u0435. \u0432 \u044d\u0442\u0438\u0445 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 VA \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0438 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u043d\u0438 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0422\u043e\u043b\u044c\u043a\u043e RVA \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b IMAGE_THUNK_DATA \u0438\u043b\u0438 Ordinal.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 IMAGE_THUNK_DATA \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  Hint \u2014 \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0435\u0451 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0435\u0439 \u0438\u0441\u043a\u0430\u0442\u044c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430.<br \/>  Name \u2014 Ansi \u0441\u0442\u0440\u043e\u043a\u0430, \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u043d\u0443\u043b\u0435\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0430\u044f \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fk\/jc\/uc\/fkjcucr5eozvfjgbxt2j03i5twi.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/fk\/jc\/uc\/fkjcucr5eozvfjgbxt2j03i5twi.png\"\/><\/p>\n<p>  \u0421\u0438\u043d\u0438\u043c \u0446\u0432\u0435\u0442\u043e\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 OriginalFirstThunk \u0438 \u0441\u0430\u043c \u0441\u043f\u0438\u0441\u043e\u043a, \u043e\u0431\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u0441\u0438\u043d\u0438\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043e\u043c (\u043e\u0431\u0440\u0430\u0449\u0430\u0439\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441\u0430)<\/p>\n<p>  \u0417\u0435\u043b\u0435\u043d\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 FirstThunk \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 VA \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u043d\u0443, \u0442\u043e\u0447\u043d\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<br \/>  \u041e\u0431\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0443\u043b\u0435\u043c.<\/p>\n<p>  \u0424\u0438\u043e\u043b\u0435\u0442\u043e\u0432\u044b\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043a\u0430\u043a \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u043e \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b IMAGE_THUNK_DATA, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0435\u0433\u043e \u043f\u043e\u043b\u044f Hint, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0438\u0441\u043b\u043e 137 (\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u043e\u0435 \u0432 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0435 \u0441\u043f\u0440\u0430\u0432\u0430).<\/p>\n<p>  \u0418\u0437 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u043f\u0438\u0441\u043a\u0438 FirstThunk, \u0442.\u043a. \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a\u0430 \u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0437\u0430\u0434\u0430\u0447\u0430 \u2014 \u043f\u0440\u043e\u0431\u0435\u0436\u0430\u0442\u044c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u043e\u0432 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430.<\/p>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0443 \u043a \u043a\u043e\u0434\u0443:   <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.LoadImport<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.LoadImport(Raw: TStream): Boolean; ...   Result := False;   Raw.Position := VaToRaw(FImportDir.VirtualAddress);   if Raw.Position = 0 then Exit;    ZeroMemory(@ImportChunk, SizeOf(TImportChunk));   while (Raw.Read(ImageImportDescriptor, SizeOf(TImageImportDescriptor)) =     SizeOf(TImageImportDescriptor)) and (ImageImportDescriptor.OriginalFirstThunk &lt;> 0) do   begin      \/\/ \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0434\u0435\u043a\u0441\u0440\u0438\u043f\u0442\u043e\u0440\u0430     NextDescriptorRawAddr := Raw.Position;      \/\/ \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440     Raw.Position := RvaToRaw(ImageImportDescriptor.Name);     if Raw.Position = 0 then       Exit;      \/\/ \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0440\u0430\u0437\u043c\u0435\u0440 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438 \u0444\u043b\u0430\u0433\u0438     IatDataSize := IfThen(Image64, 8, 4);     OrdinalFlag := IfThen(Image64, IMAGE_ORDINAL_FLAG64, IMAGE_ORDINAL_FLAG32);      \/\/ \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043a\u043e\u043d\u0447\u0430\u0442\u0441\u044f     IatData := 0;     ImportChunk.ImportTableVA := RvaToVa(ImageImportDescriptor.FirstThunk);     OriginalFirstThunk := RvaToVa(ImageImportDescriptor.OriginalFirstThunk);     if OriginalFirstThunk = 0 then       OriginalFirstThunk := ImportChunk.ImportTableVA;     repeat        LastOffset := VaToRaw(OriginalFirstThunk);       if LastOffset = 0 then         Exit;        Raw.Position := LastOffset;       Raw.ReadBuffer(IatData, IatDataSize);        if IatData &lt;> 0 then       begin         \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 - \u0438\u0434\u0435\u0442 \u0438\u043c\u043f\u043e\u0440\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e ORDINAL \u0438\u043b\u0438 \u0435\u0441\u0442\u044c \u0438\u043c\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438?         if IatData and OrdinalFlag = 0 then         begin           \/\/ \u0438\u043c\u044f \u0435\u0441\u0442\u044c - \u043d\u0443\u0436\u043d\u043e \u0435\u0433\u043e \u0432\u044b\u0442\u0430\u0449\u0438\u0442\u044c           Raw.Position := RvaToRaw(IatData);           if Raw.Position = 0 then             Exit;           Raw.ReadBuffer(ImportChunk.Ordinal, SizeOf(Word));           ImportChunk.FuncName := ReadString(Raw);         end         else         begin           \/\/ \u0438\u043c\u0435\u043d\u0438 \u043d\u0435\u0442 - \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e ordinal \u0444\u0443\u043d\u043a\u0446\u0438\u0438           ImportChunk.FuncName := EmptyStr;           ImportChunk.Ordinal := IatData and not OrdinalFlag;         end;          FImport.Add(ImportChunk);         Inc(ImportChunk.ImportTableVA, IatDataSize);         Inc(OriginalFirstThunk, IatDataSize);       end;     until IatData = 0;      \/\/ \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0443     Raw.Position := NextDescriptorRawAddr;   end;    Result := ImageImportDescriptor.OriginalFirstThunk = 0; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043e\u0434 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f Raw \u0430\u0434\u0440\u0435\u0441\u0430 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<p>  \u0421\u043a\u0430\u0436\u0435\u043c \u0442\u0430\u043a \u044d\u0442\u043e \u043b\u0438\u0448\u043d\u044f\u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430, \u0442.\u043a. \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0432\u0441\u0435\u0433\u0434\u0430 \u0432 \u043d\u0430\u043b\u0438\u0447\u0438\u0438, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043b\u0438\u0431\u043e \u0443 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435, \u0442.\u043a. \u0448\u0442\u0430\u0442\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0440\u044f\u0442\u043b\u0438 \u0432\u0430\u043c \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u043e\u0442\u0432\u043e\u0440\u0438\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u0440\u044e\u043a.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0438\u0434\u0435\u0442 \u0446\u0438\u043a\u043b \u2014 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u043c\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Ordinal \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043f\u0438\u0441\u043a\u0430. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0438\u0434\u0435\u0442 \u0445\u0438\u0442\u0440\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<p>  \u0412 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 ImportChunk (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0438\u0437 \u0432\u0441\u0435\u0445 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043c\u043f\u043e\u0440\u0442\u0430) \u0432 \u043f\u043e\u043b\u0435 ImportTableVA \u0437\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441\u043f\u0438\u0441\u043a\u0430 \u0438\u0437 IAT \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 FirstThunk (\u0438\u043c\u0435\u043d\u043d\u043e \u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440), \u043d\u043e \u0430\u0434\u0440\u0435\u0441, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 OriginalFirstThunk, \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c.<\/p>\n<p>  \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0439 \u0432 \u043f\u0443\u043d\u043a\u0442\u0435 \u00ab\u0412\u00bb \u0447\u0443\u0442\u044c \u0432\u044b\u0448\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a FirstThunk \u0438\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c VA \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442.\u0435. \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 (\u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430).<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0431\u0430\u0437\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0440\u0430\u0432\u043d\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 IMAGE_OPTIONAL_HEADER, (\u043f\u043b\u044e\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u0437 BOUND_IMPORT) \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u0441\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a OriginalFirstThunk, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 FirstThunk.<\/p>\n<p>  \u0414\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0435\u0434\u043a\u043e, \u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0435, \u0447\u0442\u043e \u0441\u043f\u0438\u0441\u043e\u043a OriginalFirstThunk \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0412 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0433\u043e \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a FirstThunk \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043d\u0430\u0447\u0430\u043b\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u0432\u043e\u0442 \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435:<\/p>\n<pre><code class=\"delphi\">    if OriginalFirstThunk = 0 then       OriginalFirstThunk := ImportChunk.ImportTableVA;<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, FirstThunk \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u043b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c OriginalFirstThunk, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0431\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b\u0430\u0441\u044c \u043d\u0435 \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0431\u0430\u0437\u0435 (\u0438\u043b\u0438 \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430) \u0431\u044b\u043b\u043e \u0431\u044b \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c IAT, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 FirstThunk, \u0442.\u043a. \u0432 \u044d\u0442\u043e\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0431\u044b RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 IMAGE_THUNK_DATA.<\/p>\n<p>  \u041d\u0443 \u0438 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u0441\u043f\u0438\u0441\u043a\u0430 (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u043d\u0430 \u043d\u043e\u043b\u044c) \u0438, \u0435\u0441\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0435\u0449\u0435 \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043b\u0438\u0431\u043e \u043a\u0430\u043a Ordinal (c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0447\u0435\u0440\u0435\u0437 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0444\u043b\u0430\u0433\u0430 OrdinalFlag), \u043b\u0438\u0431\u043e \u043a\u0430\u043a \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 IMAGE_THUNK_DATA, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u0437\u0430\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0439 \u0438\u0437\u0432\u043d\u0435.<\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u0441\u0435 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043f\u0440\u043e\u0449\u0435 \u0447\u0435\u043c \u0441\u0430\u043c\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u043a\u043e\u0434\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u043d\u0443\u0436\u043d\u043e \u0443\u0447\u0435\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  1. \u041d\u0435\u043b\u044c\u0437\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\/\u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u043d\u0443\u043b\u0435\u0432\u043e\u043c \u043a\u043e\u043b\u044c\u0446\u0435. \u0423 \u0442\u0430\u043a\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432 \u0420\u0415 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0444\u043b\u0430\u0433 IMAGE_SUBSYSTEM_NATIVE. \u0415\u0441\u043b\u0438 \u0432\u044b \u0432\u043e\u0437\u0440\u0430\u0437\u0438\u0442\u0435 \u0447\u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043a\u043e\u043b\u044c\u0446\u0435 (\u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0435\u0441\u044c \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u043a\u043e\u0434) \u044f \u043e\u0442\u0432\u0435\u0447\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043d\u0430 Win11 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 SearchHost \u0438 \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 C:\\Windows\\System32\\LegacySystemSettings.dll \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 (\u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e) \u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0430 ntoskrnl.exe \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044e wcschr().<\/p>\n<p>  \u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 ntoskrnl \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0446\u0435\u043b\u0438\u043a\u043e\u043c, \u043d\u043e \u0435\u0451 \u0438\u043c\u043f\u043e\u0440\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0441\u0451 \u044f\u0434\u0440\u043e \u0432 \u0442\u0440\u0435\u0442\u044c\u0435 \u043a\u043e\u043b\u044c\u0446\u043e, \u0430 \u0442\u0430\u043c \u043c\u043d\u043e\u0433\u043e \u0447\u0435\u0433\u043e \u0435\u0441\u0442\u044c, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 \u0438\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u2014 \u0435\u0441\u043b\u0438 \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0438\u0448\u0435\u043b \u043c\u043e\u0434\u0443\u043b\u044c \u0441 \u0444\u043b\u0430\u0433\u043e\u043c IMAGE_SUBSYSTEM_NATIVE, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0435\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e.<\/p>\n<p>  2. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0421\u041e\u041c+ \u043c\u043e\u0434\u0443\u043b\u0438, \u044d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e IL \u043a\u043e\u0434 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u043e.<\/p>\n<p>  \u0423 \u0442\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 COR20 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0444\u043b\u0430\u0433 COMIMAGE_FLAGS_ILONLY, \u0430 \u0442\u0430\u043a-\u0436\u0435 \u0443 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0435\u0441\u0442\u044c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430 \u0432\u0435\u0434\u0443\u0449\u0430\u044f \u043d\u0430 mscoree.dll -> _CorDllMain().<\/p>\n<p>  \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a, \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043b\u0430\u0433\u0430, \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0432 &#171;&#8230;base\\ntdll\\ldrapi.c&#187; \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 LdrpLoadDll()<\/p>\n<pre><code class=\"cpp\">    {       \/\/ if the image is COR-ILONLY, then don't walk the import descriptor       \/\/ as it is assumed that it only imports %windir%\\system32\\mscoree.dll, otherwise       \/\/ walk the import descriptor table of the dll.     }<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043b\u0430\u0433\u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u043a\u0446\u0438\u044f \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0432 32 \u0431\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 ILAsm \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u043b\u0430\u0433, \u0437\u0430\u043c\u0435\u043d\u0438\u0432 \u0435\u0433\u043e \u043d\u0430 COMIMAGE_FLAGS_32BITREQUIRED.<\/p>\n<p>  \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0438\u0442\u0430\u044f COM \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a. \u041f\u0440\u0438\u0437\u043d\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e IL \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0442\u0430\u043a-\u0436\u0435 \u0438 \u0432 \u0444\u043b\u0430\u0433\u0430\u0445 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 LDR_DATA_TABLE_ENTRYxx.Flags and LDRP_COR_IMAGE &lt;> 0, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f LdrpInitializeProcess().<\/p>\n<p>  \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u0443 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441 \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u0430\u044f.<\/p>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0438\u043c\u043f\u043e\u0440\u0442 \u043d\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0442\u043e \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0442\u0430\u043a \u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043c\u043f\u043e\u0440\u0442\u0430. <\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430. \u0412 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TPatchAnalyzer.ScanImport<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TPatchAnalyzer.ScanImport(Index: Integer; Module: TRawPEImage);    function CheckRemoteVA: Boolean;   begin     Result := HookData.Calculated and       (HookData.RemoteVA = HookData.RawVA);   end;  \/\/... begin     if Module.ImportList.Count = 0 then Exit;      if Module.NtHeader.OptionalHeader.Subsystem = IMAGE_SUBSYSTEM_NATIVE then   begin     Inc(FAnalizeResult.Import.Skipped, Module.ImportList.Count);     Exit;   end;    if Module.ComPlusILOnly then   begin     if Module.EntryPoint &lt;> 0 then       if VirtualQueryEx64(FProcessHandle,         Module.EntryPoint, MBI,         SizeOf(TMemoryBasicInformation64)) = SizeOf(TMemoryBasicInformation64) then         if MBI.Protect and (           PAGE_EXECUTE or           PAGE_EXECUTE_READ or           PAGE_EXECUTE_WRITECOPY or           PAGE_EXECUTE_READWRITE) = 0 then         begin           Inc(FAnalizeResult.Import.Skipped, Module.ImportList.Count);           Exit;         end;   end;    \/\/ \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043a\u044d\u0448 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u043e\u0431\u044b\u0447\u043d\u043e \u043e\u043d\u0430 \u0441\u0438\u0434\u0438\u0442 \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 IAT   \/\/ \u043d\u043e \u0432 \u0440\u0435\u0434\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u044d\u0442\u0430 \u0441\u0435\u043a\u0446\u0438\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u0441\u0435\u043a\u0446\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430   CacheVA := IfThen(Module.ImportAddressTable.Size = 0,     Module.ImportDirectory.VirtualAddress, Module.ImportAddressTable.VirtualAddress);   CacheSize := IfThen(Module.ImportAddressTable.Size = 0,     Module.ImportDirectory.Size, Module.ImportAddressTable.Size);    if CacheSize > 0 then     AIat := TRemoteStream.Create(FProcessHandle, CacheVA, CacheSize)   else     Exit;      try     AddrSize := IfThen(Module.Image64, 8, 4);     ZeroMemory(@HookData, SizeOf(THookData));     \/\/ ...      for Import in Module.ImportList do     begin       HookData.FuncName := Import.ToString;       HookData.RawVA := 0;        \/\/ \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u043c\u043f\u043e\u0440\u0442\u0430       if not AIat.ReadMemory(Import.ImportTableVA, AddrSize, @HookData.RemoteVA) then         Continue;        if Import.FuncName = EmptyStr then         HookData.Calculated := FRawModules.GetProcData(Import.LibraryName,           Import.Ordinal, Module.Image64, Exp, HookData.RemoteVA)       else         HookData.Calculated := FRawModules.GetProcData(Import.LibraryName,           Import.FuncName, Module.Image64, Exp, HookData.RemoteVA);        if HookData.Calculated then         HookData.RawVA := Exp.FuncAddrVA       else         if not CheckRemoteVA then         begin           DoModifyed(HookData);           Continue;         end;        if not CheckRemoteVA then       begin         \/\/ \u0435\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430, \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0435\u0451 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u0438\u0442\u044c         if Exp.ForvardedTo &lt;> EmptyStr then           if not FRawModules.GetProcData(Exp.ForvardedTo,             Module.Image64, Exp, HookData.RemoteVA) then           begin             HookData.Calculated := False;             HookData.ImportAdv.OriginalForvardedTo := Exp.OriginalForvardedTo;             HookData.ImportAdv.ForvardedTo := Exp.ForvardedTo;             DoModifyed(HookData);             Continue;           end           else           begin             HookData.RawVA := Exp.FuncAddrVA;             HookData.ImportAdv.OriginalForvardedTo := EmptyStr;             HookData.ImportAdv.ForvardedTo := EmptyStr;           end;         if not CheckRemoteVA then           DoModifyed(HookData);       end;     end;   finally     AIat.Free;   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0438\u0434\u0443\u0442 \u0442\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:<\/p>\n<ol>\n<li>\u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430<\/li>\n<li>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441 \u0444\u043b\u0430\u0433\u043e\u043c IMAGE_SUBSYSTEM_NATIVE<\/li>\n<li>\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 COM+ \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/li>\n<\/ol>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u044d\u0448, \u0442\u043e\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u043a\u044d\u0448 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0438 \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435 \u043d\u044e\u0430\u043d\u0441\u043e\u043c \u0447\u0442\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f Import Address Table \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e) \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0438\u0434\u0435\u0442 \u0446\u0438\u043a\u043b \u043f\u043e \u0432\u0441\u0435\u043c \u0437\u0430\u043f\u0438\u0441\u044f\u043c, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u043e\u0442 \u0432\u0441\u0435\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 FirstThunk (\u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 ImportTableVA), \u0430 \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e\u0431 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 (\u043f\u043e Ordinal \u0438\u043b\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438). <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u0448\u043b\u0430\u0441\u044c \u2014 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0438 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043d\u0430\u0448\u043b\u0430\u0441\u044c, \u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043a\u0430\u043b\u0431\u0435\u043a.<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u043d\u0430\u0448\u043b\u0430\u0441\u044c, \u043d\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u0438, \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043f\u043e\u043b\u044f ForvardedTo \u0438, \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043e, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c. <\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u0435\u0441\u043b\u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430 Windows XP \u0438\u043b\u0438 Vista \u0442\u043e \u0432\u0441\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0448\u0442\u0430\u0442\u043d\u043e. \u041e\u043d \u043d\u0435 \u0432\u044b\u0432\u0435\u0434\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f, \u043d\u043e\u2026 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0449\u0435\u043d \u043d\u0430 Windows 7 \u0438 \u0432\u044b\u0448\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/5y\/tm\/kc\/5ytmkccvyujmk6soua0ujgahx70.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/5y\/tm\/kc\/5ytmkccvyujmk6soua0ujgahx70.png\"\/><\/p>\n<p>  \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435 \u0441\u043c\u043e\u0433 \u043f\u043e\u0434\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435, \u043e \u0447\u0435\u043c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u0442\u0435\u043a\u0441\u0442 \u00abExport record missing\u00bb.<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0435\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u044d\u0442\u0438 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432\u0435\u0434\u0443\u0442 \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043d\u0430 \u0436\u0435\u0441\u0442\u043a\u043e\u043c \u0434\u0438\u0441\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u00abapi-ms-win-xxx.dll\u00bb \u0438\u043b\u0438 \u00abext-ms-win-xxx.dll\u00bb<\/p>\n<p>  \u0418 \u0442\u0430\u043a\u043e\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043a\u0430\u043a \u0443 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0442\u0430\u043a \u0438 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443: <\/p>\n<pre><code class=\"delphi\">Import modified imm32.dll -> kernel32.GetProcessMitigationPolicy, at address: 7641D0D4 Export record missing, present: 0000000075DECF40, forvarded to \"api-ms-win-core-processthreads-l1-1-1.GetProcessMitigationPolicy\" --> KernelBase.dll<\/code><\/pre>\n<p>  \u0421\u0430\u043c \u0438\u043c\u043f\u043e\u0440\u0442 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 kernel32.GetProcessMitigationPolicy, \u043d\u043e \u0441\u0430\u043c\u0430 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0438 \u0432\u0435\u0434\u0435\u0442 \u043d\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043f\u0438\u0441\u043a\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u00abapi-ms-win-core-processthreads-l1-1-1.dll\u00bb, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0430\u0434\u0440\u0435\u0441 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432\u0435\u0434\u0435\u0442 \u0432\u043d\u0443\u0442\u0440\u044c \u00abKernelBase.dll\u00bb.<\/p>\n<p>  \u0421\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u043c \u0441 \u044d\u0442\u0438\u043c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u043d\u0443 \u0430 \u0441\u0430\u043c \u043a\u043e\u0434 \u043a \u043f\u044f\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%205\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<h3>6. ApiSet \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u044b<\/h3>\n<p>  \u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Windows 7 \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b\u0430\u0441\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0438\u044f, \u0432 Windows \u0431\u044b\u043b\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u043e \u044f\u0434\u0440\u043e MinWin. \u0421\u043a\u0430\u0436\u0435\u043c \u0442\u0430\u043a \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0431\u043e\u0440\u043a\u0430 Windows \u0441 \u0441\u0430\u043c\u044b\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 OS \u043a\u0430\u043a Windows IoT, \u0432\u0437\u0430\u043c\u0435\u043d Embedded.<\/p>\n<p>  \u0427\u0430\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438\u0437 kernel32\/user32\/gdi32\/etc\u2026 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043d\u0430\u0431\u043e\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f. \u0410 \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u043e\u0439 \u043a\u043e\u0434 \u0431\u044b\u043b \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u0435\u043d, Microsoft \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>  \u0411\u0440\u0430\u043b\u0438\u0441\u044c \u0433\u0440\u0443\u043f\u043f\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 (CreateFile\/FindFirstFile\/etc&#8230;), \u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043b\u0438\u0441\u044c \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u00abapi-ms-win-core-file-l1-1-0.dll\u00bb. \u0418 \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u0432 Windows 7, \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0432 \u00abc:\\windows\\system32\\\u00bb \u0438 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c. \u0421\u0430\u043c\u0438 \u043e\u043d\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0438 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0438 \u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u044b\u043b\u0430 \u0432 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u0441\u0432\u043e\u0435\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u043e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0441 \u0438\u0445 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430\u043c\u0438 \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0438\u0445 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043b\u044e\u0441\u043e\u0432 \u043d\u0435 \u0434\u0430\u0432\u0430\u043b\u043e, \u0442.\u043a. \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0442\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0447\u0435\u0440\u0435\u0437 LoadLibrary \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0443 ERROR_DLL_INIT_FAILED, \u0430 \u0441\u0435\u0439\u0447\u0430\u0441, \u0432 Windows 11 \u044d\u0442\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0442, \u0434\u0430 \u043e\u043d\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<p>  \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0432\u0441\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u044f\u0434\u0440\u043e MinWin (\u0438\u0445 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0441\u043f\u0438\u0441\u043e\u043a), \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043d\u0435 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043c\u0435\u043d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442, \u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0438 \u0431\u044b\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435. \u0417\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u043e\u0434\u043c\u0435\u043d\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0449\u0438\u0435 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0441\u044f, \u0442.\u043a. \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0443 \u043d\u0435\u0433\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<p>  \u0410 \u0434\u0435\u043b\u0430\u0435\u0442 \u043e\u043d \u0442\u0430\u043a\u043e\u0439 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 ApiSet Map, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 apisetschema.dll \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 &#171;.apiset&#187; \u043f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043e\u0442\u043c\u0430\u043f\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c\u0430 \u0441\u0435\u043a\u0446\u0438\u044f. \u0418 \u0432\u043e\u0442 \u0444\u043e\u0440\u043c\u0430\u0442 \u044d\u0442\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441.<\/p>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043d\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u0440\u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430.<\/p>\n<ul>\n<li>\u0432\u0435\u0440\u0441\u0438\u044f \u0434\u0432\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Windows 7 \u0438 Windows 8<\/li>\n<li>\u0432\u0435\u0440\u0441\u0438\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Windows 8.1<\/li>\n<li>\u0432\u0435\u0440\u0441\u0438\u044f \u0448\u0435\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Windows 10 \u0438 Windows 11<\/li>\n<\/ul>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430 \u0432\u0441\u0435\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 OS, \u043e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0443\u043c\u0435\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u044d\u0442\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<p>  \u041d\u0443 \u0430 \u0432-\u0442\u0440\u0435\u0442\u044c\u0438\u0445, \u0434\u0430\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0435\u0451 \u0447\u0442\u0435\u043d\u0438\u044f \u0438\u0437 \u0447\u0443\u0436\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0435\u0451 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0443 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f. <\/p>\n<p>  \u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0430\u0434\u0440\u0435\u0441 \u043f\u0430\u043c\u044f\u0442\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043e\u0442\u043c\u0430\u043f\u043b\u0435\u043d\u043d\u044b\u0439 ApiSet \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432 \u0431\u043b\u043e\u043a\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (PEB), \u044d\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430. \u0422\u0430\u043a \u043a\u0430\u043a \u0447\u0442\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043c\u043e\u0436\u0435\u0442 (\u0438 \u0431\u0443\u0434\u0435\u0442) \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442\u0441\u044f \u0438 \u0441\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0441\u0435\u0433\u043e \u043b\u0438\u0448\u044c \u043a \u043f\u0430\u0440\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"delphi\">function TApiSetRedirector.GetPEBApiSet: Pointer; asm   {$IFDEF WIN32}   mov eax, fs:[30h]   mov eax, [eax + 38h]   {$ELSE}   mov rax, gs:[60h]   mov rax, [rax + 68h]   {$ENDIF} end;<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 FS (\u0438\u043b\u0438 GS \u0434\u043b\u044f 64 \u0431\u0438\u0442), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0431\u043b\u043e\u043a \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430 (TEB), \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b PEB (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f TEB->ProcessEnvironmentBlock \u0440\u0430\u0432\u043d\u043e 0\u044530 \u0438 0\u044560 \u0434\u043b\u044f 32 \u0438 64 \u0431\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f PEB->ApiSetMap (\u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 0\u044538 \u0438 0\u044568 \u0434\u043b\u044f 32 \u0438 64 \u0431\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e). <\/p>\n<p>  \u0421\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443 \u043e \u0434\u0432\u0443\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0438\u0445 \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>  1. \u0412\u0441\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0438\u0436\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 RVA \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u043d\u043e \u0431\u0430\u0437\u043e\u0439, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0434\u0435\u0442 \u043e\u0442\u0441\u0447\u0435\u0442 RVA \u0430\u0434\u0440\u0435\u0441\u0430, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0434\u0440\u0435\u0441 \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043a\u043e\u0434\u043e\u043c \u0432\u044b\u0448\u0435. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0447\u0438\u0441\u043b\u043e 0\u0445123, \u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0\u044530000, \u0442\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0447\u0442\u043e VA \u0430\u0434\u0440\u0435\u0441 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u0435\u043d 0\u044530123!<\/p>\n<p>  2. \u0412\u043e \u0432\u0441\u0435\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0442\u0440\u043e\u043a\u0438 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"delphi\">  TApiSetString = record     Offset: ULONG;     Length: USHORT;   end;<\/code><\/pre>\n<p>  \u0413\u0434\u0435 Offset \u2014 \u044d\u0442\u043e RVA \u0430\u0434\u0440\u0435\u0441 UNICODE \u0441\u0442\u0440\u043e\u043a\u0438 (\u043d\u0435 Ansi), \u0430 Length \u2014 \u0435\u0451 \u0434\u043b\u0438\u043d\u0430 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 (\u043d\u0435 \u0432 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445). <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0430\u0434\u0440\u0435\u0441\u0430 ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0441\u044f \u0432 \u043a\u0430\u043a\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435 \u043e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b, \u0437\u0430 \u044d\u0442\u043e \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0435 \u0438\u0437 \u0441\u0435\u0431\u044f LONG, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0432\u0435\u0440\u0441\u0438\u044f 2, 4 \u0438\u043b\u0438 6: <\/p>\n<pre><code class=\"delphi\">procedure TApiSetRedirector.Init; begin   FApiSetVer := PLONG(FApiSet)^;   case FApiSetVer of     2: Init2;     4: Init4;     6: Init6;   end; end;<\/code><\/pre>\n<p>  \u041d\u0430\u0447\u043d\u0443 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0437\u0430 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0434\u0432\u0430. <\/p>\n<p>  \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0447\u0435\u0442\u044b\u0440\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<p>  1. \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u044b:<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpace2 = record     Version,     Count: ULONG;   end;<\/code><\/pre>\n<p>  \u0421 \u043d\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c, \u043f\u043e\u043c\u0438\u043c\u043e \u0432\u0435\u0440\u0441\u0438\u0438, \u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0445\u0441\u044f \u0432 \u043d\u0435\u0439 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0435. <\/p>\n<p>  2. \u0421\u0440\u0430\u0437\u0443 \u0437\u0430 \u043d\u0435\u0439 \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 TApiSetNameSpaceEntry2, \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpaceEntry2 = record     Name: TApiSetString;     DataOffset: ULONG;   end;<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0435 Name, \u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0438\u0441\u043a\u043e\u043c\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430, \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0431\u044b\u0447\u043d\u043e \u0432\u043e\u0442 \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 (\u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 TApiSetString): \u00abMS-Win-Core-ErrorHandling-L1-1-0\u00bb. \u042d\u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0433\u043e \u0432\u0438\u0434\u0430:<\/p>\n<ul>\n<li>\u0438\u043b\u0438 \u00abapi-ms-win-core-errorhandling-l1-1-0.dll\u00bb<\/li>\n<li>\u0438\u043b\u0438 \u00abext-ms-win-core-errorhandling-l1-1-0.dll\u00bb<\/li>\n<\/ul>\n<p>\u042f \u043d\u0435 \u0441\u043c\u043e\u0433 \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443 \u043f\u0440\u0430\u0432\u0438\u043b\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043f\u0440\u0435\u0444\u0438\u043a\u0441, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u0442\u043e\u0440\u043e\u0439 (\u0438 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439) \u0432\u0435\u0440\u0441\u0438\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u0441 \u043a\u0430\u0436\u0434\u044b\u043c \u0438\u0437 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u043e\u0432. <\/p>\n<p>  \u041f\u043e\u043b\u0435 DataOffset \u2014 RVA \u0430\u0434\u0440\u0435\u0441 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"delphi\">  TApiSetValueEntry2 = record     NumberOfRedirections: ULONG;       end; <\/code><\/pre>\n<p>  \u041e\u043d\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u043d\u043e \u043f\u043e\u043b\u0435, \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430, \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043a\u0443\u0434\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 NumberOfRedirections:<\/p>\n<pre><code class=\"delphi\">  TApiSetValueEntryRedirection2 = record     Name: TApiSetString;     Value: TApiSetString;   end;<\/code><\/pre>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u0443\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u0421\u0430\u043c\u043e\u0435 \u043f\u0435\u0440\u0432\u043e\u0435 \u043f\u043e\u043b\u0435 Name \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f, \u043f\u043e \u0441\u0443\u0442\u0438, \u0444\u0438\u043b\u044c\u0442\u0440, \u0443\u0442\u043e\u0447\u043d\u044f\u044e\u0449\u0438\u0439 \u0432 \u043a\u0430\u043a\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u043b\u0438\u0431\u043e \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043b\u0438\u0431\u043e \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0432\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u043b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u0430\u043a\u0443\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442.<br \/>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/po\/bq\/lj\/pobqlj2g2psdmsy8gz74x_nlmu8.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/po\/bq\/lj\/pobqlj2g2psdmsy8gz74x_nlmu8.png\"\/><\/p>\n<p>  ApiSetValueEntry2 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0447\u0438\u0441\u043b\u043e \u0434\u0432\u0430, \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u043d\u0435\u0439 \u0438\u0434\u0443\u0442 \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u043f\u0440\u0438\u0447\u0435\u043c \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432 kernel32.dll (\u043f\u043e\u043b\u0435 Value), \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0432 kernelbase.dll, \u043f\u0440\u0438\u0447\u0435\u043c \u0443 \u0432\u0442\u043e\u0440\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0447\u0442\u043e Name \u0440\u0430\u0432\u0435\u043d kernel32.dll.<\/p>\n<p>  \u041a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, nsi.dll \u0438\u043c\u0435\u0435\u0442 \u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431 GetLastError \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 API-MS-Win-Core-ErrorHandling-L1-1-0.dll<\/p>\n<p>  \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043d\u0430 kernel32.dll, \u043d\u043e \u0438 \u0441\u0430\u043c kernel32.dll \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431 GetLastError (\u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0435\u0449\u0435 \u0438 \u0444\u043e\u0440\u0432\u0430\u0440\u0434 \u0438\u0434\u0435\u0442 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430), \u043f\u0440\u0438\u0447\u0435\u043c \u0438\u0437 \u0442\u043e\u0439-\u0436\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 API-MS-Win-Core-ErrorHandling-L1-1-0.dll.<\/p>\n<p>  \u0412\u043e\u0442 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0432 ApiSet \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0447\u0442\u043e kernel32.dll \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0435 \u0432 \u0441\u0430\u043c\u0443 \u0441\u0435\u0431\u044f, \u0430 \u0432 kernelbase.dll <\/p>\n<p>  \u0421\u0445\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u0435\u0440\u0435\u0432\u0430:<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpace2                          \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a       TApiSetNameSpaceEntry2                 \/\/ \u0432\u0438\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \"API-MS-Win-Core-Console-L1-1-0.dll\"   TApiSetNameSpaceEntry2                 \/\/ \u0432\u0438\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \"API-MS-Win-Core-DateTime-L1-1-0.dll\"   TApiSetNameSpaceEntry2                 \/\/ \u0432\u0438\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \"API-MS-Win-Core-Debug-L1-1-0.dll\"   TApiSetNameSpaceEntry2                 \/\/ \u0432\u0438\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \"API-MS-Win-Core-DelayLoad-L1-1-0.dll\"   TApiSetNameSpaceEntry2                 \/\/ \u0432\u0438\u0440\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \"API-MS-Win-Core-ErrorHandling-L1-1-0.dll\"       TApiSetValueEntry2                 \/\/ \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432        TApiSetValueEntryRedirection2  \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e   TApiSetValueEntryRedirection2  \/\/ \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430   ...<\/code><\/pre>\n<p>  \u0418 \u043a\u043e\u0434 \u0435\u0451 \u0447\u0442\u0435\u043d\u0438\u044f:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TApiSetRedirector.Init2<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TApiSetRedirector.Init2; ... begin   NameSpaceEntry := PApiSetNameSpaceEntry2(PByte(FApiSet) + SizeOf(TApiSetNameSpace2));   for I := 0 to PApiSetNameSpace2(FApiSet)^.Count - 1 do   begin     LibFrom := GetString(NameSpaceEntry.Name).ToLower;     ValueEntry := Pointer(PByte(FApiSet) + NameSpaceEntry.DataOffset);     EntryRedirection := Pointer(PByte(ValueEntry) + SizeOf(TApiSetValueEntry2));     for A := 0 to ValueEntry.NumberOfRedirections - 1 do     begin       Redirection := GetString(EntryRedirection.Value);       Key := LibFrom + GetString(EntryRedirection.Name);       AddRedirection(Key, Redirection);       Inc(EntryRedirection);     end;     Inc(NameSpaceEntry);   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u043d\u044e\u0430\u043d\u0441\u0430:<\/p>\n<ol>\n<li>\u0432\u0441\u0435 RVA \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 VA \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0441 \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u0441\u0430\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u044d\u0442\u0443 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044e \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u043b \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435, \u043d\u043e \u043d\u0430 \u0432\u0441\u044f\u043a\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439).<\/li>\n<li>\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430. \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u043d \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u043a\u0430\u043a \u0438\u043c\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0442.\u0435. \u00abapi-ms-win-core-errorhandling-l1-1-0\u00bb, \u0430 \u0447\u0430\u0441\u0442\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435\u043c \u0438\u043c\u0435\u043d\u0438 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438: \u00abapi-ms-win-core-errorhandling-l1-1-0kernel32.dll\u00bb<\/li>\n<\/ol>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u0433\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0434\u043b\u044f \u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0437\u0430 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0447\u0435\u0442\u044b\u0440\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 Windows 8.1<br \/>  \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u0432\u0438\u0434\u0435 \u0442\u0430\u043a\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b:<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpace4 = record     Version,     Size,     Flags,     Count: ULONG;   end;<\/code><\/pre>\n<p>  \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u043f\u043e\u043b\u044f Size, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0431\u0430\u0439\u0442\u0430\u0445, \u0438 \u043f\u043e\u043b\u0435 Flags \u2014 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 (\u043f\u043e \u0438\u0434\u0435\u0435) \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0444\u043b\u0430\u0433\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u0435 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b. \u041d\u0430 \u043c\u043e\u0438\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u0442\u0435\u043d\u0434\u0430\u0445 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b\u043e \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e. <\/p>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u0442\u0430\u043a\u0436\u0435 \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 TApiSetNameSpaceEntry4, \u0432 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpaceEntry4 = record     Flags: ULONG;     Name: TApiSetString;     Alias: TApiSetString;     DataOffset: ULONG;        end;<\/code><\/pre>\n<p>  \u0417\u0434\u0435\u0441\u044c \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0434\u0432\u0430 \u043d\u043e\u0432\u044b\u0445 \u043f\u043e\u043b\u044f, \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043d\u0435 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u044d\u0442\u043e Flags (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438\u0431\u043e \u0435\u0434\u0438\u043d\u0438\u0446\u0443, \u043b\u0438\u0431\u043e \u0442\u0440\u043e\u0439\u043a\u0443), \u0438 \u043f\u043e\u043b\u0435 Alias \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u043d\u043e\u0435 \u0438\u043c\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e). \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u0441\u0442\u0430\u0440\u044b\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0430\u043a\u0436\u0435, \u0442.\u0435. DataOffset \u2014 \u044d\u0442\u043e RVA \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<\/p>\n<pre><code class=\"delphi\">  TApiSetValueEntry4 = record     Flags,     NumberOfRedirections: ULONG;       end;<\/code><\/pre>\n<p>  \u041e\u043f\u044f\u0442\u044c, \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0435 \u0441 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u0444\u043b\u0430\u0433\u043e\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u2014 \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e (\u043d\u0430 \u0442\u0435\u0441\u0442\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e).<\/p>\n<p>  \u041d\u0443 \u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u043d\u0438\u043c, \u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 ApiSet, \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432:<\/p>\n<pre><code class=\"delphi\">  TApiSetValueEntryRedirection4 = record     Flags: ULONG;     Name: TApiSetString;     Value: TApiSetString;   end;<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0444\u043b\u0430\u0433\u0430 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0435\u0433\u0434\u0430 \u0440\u0430\u0432\u0435\u043d \u043d\u0443\u043b\u044e), \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u043e\u0441\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0438 \u043a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u043d\u0438\u0447\u0435\u043c \u043d\u0435 \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0438 \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u043c\u0438 \u043d\u0438 \u043d\u0430 \u0447\u0442\u043e, \u043f\u043e\u043b\u044f\u043c\u0438. <\/p>\n<p>  \u0410 \u0432\u043e\u0442 ApiSet \u0432\u0435\u0440\u0441\u0438\u0438 \u0448\u0435\u0441\u0442\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0448\u0435\u043b \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 Windows 10 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 Windows 11, \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u0445\u0438\u0442\u0440\u0435\u0435.<br \/>  \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpace6 = record     Version,                     Size,                        Flags,                       Count,                       EntryOffset,                 HashOffset,                  HashFactor: ULONG;         end;<\/code><\/pre>\n<p>  \u041f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438\u0441\u044c \u0442\u0440\u0438 \u043f\u043e\u043b\u044f:<\/p>\n<ol>\n<li>\u041f\u043e\u043b\u0435 EntryOffset, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f RVA \u0430\u0434\u0440\u0435\u0441\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432. \u0420\u0430\u043d\u044c\u0448\u0435 \u043e\u043d\u0438 \u0448\u043b\u0438 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c (\u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0432 \u0448\u0435\u0441\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u043e\u0436\u0435 \u0438\u0434\u0443\u0442 \u0441\u0440\u0430\u0437\u0443 \u0437\u0430 \u043d\u0438\u043c), \u043d\u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0447\u0442\u043e \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u0441\u044f, \u0438 \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u044b \u043f\u043e \u043b\u044e\u0431\u043e\u043c \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443.<\/li>\n<li>\u041f\u043e\u043b\u0435 HashOffset, \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u0435 \u0434\u043b\u044f ApiSet \u0442\u0430\u0431\u043b\u0438\u0446, \u043c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442 \u0440\u0435\u0448\u0438\u043b\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e \u0432 \u043d\u0435\u0451 \u0445\u044d\u0448\u0438 \u0438\u043c\u0435\u043d \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u042d\u0442\u043e \u043f\u043e\u043b\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 RVA \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0445\u044d\u0448 \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438. \u0415\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e \u043c\u043d\u0435 \u044d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u043d\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043a\u043e\u0434\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043b\u043e\u0432\u0430\u0440\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0438\u043c\u0435\u043d \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c \u043a \u043b\u044e\u0431\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 ApiSet, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0432 \u043a\u043e\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/li>\n<li>HashFactor \u2014 \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0447\u0438\u0441\u043b\u043e \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u0445\u044d\u0448, \u0442\u043e\u0436\u0435 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/li>\n<\/ol>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0437\u0430 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u043e\u043c, \u043d\u0443 \u0435\u0441\u043b\u0438 \u0431\u044b\u0442\u044c \u0442\u043e\u0447\u043d\u0435\u0435, \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 EntryOffset \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440:<\/p>\n<pre><code class=\"delphi\">  TApiSetNameSpaceEntry6 = record     Flags: ULONG;                Name: TApiSetString;         HashedLength: ULONG;         ValueOffset,                 ValueCount: ULONG;         end;<\/code><\/pre>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043e\u043b\u0435 Flags \u2014 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0445\u0440\u0430\u043d\u0438\u0442 \u0444\u043b\u0430\u0433 Sealed \u0440\u0430\u0432\u043d\u044b\u0439 \u0435\u0434\u0438\u043d\u0438\u0446\u0435, \u0437\u0430 \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442, \u043d\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u043d\u043e \u043e\u043d \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0443 \u0432\u0441\u0435\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439.<\/li>\n<li>\u041f\u043e\u043b\u0435 Name \u2014 \u044d\u0442\u043e \u0438\u0441\u043a\u043e\u043c\u043e\u0435 \u0438\u043c\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041f\u0440\u0438\u0447\u0435\u043c \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0438 \u043e\u0442 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439, \u043e\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043e \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u0440\u0435\u0444\u0438\u043a\u0441\u0430\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0442 \u0442\u0430\u043a: \u00abapi-ms-win-core-errorhandling-l1-1-3\u00bb<\/li>\n<li>\u041f\u043e\u043b\u0435 HashedLength \u2014 \u0430 \u0432\u043e\u0442 \u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u043c\u0435\u043d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u0431\u0430\u0439\u0442\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0445\u044d\u0448. \u041e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e\u0435 \u043f\u043e\u043b\u0435, \u0442.\u043a. \u0438\u043c\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u044e \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 errorhandling \u0432 Windows 7 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u043b\u0441\u044f \u0446\u0438\u0444\u0440\u043e\u0439 \u043d\u043e\u043b\u044c, \u043d\u0430 Windows 8.1 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0432\u0435 \u0437\u0430\u043f\u0438\u0441\u0438, \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043d\u043e\u043b\u044c \u0438 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043e\u0434\u0438\u043d, \u0432 Windows 10 \u043e\u043d\u0430 \u0448\u043b\u0430 \u0441 \u0446\u0438\u0444\u0440\u043e\u0439 \u0434\u0432\u0430 (\u0432 \u0441\u0430\u043c\u044b\u0445 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u0431\u043e\u0440\u043a\u0430\u0445), \u0430 \u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0434\u0435\u0442 \u0437\u0430 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0442\u0440\u0438, \u043a\u0430\u043a \u0438 \u0432 Windows 11. \u0421\u0442\u0430\u0440\u044b\u0435 \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u043a \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 HashedLength \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043d\u0430\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0431\u0435\u0437 \u0443\u0447\u0435\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0434\u0430\u0432\u0430\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0441\u0442\u0430\u0440\u044b\u043c \u0441\u0431\u043e\u0440\u043a\u0430\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c.<\/li>\n<li>\u041f\u043e\u043b\u0435 ValueOffset \u2014 \u0430\u043d\u0430\u043b\u043e\u0433 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043f\u043e\u043b\u044f DataOffset, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430<\/li>\n<li>\u041f\u043e\u043b\u0435 ValueCount \u2014 \u043d\u043e\u0432\u043e\u0435 \u043f\u043e\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u0442\u0430\u0440\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 TApiSetValueEntry\u0425 \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432 \u0434\u043b\u044f \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438.<\/li>\n<\/ul>\n<p>\u0410 \u0432\u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432 \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u0438 \u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043f\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u043f\u043e\u043b\u0435\u0439 \u0442\u0430\u043a\u0430\u044f-\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 \u0447\u0435\u0442\u044b\u0440\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 ApiSet \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041d\u043e \u0438 \u0432 \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430 (\u043f\u043e\u043b\u0435 Value), \u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043e\u0441\u043e\u0431\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u043b\u0441\u044f \u0434\u0440\u0443\u0433\u043e\u0439 \u0442\u0438\u043f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430 (\u043f\u043e\u043b\u0435 Name), \u0432 \u0448\u0435\u0441\u0442\u043e\u0439 \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d \u043f\u0443\u0441\u0442\u044b\u043c.<\/p>\n<p>  \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044f\u0434\u0440\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 ntoskrnl.exe \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u00abext-ms-win-ntos-ksecurity-l1-1\u00bb \u043d\u0443 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u0443\u0433\u0443\u0431\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u044f\u0434\u0440\u0430. \u0422\u0430\u043a\u043e\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0444\u0430\u0439\u043b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0435\u043d \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (\u044f \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b \u043f\u0440\u043e \u044d\u0442\u043e \u0432 \u043f\u044f\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435) \u043d\u043e \u0435\u0433\u043e \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u0430 \u0432 \u0441\u0430\u043c\u043e\u0433\u043e \u0441\u0435\u0431\u044f \u043d\u0430 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0441 IMAGE_SUBSYSTEM_NATIVE \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u044b \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u0443\u0441\u0442\u044b\u0435. <\/p>\n<p>  \u0420\u0430\u0437 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430, \u043f\u043e \u0441\u0443\u0442\u0438, \u043d\u0435 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c, \u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0435\u0451 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044e \u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0435\u0451 \u043f\u043e\u043a\u0430\u0436\u0443 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0445\u044d\u0448 \u0438\u043c\u0435\u043d\u0438.<\/p>\n<p>  \u041e\u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438.<\/p>\n<pre><code class=\"delphi\">  TApiSetHashEntry6 = record     Hash,     Index: ULONG;   end;<\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f \u0448\u0435\u0441\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0442\u0430\u043a\u043e\u0439:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TApiSetRedirector.Init6<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TApiSetRedirector.Init6; ... begin   NameSpaceEntry := PApiSetNameSpaceEntry6(PByte(FApiSet) +     PApiSetNameSpace6(FApiSet)^.EntryOffset);   for I := 0 to PApiSetNameSpace6(FApiSet)^.Count - 1 do   begin     LibFrom := GetString(NameSpaceEntry.Name);     SetLength(LibFrom, NameSpaceEntry.HashedLength div SizeOf(Char));     ValueEntry := Pointer(PByte(FApiSet) + NameSpaceEntry.ValueOffset);     for A := 0 to NameSpaceEntry.ValueCount - 1 do     begin       Redirection := GetString(ValueEntry.Value);       Key := LibFrom + GetString(ValueEntry.Name);       if not Redirection.IsEmpty then       begin         Inc(FUniqueCount);         FData.AddOrSetValue(Key, Redirection);       end;       Inc(ValueEntry);     end;     Inc(NameSpaceEntry);   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u042d\u0442\u043e, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u0441\u0435 \u043f\u043e \u043f\u043e\u0432\u043e\u0434\u0443 \u0447\u0442\u0435\u043d\u0438\u044f, \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c ApiSet \u043a \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0443 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 TRawPEImage.<\/p>\n<p>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0434\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u043d\u0430\u0440\u0443\u0436\u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">RemoveSuffix \u0438 SchemaPresent<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TApiSetRedirector.RemoveSuffix(const Value: string): string; var   LastSuffixIndex: Integer; begin   if FApiSetVer = 6 then   begin     LastSuffixIndex := Value.LastDelimiter('-');     if LastSuffixIndex > 0 then       Exit(Copy(Value, 1, LastSuffixIndex));   end;   Result := Value; end;  function TApiSetRedirector.SchemaPresent(const LibName: string;   var RedirectTo: string): Boolean; var   Tmp: string; begin   if FData.Count = 0 then Exit(False);   Tmp := RemoveSuffix(RedirectTo.ToLower);   \/\/ \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u043e\u0439 \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435   Result := FData.TryGetValue(Tmp + LibName.ToLower, RedirectTo);   \/\/ \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435\u0442 \u0437\u0430\u043f\u0438\u0441\u0438, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e   if not Result then     Result := FData.TryGetValue(Tmp, RedirectTo); end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f RemoveSuffix \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0438\u0437\u044a\u044f\u0442\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u043d\u043e\u0439 \u043c\u0435\u0442\u043a\u0438 \u0438\u0437 \u0438\u043c\u0435\u043d\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f ApiSet \u0432\u0435\u0440\u0441\u0438\u0438 \u0448\u0435\u0441\u0442\u044c, \u0430 SchemaPresent \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u043f\u043e\u0438\u0441\u043a \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0438\u043c\u0435\u043d\u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u0441 \u0438\u043c\u0435\u043d\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0438\u0434\u0435\u0442 \u0432\u044b\u0437\u043e\u0432 (\u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0433\u0434\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442, \u0430 \u043d\u0435 \u043e\u0431\u0449\u0438\u0439).<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u043e \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u0432 \u043f\u043e\u043b\u0435 ImageExportDirectory.Name, \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u043d\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442, \u0430 \u043d\u0435 \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0438\u043c\u0435\u043d\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 (\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0430 \u2014 \u043e \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435).<\/p>\n<p>  \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e ApiSet \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u0440\u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435 TRawScanner.InitFromProcess \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 ApiSetRedirector.LoadApiSet; <\/p>\n<p>  \u0412 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u043e\u043c:<\/p>\n<pre><code class=\"delphi\">procedure TRawPEImage.InternalProcessApiSetRedirect(const LibName: string;   var RedirectTo: string); var   ForvardLibraryName, FuncName: string; begin   if not ParceForvardedLink(RedirectTo, ForvardLibraryName, FuncName) then     Exit;   ForvardLibraryName := ChangeFileExt(ForvardLibraryName, '');   if ApiSetRedirector.SchemaPresent(LibName, ForvardLibraryName) then     RedirectTo := ChangeFileExt(ForvardLibraryName, '.') + FuncName; end;<\/code><\/pre>\n<p>  \u0415\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0432\u0435\u0434\u0443\u0449\u0438\u0435 \u0432 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430 \u0432\u044b\u0437\u043e\u0432\u044b, \u0438\u0434\u0443\u0449\u0438\u0435 \u043a \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445:  <\/p>\n<blockquote><p>LibName = &#8216;KERNEL32.dll&#8217;<br \/>  RedirectTo = &#8216;api-ms-win-core-libraryloader-l1-1-0.AddDllDirectory&#8217;<\/p><\/blockquote>\n<p>RedirectTo \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0432 &#8216;kernelbase.AddDllDirectory&#8217;<br \/>  \u041d\u0443 \u0430 \u0432\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d \u0432 \u0434\u0432\u0443\u0445 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0430\u0445 ProcessApiSetRedirect \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u0438\u043c\u043f\u043e\u0440\u0442 \u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442.<br \/>  \u0422\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043a\u043e\u0434 \u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u0438 \u0432\u044b\u0432\u0435\u043b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u0438\u0441\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u044b. <\/p>\n<p>  \u041d\u043e \u044d\u0442\u043e \u0435\u0449\u0435 \u043d\u0435 \u0432\u0441\u0435 \u2014 \u0435\u0441\u0442\u044c \u0435\u0449\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0438 \u0435\u0451 \u0442\u043e\u0436\u0435 \u043d\u0443\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c. <\/p>\n<p>  \u041a\u043e\u0434 \u043a \u0448\u0435\u0441\u0442\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%206\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<h3>7. \u041e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442<\/h3>\n<p>  \u041a\u0430\u043a \u043c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 PE \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0443\u0434\u0440\u0438\u043b\u0438, \u043e\u043d \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u0435\u043d, \u0432\u0435\u0434\u044c \u0435\u0441\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u0430\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f (\u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0446\u0435\u043b\u0438\u043a\u043e\u043c) \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u042d\u0442\u043e\u0442 \u0433\u0438\u0431\u043a\u0438\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0437\u0430\u0447\u0435\u043c-\u0442\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0438 \u0432 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u043c\u0435\u043d\u0435\u0435 \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430. \u0415\u0433\u043e \u0441\u0443\u0442\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u2014 \u0432 PE \u0444\u0430\u0439\u043b\u0435 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u0441\u0442\u0440\u043e\u0438\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043e\u043a \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0431 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u00ab\u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445\u00bb \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438 \u044d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0431\u0435\u0437 \u0432\u044b\u0434\u0430\u0447\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u00abThe procedure entry point {%FuncName%} could not be located in the dynamic link library {%LibName%}\u00bb.<\/p>\n<p>  \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043a\u043e\u0434 \u0438\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u041f\u0440\u0438\u0447\u0435\u043c \u0432 Microsoft Visual Studio \u044d\u0442\u043e \u0432\u0441\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0438 \u043a\u043e\u0434 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043a\u0430\u043a \u0434\u043b\u044f \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/build\/reference\/understanding-the-helper-function\" rel=\"nofollow noopener noreferrer\">\u0443\u0437\u043d\u0430\u0442\u044c \u0432 MSDN<\/a>.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0432 Delphi \u0441 \u044d\u0442\u0438\u043c \u0432\u0441\u0435 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0441\u0432\u043e\u0439 \u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c, \u043a\u0430\u043a \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0443\u0432\u044b \u043d\u0435 \u0443\u0434\u0430\u0441\u0442\u0441\u044f (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0430\u0441\u043c \u043a\u043e\u0434\u0435), \u0442.\u043a. \u043e\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c delayhlp.cpp (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f \u043f\u043e\u0434\u043e\u0437\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u0430\u043a\u043e\u0439-\u0436\u0435 \u0430\u043d\u0430\u043b\u043e\u0433 \u0443 MSVC). \u041f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043a \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0435\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u043e\u0448\u0438\u0431\u043a\u0430\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432 \u0440\u0430\u043d\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 Delphi \u0432 \u043a\u043e\u0434\u0435 _delayLoadHelper \u0431\u044b\u043b\u0430 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0430 \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0438\u043a\u0430\u043a \u043d\u0435\u043b\u044c\u0437\u044f \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u043b\u044f 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u0441\u0431\u043e\u0440\u043e\u043a. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u043a\u043e\u0434 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u0431\u0430 \u043f\u0440\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0434\u0440\u0435\u0441\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b \u043d\u0430 \u0441\u0442\u0435\u043a\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b XMM0..XMM3, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439. \u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437-\u0437\u0430 \u0438\u0445 \u043f\u043e\u0440\u0447\u0438, \u0442\u0430\u043a \u043a\u0430\u043a GetProcAddress \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0430\u043c\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432. <\/p>\n<p>  \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 Wine, \u0437\u043d\u0430\u044f \u043e\u0431 \u044d\u0442\u043e\u0439 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0442\u0447 \u0432 \u043e\u0431\u0432\u044f\u0437\u043a\u0435 kernel:<\/p>\n<p>  <a href=\"https:\/\/gitlab.winehq.org\/wine\/wine\/-\/blob\/master\/dlls\/kernel32\/module.c\" rel=\"nofollow noopener noreferrer\">https:\/\/gitlab.winehq.org\/wine\/wine\/-\/blob\/master\/dlls\/kernel32\/module.c <\/a><\/p>\n<p>  \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u044d\u0442\u043e \u043b\u0438\u0440\u0438\u043a\u0430, \u0435\u0441\u043b\u0438 \u043e\u0433\u0440\u0443\u0431\u0438\u0442\u044c, \u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0437\u043e\u0432\u0435 GetModuleHandle\/LoadLibrary + GetProcAddress \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043f\u043e\u043b\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0437\u0430\u043c\u0435\u043d\u044f\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043d\u0430 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u044b\u0439 \u0440\u0430\u0437 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u043b \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0441\u044f \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0442\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u0443\u0436\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043c\u0438\u043d\u0443\u044f \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0430\u0442\u044c\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043f\u0440\u0438\u0447\u0435\u043c \u043d\u0430\u0434\u043e \u0441\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0447\u0442\u043e \u00ab\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445\u00bb \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u0432\u0430: \u0430\u0434\u0440\u0435\u0441 \u043a\u043e\u0434\u0430 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0430\u0434\u0440\u0435\u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  \u0420\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u0430\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043c\u0430\u0441\u0441\u0438\u0432 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432:<\/p>\n<pre><code class=\"delphi\">  TImgDelayDescr = record     grAttrs,                \/\/ attributes     rvaDLLName,             \/\/ RVA to dll name     rvaHmod,                \/\/ RVA of module handle     rvaIAT,                 \/\/ RVA of the IAT     rvaINT,                 \/\/ RVA of the INT     rvaBoundIAT,            \/\/ RVA of the optional bound IAT     rvaUnloadIAT,           \/\/ RVA of optional copy of original IAT     dwTimeStamp: DWORD;     \/\/ 0 if not bound,                             \/\/ O.W. date\/time stamp of DLL bound to (Old BIND)   end;<\/code><\/pre>\n<p>   \u2014 \u041f\u043e\u043b\u0435 grAttrs, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0444\u043b\u0430\u0433 \u0442\u0438\u043f\u0430 \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0435\u0439 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430.<\/p>\n<ol>\n<li>\u0410\u0434\u0440\u0435\u0441\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0434\u0432\u0443\u0445 \u0432\u0438\u0434\u0430\u0445:<\/li>\n<li>\u0412 \u0432\u0438\u0434\u0435 RVA, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u043e\u043b\u0435 grAttrs \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e dlattrRva (\u0440\u0430\u0432\u043d\u043e\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u0435).<\/li>\n<li>\u0412 \u0432\u0438\u0434\u0435 VA \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f (\u043f\u043e\u043b\u0435 grAttrs \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e), \u043f\u0440\u0438\u0447\u0435\u043c \u044d\u0442\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 \u0438\u0434\u0442\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e ImageBase \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 PE \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0438, \u0435\u0441\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u0434\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0431\u0430\u0437\u044b.<\/li>\n<\/ol>\n<p>  \u0422.\u0435. \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u043e\u0442 \u0442\u0430\u043a\u0430\u044f \u0443\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f:<\/p>\n<pre><code class=\"delphi\">  function GetRva(Value: ULONG_PTR64): ULONG_PTR64;   const     dlattrRva = 1;   begin     if DelayDescr.grAttrs = dlattrRva then       Result := Value     else       Result := Value - NtHeader.OptionalHeader.ImageBase;   end;<\/code><\/pre>\n<p>  \u0421\u0443\u0434\u044f \u043f\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0432 MSDN, RVA \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0441 VC 7.0, \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u0438\u0441\u0430\u043b\u0438 \u043a\u0430\u043a \u0435\u0441\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u044f\u043c\u044b\u0445 VA \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439. \u041d\u0443 \u0430 \u0432 Delphi \u0441\u0440\u0430\u0437\u0443 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u044e\u0442 \u0432 RVA \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0437\u0443, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0430 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c. <\/p>\n<ul>\n<li>\u041f\u043e\u043b\u0435 rvaDLLName, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0438\u043c\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043c\u043f\u043e\u0440\u0442.<\/li>\n<li>\u041f\u043e\u043b\u0435 rvaHmod \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043f\u043e\u043b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 hInstance \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043a\u043e\u0434\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u043b\u0438 \u0443\u0436\u0435 \u0442\u0430\u043a\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442. \u0415\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0438 \u043f\u043e\u0437\u0436\u0435 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u0430, \u043f\u043e\u043b\u0435 \u043e\u0431\u043d\u0443\u043b\u044f\u0435\u0442\u0441\u044f. \u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u043d\u043e \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0435\u0441\u043b\u0438 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0438\u043d\u0441\u0442\u0430\u043d\u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0447\u0435\u0440\u0435\u0437 GetModuleHandle \u0438 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043b \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e.<\/li>\n<li>\u041f\u043e\u043b\u0435 rvaIAT, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0443\u0434\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u043c. \u0420\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0438\u0437 \u043f\u043e\u043b\u044f rvaINT.<\/li>\n<li>\u041f\u043e\u043b\u0435 rvaINT, \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u043c\u0435\u043d \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0442.\u043a. \u043e\u043d, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 rvaIAT \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0441\u0442\u044b\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u0440\u0430\u0432\u043d\u044b\u043c \u043d\u0443\u043b\u044e. \u0422\u0430\u043a-\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u044d\u0442\u043e\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043c\u043e\u0436\u0435\u0442 \u043b\u0435\u0436\u0430\u0442\u044c Ordinal \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043c\u0435\u043d\u0438, \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u0435-\u0436\u0435 \u043c\u0430\u0441\u043a\u0438 IMAGE_ORDINAL_FLAG64 \u0438 IMAGE_ORDINAL_FLAG32.<\/li>\n<li>\u041f\u043e\u043b\u0435 rvaBoundIAT, \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 rvaIAT \u0447\u0435\u0440\u0435\u0437 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442, \u043d\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u043d\u0435 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u043e\u0441\u044c \u0438 \u0431\u0443\u0444\u0435\u0440, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u044b\u043b \u043f\u0443\u0441\u0442.<\/li>\n<li>rvaUnloadIAT, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043c\u0430\u0441\u0441\u0438\u0432, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 rvaINT \u043f\u0440\u0438 \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b \u0438\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422.\u0435. \u0435\u0441\u043b\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0434\u0435\u0441\u044f\u0442\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445, \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0440\u043e\u0432\u043d\u043e \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u043a\u043e\u0434, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0441\u0431\u0440\u043e\u0441 \u043f\u043e\u043b\u0435\u0439 rvaINT \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e \u043d\u0430 \u043a\u043e\u0434 \u0438\u0445 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/li>\n<li>dwTimeStamp, \u043f\u043e\u043b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0443 (rvaBoundIAT) \u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/li>\n<\/ul>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0434\u0435\u043c\u043e\u043f\u0440\u0438\u043c\u0435\u0440\u0430:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/p_\/of\/xt\/p_ofxtumcbsky3lk1uajqix7xxq.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/p_\/of\/xt\/p_ofxtumcbsky3lk1uajqix7xxq.png\"\/><\/p>\n<p>  \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u044b rvaIAT \u043e\u0442 \u0432\u0441\u0435\u0445 \u0442\u0440\u0435\u0445 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u044b \u0432 \u043e\u0434\u0438\u043d \u0441\u043f\u043b\u043e\u0448\u043d\u043e\u0439 (\u043b\u0435\u0432\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430 DIAT), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u043e rvaINT (\u043f\u0440\u0430\u0432\u0430\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430 DINT). \u041d\u0443 \u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0430 kernel32.dll \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430, \u044d\u0442\u043e \u0443\u0436\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0442\u0430\u043a \u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0442\u0430\u043a\u043e\u0439 \u0432\u043e\u0442 \u043d\u044e\u0430\u043d\u0441.<\/p>\n<p>  \u0414\u043b\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0451 \u0430\u0434\u0440\u0435\u0441:<\/p>\n<pre><code class=\"delphi\">  with FNtHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT] do   begin     FDelayDir.VirtualAddress := RvaToVa(VirtualAddress);     FDelayDir.Size := Size;   end;<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0447\u0442\u0435\u043d\u0438\u044f:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.LoadDelayImport<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.LoadDelayImport(Raw: TStream): Boolean; ... begin   Result := False;   Raw.Position := VaToRaw(DelayImportDirectory.VirtualAddress);   if Raw.Position = 0 then Exit;    IntData := 0;   DataSize := IfThen(Image64, 8, 4);   ZeroMemory(@ImportChunk, SizeOf(TImportChunk));   ImportChunk.Delayed := True;   OrdinalFlag := IfThen(Image64, IMAGE_ORDINAL_FLAG64, IMAGE_ORDINAL_FLAG32);    Raw.ReadBuffer(DelayDescr, SizeOf(TImgDelayDescr));   while DelayDescr.rvaIAT &lt;> 0 do   begin     NextDescriptorRawAddr := Raw.Position;      Raw.Position := RvaToRaw(GetRva(DelayDescr.rvaDLLName));     if Raw.Position = 0 then Exit;          ImportChunk.OrigLibraryName := ReadString(Raw);     ProcessApiSetRedirect(ImageName, ImportChunk);      IAT := GetRva(DelayDescr.rvaIAT);     INT := GetRva(DelayDescr.rvaINT);     repeat       Raw.Position := RvaToRaw(INT);;       if Raw.Position = 0 then Exit;       Raw.ReadBuffer(IntData, DataSize);          if IntData &lt;> 0 then       begin         if IntData and OrdinalFlag = 0 then         begin           Raw.Position := RvaToRaw(GetRva(IntData));           if Raw.Position = 0 then Exit;           Raw.ReadBuffer(ImportChunk.Ordinal, SizeOf(Word));           ImportChunk.FuncName := ReadString(Raw);         end         else         begin           ImportChunk.FuncName := EmptyStr;           ImportChunk.Ordinal := IntData and not OrdinalFlag;         end;         ImportChunk.ImportTableVA := RvaToVa(IAT);          Raw.Position := VaToRaw(ImportChunk.ImportTableVA);         if Raw.Position = 0 then Exit;         Raw.ReadBuffer(ImportChunk.DelayedIATData, DataSize);            FImport.Add(ImportChunk);         Inc(IAT, DataSize);         Inc(INT, DataSize);       end;     until IntData = 0;       Raw.Position := NextDescriptorRawAddr;     Raw.ReadBuffer(DelayDescr, SizeOf(TImgDelayDescr));   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0422\u0430\u043a-\u0436\u0435 \u043a\u0430\u043a \u0438 \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0438 \u0444\u043b\u0430\u0433\u043e\u0432 \u0434\u043b\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Ordinal \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0438\u0434\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u0432 \u0438 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u0430 \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 ProcessApiSetRedirect. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0430 \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u0441\u0441\u0438\u0432 rvaINT \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 rvaIAT (\u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u044e \u2014 \u043e\u043d\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b). <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 TRawPEImage.LoadFromImage \u0438 \u0432\u043d\u0435\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043a\u043e\u0434 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430.<\/p>\n<pre><code class=\"delphi\">  function CheckRemoteVA: Boolean;   begin     if Import.Delayed then     begin       if HookData.Calculated then         Result :=           (HookData.RemoteVA = Import.DelayedIATData) or           (HookData.RemoteVA = HookData.RawVA)       else         Result := HookData.RemoteVA = Import.DelayedIATData;     end     else       Result := HookData.Calculated and         (HookData.RemoteVA = HookData.RawVA);   end;    ...        HookData.RemoteVA := 0;       if Import.Delayed then         HookData.RawVA := Import.DelayedIATData       else         HookData.RawVA := 0;<\/code><\/pre>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0438 \u0432 CheckRemoteVA \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u043e\u0435 \u043f\u043e\u043b\u0435 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0434\u043d\u043e \u0438\u0437 \u0434\u0432\u0443\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043b\u0438\u0431\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0432\u043d\u043e Import.DelayedIATData) \u043b\u0438\u0431\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e (HookData.RawVA \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0441\u0440\u0435\u0434\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a). <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0441\u043b\u0435\u0433\u043a\u0430 \u0443\u0434\u0438\u0432\u0438\u0442:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/e0\/be\/35\/e0be35arpczb1z3nxiquznsnqr8.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/e0\/be\/35\/e0be35arpczb1z3nxiquznsnqr8.png\"\/><\/p>\n<p>  \u041d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u0430.<\/p>\n<p>  \u041c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 IGNORE_RELOCATIONS \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u043e\u0434\u0443\u043b\u044f RawScanner.ModulesData.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043d\u0430 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 \u0442\u0435\u043c \u0447\u0438\u0441\u043b\u0430\u043c \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0442\u0435\u043b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0442\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/fx\/lj\/mf\/fxljmf3vsr23hep35fnankuf6os.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/fx\/lj\/mf\/fxljmf3vsr23hep35fnankuf6os.png\"\/><\/p>\n<p>  \u0410 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 rvaIAT \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430 \u043a\u043e\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432 VA \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438, \u0442.\u0435. \u0441 \u0443\u0447\u0435\u0442\u043e\u043c \u0431\u0430\u0437\u044b \u043c\u043e\u0434\u0443\u043b\u044f. \u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u044d\u0442\u043e \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0432\u0438\u0434\u043d\u043e, \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0\u0445762D0000, \u043d\u043e \u0432 PE \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u0435\u0451 \u0431\u0430\u0437\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043a\u0430\u043a 0\u04456B800000 \u043e\u0442\u0441\u044e\u0434\u0430 \u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0443 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0438\u0434\u0435\u0442 \u043f\u0440\u043e\u043c\u0430\u0445. <\/p>\n<p>  \u0412\u044b\u0439\u0442\u0438 \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438, \u043d\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c, \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0432 \u0430\u0434\u0440\u0435\u0441\u0430 \u0440\u0443\u043a\u0430\u043c\u0438 \u0438\u0437 \u0441\u0442\u0430\u0440\u043e\u0439 ImageBase \u0432 \u043d\u043e\u0432\u0443\u044e, \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u2014 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0432 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 IMAGE_DIRECTORY_ENTRY_BASERELOC. <\/p>\n<p>  \u041a\u0430\u043a \u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442: \u0432 \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u0430\u044f VA \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u044f, \u043f\u0440\u0438\u0447\u0435\u043c \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u044f\u043c\u043e \u0432 \u043a\u043e\u0434\u0435 \u0442\u0435\u043b\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0433\u0434\u0435 \u043d\u0430\u043b\u0435\u0442\u0443 \u0443\u0436\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u0431\u0430\u0437 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0432\u043e\u0442 \u0442\u0443\u0442 \u0438 \u0432\u044b\u0440\u0443\u0447\u0430\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435.<\/p>\n<p>  \u0413\u0440\u0443\u0431\u043e \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0432 4096 \u0431\u0430\u0439\u0442 (\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b 0..0xFFF), \u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0432\u0441\u0435\u0445 \u0442\u0430\u043a\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c \u0432 \u043d\u0438\u0445 (\u0432 \u044d\u0442\u043e\u043c-\u0436\u0435 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435) \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0431\u0430\u0437\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430. <\/p>\n<p>  \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 IMAGE_DIRECTORY_ENTRY_BASERELOC \u0438\u0434\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440: <\/p>\n<pre><code class=\"delphi\">  TImageBaseRelocation = record     VirtualAddress: DWORD;     SizeOfBlock: DWORD;   end;<\/code><\/pre>\n<p>  \u041f\u043e\u043b\u0435 VirtualAddress, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 RVA \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0430\u0434\u0440\u0435\u0441\u0430 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0435 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u0438 \u0431\u0430\u0437\u044b.<\/p>\n<p>  \u041f\u043e\u043b\u0435 SizeOfBlock \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 (\u0432 \u0431\u0430\u0439\u0442\u0430\u0445) \u0432\u0441\u0435\u0445 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u043b\u044e\u0441 \u0440\u0430\u0437\u043c\u0435\u0440 \u0441\u0430\u043c\u043e\u0433\u043e \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430. \u0422.\u0435. \u0433\u0440\u0443\u0431\u043e \u0435\u0441\u043b\u0438 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0448\u0435\u0441\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u0441\u0447\u0435\u0442, SizeOfBlock = Count * SizeOf(Word) + SizeOf(TImageBaseRelocation) = 20 \u0431\u0430\u0439\u0442.<\/p>\n<p>  \u0421\u0430\u043c\u0438 \u0431\u043b\u043e\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0441\u0442\u0430\u0440\u0448\u0438\u0435 4 \u0431\u0438\u0442\u0430 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0444\u043b\u0430\u0433\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u043c \u0442\u0438\u043f \u0431\u043b\u043e\u043a\u0430, \u0430 \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 12 \u0431\u0438\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0444\u0441\u0435\u0442\u043e\u043c \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 0..0\u0445FFF. <\/p>\n<p>  \u0422\u0438\u043f\u043e\u0432 \u0431\u043b\u043e\u043a\u043e\u0432 \u043c\u043d\u043e\u0433\u043e, \u043d\u043e \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0432 \u0420\u0415 \u0444\u0430\u0439\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u0442\u0440\u0438: <\/p>\n<pre><code class=\"delphi\">const   IMAGE_REL_BASED_ABSOLUTE = 0;   IMAGE_REL_BASED_HIGHLOW = 3;   IMAGE_REL_BASED_DIR64 = 10;<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0432 32 \u0431\u0438\u0442\u043d\u044b\u0445 \u0438 64 \u0431\u0438\u0442\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u0430\u0445, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432 \u043c\u043b\u0430\u0434\u0448\u0438\u0445 12 \u0431\u0438\u0442\u0430\u0445 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043e\u0444\u0441\u0435\u0442. <\/p>\n<p>  \u041a\u043e\u0434, \u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u0435\u043d: <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.LoadRelocations<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.LoadRelocations(Raw: TStream): Boolean; ... begin   FRelocationDelta := ImageBase - FNtHeader.OptionalHeader.ImageBase;   if not Image64 then     FRelocationDelta := DWORD(FRelocationDelta);   Result := FRelocationDelta = 0;   if Result then Exit;   Reloc := FNtHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC];   if (Reloc.VirtualAddress = 0) or (Reloc.Size = 0) then Exit;   Raw.Position := RvaToRaw(Reloc.VirtualAddress);   if Raw.Position = 0 then Exit;   MaxPos := Raw.Position + Reloc.Size;   while Raw.Position &lt; MaxPos do   begin     Raw.ReadBuffer(ImageBaseRelocation, SizeOf(TImageBaseRelocation));     Dec(ImageBaseRelocation.SizeOfBlock, SizeOf(TImageBaseRelocation));     for I := 0 to Integer(ImageBaseRelocation.SizeOfBlock shr 1) - 1 do     begin       Raw.ReadBuffer(RelocationBlock, SizeOf(Word));       case RelocationBlock shr 12 of         IMAGE_REL_BASED_HIGHLOW,         IMAGE_REL_BASED_DIR64:           FRelocations.Add(Pointer(RvaToRaw(ImageBaseRelocation.VirtualAddress + RelocationBlock and $FFF)));       end;     end;   end;   Result := True; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0421\u0430\u043c\u043e\u0439 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u044c\u0442\u0430, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0431\u0430\u0437\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u0432 \u0420\u0415 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 (\u0440\u0430\u0432\u043d\u0430 \u043d\u0443\u043b\u044e), \u0442.\u0435 \u043e\u0431\u0440\u0430\u0437 \u0431\u044b\u043b \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u043f\u043e \u0442\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u043a\u0430\u043a\u043e\u0439 \u0443\u043a\u0430\u0437\u0430\u043b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u0442\u043e \u0441\u043c\u044b\u0441\u043b\u0430 \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043d\u0435\u0442, \u0442.\u043a. \u0432\u0441\u0435 \u0431\u0430\u0437\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u041d\u0443 \u0430 \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0437\u0430\u043f\u0438\u0441\u0438 \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 TImageBaseRelocation.<\/p>\n<p>  \u0420\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0447\u0435\u0442\u0430, \u0440\u0430\u0432\u0435\u043d RVA \u0430\u0434\u0440\u0435\u0441\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b + \u043e\u0444\u0441\u0435\u0442\u0443, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c\u0443 \u0432 \u0431\u043b\u043e\u043a\u0435.<\/p>\n<p>  \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0438\u0434\u0435\u0442 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0437\u0430 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439, \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0431\u043b\u043e\u043a\u0438 IMAGE_REL_BASED_ABSOLUTE. <\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u0430, \u0435\u0451 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0437\u0443 \u0444\u0430\u0439\u043b\u0430, \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0433\u043e \u0441 \u0434\u0438\u0441\u043a\u0430:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.ProcessRelocations<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TRawPEImage.ProcessRelocations(AStream: TStream); ... begin   if FRelocationDelta = 0 then Exit;   Reloc := 0;   AddrSize := IfThen(Image64, 8, 4);   for var RawReloc in FRelocations do   begin     AStream.Position := Int64(RawReloc);     AStream.ReadBuffer(Reloc, AddrSize);     Inc(Reloc, FRelocationDelta);     AStream.Position := Int64(RawReloc);     AStream.WriteBuffer(Reloc, AddrSize);   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041a\u043e\u0434 \u0432\u043e\u043e\u0431\u0449\u0435 \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0439, \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0435\u0436\u0438\u043c \u043f\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u043c \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0440\u0435\u043b\u043e\u043a\u0430\u0446\u0438\u0439 \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0438 \u043f\u0440\u0438\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u0434\u0435\u043b\u044c\u0442\u0443.<\/p>\n<p>  \u0418 \u0442\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434, \u0442\u043e \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440 \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0443\u0436\u043d\u043e:<\/p>\n<pre><code class=\"delphi\">procedure TRawPEImage.LoadFromImage; ... begin     if LoadRelocations(Raw) then       ProcessRelocations(Raw);            LoadDelayImport(Raw); ... end;<\/code><\/pre>\n<p>  \u041a\u043e\u0434 \u043a \u0441\u0435\u0434\u044c\u043c\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%207\" rel=\"nofollow noopener noreferrer\">\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<h3>8. TLS \u043a\u0430\u043b\u0431\u044d\u043a\u0438 \u0438 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430.<\/h3>\n<p>  \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435, \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0430\u0434\u0440\u0435\u0441\u043e\u0432 TLS \u043a\u0430\u043b\u0431\u044d\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0414\u041e \u0442\u043e\u0447\u043a\u0438 \u0432\u0445\u043e\u0434\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u041f\u0440\u043e \u043d\u0438\u0445 \u044f \u0443\u0436\u0435 <a href=\"http:\/\/alexander-bagel.blogspot.com\/2016\/03\/early-execution.html\" rel=\"nofollow noopener noreferrer\">\u043f\u0438\u0441\u0430\u043b \u0440\u0430\u043d\u0435\u0435<\/a> \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u044f\u0445 \u043d\u0435 \u0431\u0443\u0434\u0443, \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043a\u0430\u0436\u0443 \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. <\/p>\n<p>  \u0410\u0434\u0440\u0435\u0441\u0430 \u043a\u0430\u043b\u0431\u044d\u043a\u043e\u0432 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 _IMAGE_TLS_DIRECTORY32\/64, \u0430 \u0435\u0441\u043b\u0438 \u0442\u043e\u0447\u043d\u0435\u0435 \u0435\u0451 \u043f\u043e\u043b\u0435 AddressOfCallBacks. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 IMAGE_DIRECTORY_ENTRY_TLS, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0430\u0434\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0451 \u0430\u0434\u0440\u0435\u0441:<\/p>\n<pre><code class=\"delphi\">  with FNtHeader.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_TLS] do   begin     FTlsDir.VirtualAddress := RvaToVa(VirtualAddress);     FTlsDir.Size := Size;   end;<\/code><\/pre>\n<p>  \u0421\u0430\u043c\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c (\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 64 \u0431\u0438\u0442\u043d\u043e\u0439 \u0435\u0451 \u0432\u0435\u0440\u0441\u0438\u0438):<\/p>\n<pre><code class=\"delphi\">  _IMAGE_TLS_DIRECTORY64 = record     StartAddressOfRawData: ULONGLONG;     EndAddressOfRawData: ULONGLONG;     AddressOfIndex: ULONGLONG;         \/\/ PDWORD     AddressOfCallBacks: ULONGLONG;     \/\/ PIMAGE_TLS_CALLBACK *;     SizeOfZeroFill: DWORD;     Characteristics: DWORD;   end;<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0435 \u0447\u0435\u0442\u044b\u0440\u0435 \u043f\u043e\u043b\u044f \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u0438 \u043e\u0431\u0440\u0430\u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f (4 \u0438 8 \u0431\u0430\u0439\u0442).<\/p>\n<p>  \u0410\u0434\u0440\u0435\u0441\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435\u0441\u044f \u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445, \u0438\u0434\u0443\u0442 \u0432 VA \u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f (\u0442\u043e\u0447\u043d\u0435\u0435 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u043c\u043e\u0434\u0443\u043b\u044f) \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442 \u0438\u0445 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0441\u0435\u043a\u0446\u0438\u0438 \u0440\u0435\u043b\u043e\u043a\u043e\u0432.<\/p>\n<p>  \u041f\u043e\u043b\u044f StartAddressOfRawData, EndAddressOfRawData \u0438 SizeOfZeroFill \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0442 \u0437\u0430 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 TLS, \u044d\u0442\u043e \u0433\u0440\u0443\u0431\u043e \u0433\u043e\u0432\u043e\u0440\u044f \u0431\u043b\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 TLS \u0441\u0435\u043a\u0446\u0438\u044e \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b TEB (Thread Environment Block) \u043f\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0435 \u043f\u043e\u0442\u043e\u043a\u0430.<\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u2014 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0432\u0435\u0449\u0438 \u043a\u0430\u043a threadvar, \u0442.\u0435. \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0443.<\/p>\n<p>  AddressOfIndex \u0438 Characteristics \u2014 \u0442\u043e\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u044d\u0442\u043e\u043c\u0443 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0443 \u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b, \u0432\u0441\u0435 \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0438\u0437 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f AddressOfCallBacks. \u041e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 VA \u0430\u0434\u0440\u0435\u0441\u043e\u0432 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0443\u043b\u0435\u043c. <\/p>\n<p>  \u0412 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/jz\/f0\/cf\/jzf0cf85qmzfe-c1t26qaq2sthi.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/jz\/f0\/cf\/jzf0cf85qmzfe-c1t26qaq2sthi.png\"\/><\/p>\n<p>  \u0421\u0430\u043c \u043a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 TLS \u043a\u0430\u043b\u0431\u044d\u043a\u043e\u0432:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TRawPEImage.LoadTLS<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function TRawPEImage.LoadTLS(Raw: TStream): Boolean;    function TlsVaToRva(Value: ULONG_PTR64): DWORD;   begin     Result := Value - NtHeader.OptionalHeader.ImageBase   end;  begin   Result := False;   Raw.Position := VaToRaw(TlsDirectory.VirtualAddress);   if Raw.Position = 0 then Exit;   AddrSize := IfThen(Image64, 8, 4);   \/\/ \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c 3 \u043f\u043e\u043b\u044f IMAGE_TLS_DIRECTORY\u0445\u0445:   \/\/ StartAddressOfRawData + EndAddressOfRawData + AddressOfIndex   \/\/ \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0441\u044c, \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 AddressOfCallBacks   Raw.Position := Raw.Position + AddrSize * 3;   Counter := 0;   TlsCallbackRva := 0;   \/\/ \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 AddressOfCallBacks   Raw.ReadBuffer(TlsCallbackRva, AddrSize);   \/\/ \u0435\u0441\u043b\u0438 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432 \u043d\u0435 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 - \u0432\u044b\u0445\u043e\u0434\u0438\u043c   if TlsCallbackRva = 0 then Exit;   \/\/ \u043f\u043e\u0437\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u0435\u043c\u0441\u044f \u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043a\u0430\u043b\u0431\u044d\u043a\u043e\u0432   Raw.Position := RvaToRaw(TlsVaToRva(TlsCallbackRva));   if Raw.Position = 0 then Exit;   repeat     Raw.ReadBuffer(TlsCallbackRva, AddrSize);     if TlsCallbackRva &lt;> 0 then     begin       Chunk.EntryPointName := 'Tls Callback ' + IntToStr(Counter);       Chunk.AddrVA := RvaToVa(TlsVaToRva(TlsCallbackRva));       Chunk.AddrRaw := VaToRaw(Chunk.AddrVA);       FEntryPoints.Add(Chunk);       Inc(Counter);     end;   until TlsCallbackRva = 0; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041e\u043d \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0435 IMAGE_TLS_DIRECTORY\u0445\u0445.AddressOfCallBacks \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d\u043e \u043d\u0435 \u0440\u0430\u0432\u043d\u043e \u043d\u0443\u043b\u044e, \u0442\u043e \u0432\u044b\u0447\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0430\u0434\u0440\u0435\u0441\u0430, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0439\u0434\u0435\u043c \u0434\u043e \u043d\u0443\u043b\u0435\u0432\u043e\u0433\u043e. <\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u0430\u0434\u0440\u0435\u0441\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u044b, \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f.<\/p>\n<p>  \u0412\u043e \u043f\u0435\u0440\u0432\u044b\u0445 \u2014 \u0447\u0430\u0441\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 NTDLL.DLL \u0444\u0443\u043d\u043a\u0446\u0438\u0438 NlsMbCodePageTag \u0438 NlsMbOemCodePageTag \u0432 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f\u043c\u0438 \u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043a\u043e\u0434\u043e\u0432\u044b\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0438 \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0432 \u043f\u0443\u0441\u0442\u043e\u0442\u0443 \u043c\u0435\u0436\u0434\u0443 \u0441\u0435\u043a\u0446\u0438\u044f\u043c\u0438 .data \u0438 .pdata, \u0430 \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0438\u0445 RAW \u0430\u0434\u0440\u0435\u0441, \u0442.\u043a. \u043e\u043d \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0438\u0431\u043e RVA \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0441\u0435\u043a\u0446\u0438\u0439.<\/p>\n<p>  \u041d\u0443 \u0438\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f RtlNtdllName, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u043c \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0443 \u00abntdll.dll\u00bb. <\/p>\n<p>  \u0422\u0430\u043a\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u043a\u0430\u043a \u00ab\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435\u00bb, \u0447\u0442\u043e\u0431\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u043b \u0438\u0445 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435, \u0438\u043d\u0430\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 FalsePositive \u0440\u0435\u0430\u043a\u0446\u0438\u044f.<\/p>\n<pre><code class=\"delphi\">function TRawPEImage.IsExecutable(RvaAddr: DWORD): Boolean; const   ExecutableCode = IMAGE_SCN_CNT_CODE or IMAGE_SCN_MEM_EXECUTE; ... begin   Result := GetSectionData(RvaAddr, SectionData);   if Result then   begin     PointerToRawData := FSections[SectionData.Index].PointerToRawData;     if FNtHeader.OptionalHeader.SectionAlignment >= DEFAULT_SECTION_ALIGNMENT then       PointerToRawData := AlignDown(PointerToRawData, DEFAULT_FILE_ALIGNMENT);     Inc(PointerToRawData, RvaAddr - SectionData.StartRVA);     Result :=       (PointerToRawData &lt; FSizeOfFileImage) and       (FSections[SectionData.Index].Characteristics and ExecutableCode = ExecutableCode);   end; end;<\/code><\/pre>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u0441\u0435\u043a\u0446\u0438\u0438, \u0438 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442, \u0442\u043e \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c \u2014 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u0438 \u0443 \u0441\u0435\u043a\u0446\u0438\u0438 \u0444\u043b\u0430\u0433\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435. \u041a\u0430\u0436\u0434\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u0430\u044f \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u044d\u0442\u0438\u043c \u043a\u043e\u0434\u043e\u043c. <\/p>\n<p>  \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0443 \u043c\u0435\u043d\u044f \u00ab\u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u00bb \u0440\u0435\u0448\u0438\u0442\u044c, \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u043d\u043e \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f comctl32.dll.<\/p>\n<p>  \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u0435\u0437 \u043c\u0430\u043d\u0438\u0444\u0435\u0441\u0442\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 comctl32.dll \u043f\u044f\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0432\u0434\u0440\u0443\u0433 \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0435\u0449\u0435 \u043e\u0434\u043d\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 HIMAGELIST_QueryInterface, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043f\u044f\u0442\u043e\u0439 comctl32, \u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0448\u0435\u0441\u0442\u043e\u0439, \u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0448\u0435\u0441\u0442\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f comctl32.dll \u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0430 \u0432\u0435\u0441\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 \u0443 \u044d\u0442\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043b\u0438\u0431\u043e \u043d\u0430 comctl32.dll \u043e\u0442 \u0448\u0435\u0441\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043b\u0438\u0431\u043e \u043f\u044f\u0442\u043e\u0439, \u043b\u0438\u0431\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0432 \u0440\u0430\u0437\u043d\u043e\u0431\u043e\u0439 (\u0438 \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b\u0430\u0441\u044c). \u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>  \u0414\u0440\u0443\u0433\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f: \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u044f \u0434\u0435\u043b\u0430\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 A.DLL \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u0438\u043d\u043a\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 B.DLL \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e, \u0434\u0435\u043b\u0430\u044e \u0434\u0432\u0435 \u043a\u043e\u043f\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 B.DLL \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u043f\u043a\u0430\u0445 \u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044e \u0438\u0445 \u043e\u0431\u0435 \u0447\u0435\u0440\u0435\u0437 LoadLibrary(), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0433\u0440\u0443\u0436\u0443 \u0443\u0436\u0435 A.DLL \u0438 \u0442\u0443\u0442 \u043e\u043f\u044f\u0442\u044c \u043d\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u041e\u0421 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 A.DLL \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043b\u0438\u0431\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u0443\u044e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0443\u044e B.DLL, \u043b\u0438\u0431\u043e \u043d\u0430 \u0432\u0442\u043e\u0440\u0443\u044e, \u043f\u0440\u0438\u0447\u0435\u043c \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441 \u2014 \u0435\u0441\u043b\u0438 \u043e\u0434\u043d\u0430 \u0438\u0437 B.DLL \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432 \u043f\u0430\u043f\u043a\u0435 \u0441 A.DLL \u0442\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u0431\u0443\u0434\u0435\u0442 \u043b\u0438\u043d\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442 \u0443\u0436\u0435 \u043d\u0430 \u043d\u0435\u0451, \u043f\u0440\u0438\u0447\u0435\u043c \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u2014 \u0442\u043e \u0441 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439.<\/p>\n<p>  \u0410 \u0435\u0449\u0435 \u0436\u0435 \u0435\u0441\u0442\u044c Hard-import link, \u043a\u043e\u0433\u0434\u0430 \u0443 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043b\u0438\u0431\u043e \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c \u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0442\u0430\u043a\u0438\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043e\u0441\u043e\u0431\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. <\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0435 \u043f\u0435\u0440\u0435\u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0442\u044c \u043a\u043e\u0434 \u0438 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0423 \u043a\u043b\u0430\u0441\u0441\u0430 TRawPEImage \u0432\u0432\u0435\u043b \u043f\u043e\u043b\u0435 RelocatedImages: TList \u0430 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 TRawModules.AddImage \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0435\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445, \u0442\u043e \u043e\u043d \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0432 \u043e\u0431\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a, \u0430 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a RelocatedImages \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f. \u041f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0432\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">CheckImageAtAddr \u0438 GetImageAtAddr<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">function CheckImageAtAddr(Image: TRawPEImage; CheckAddrVA: ULONG_PTR64): Boolean; begin   Result := (Image.ImageBase &lt; CheckAddrVA) and     (Image.ImageBase + UInt64(Image.VirtualSizeOfImage) > CheckAddrVA); end;  function TRawPEImage.GetImageAtAddr(AddrVA: ULONG_PTR64): TRawPEImage; begin   Result := Self;   if (RelocatedImages.Count > 0) and not CheckImageAtAddr(Self, AddrVA) then   begin     for var Index := 0 to RelocatedImages.Count - 1 do       if CheckImageAtAddr(RelocatedImages[Index], AddrVA) then       begin         Result := RelocatedImages[Index];         Break;       end;   end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 VA \u0430\u0434\u0440\u0435\u0441 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0443\u0449\u0438\u0439 \u043f\u0435\u0440\u0432\u044b\u043c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c \u043e\u0431\u0440\u0430\u0437 \u0420\u0415 \u0444\u0430\u0439\u043b\u0430.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0434\u0435\u0442 \u043f\u043e \u0441\u043f\u0438\u0441\u043a\u0443 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0438 \u0438\u0449\u0435\u0442 \u0442\u043e\u0442, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u0430\u0434\u0440\u0435\u0441, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043b\u0438\u0431\u043e \u0441\u0435\u0431\u044f, \u043b\u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0420\u0415 \u0444\u0430\u0439\u043b.<\/p>\n<p>  \u0414\u0435\u0448\u0435\u0432\u043e \u0438 \u0441\u0435\u0440\u0434\u0438\u0442\u043e \ud83d\ude42 <\/p>\n<p>  \u0422\u0440\u0435\u0442\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439, \u043f\u0440\u0438\u0447\u0435\u043c \u0441\u0430\u043c\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0430 \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435 \u0441\u0435\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0432\u0435\u0440\u043a\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0445 64 \u0431\u0430\u0439\u0442, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0447\u0442\u043e \u044d\u0442\u0438 64 \u0431\u0430\u0439\u0442\u0430 \u0437\u0430\u0445\u0432\u0430\u0442\u044f\u0442 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043e\u0431\u0440\u0430\u0437\u0435 \u0444\u0430\u0439\u043b\u0430 \u0443\u0436\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0442 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438, \u0442.\u0435. \u043a\u043e\u0433\u0434\u0430 \u0444\u0430\u0439\u043b \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d, \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u044b \u043f\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443, \u043d\u0435 \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435.<\/p>\n<pre><code class=\"delphi\">  dclIndyProtocols270.bpl export: Finalize      Expected: B8 1C 4B 42 23 E8 F2 BB FF FF C3 90 ! FF 25 04 A1 42 23 8B C0...      Present:  B8 1C 4B 42 23 E8 F2 BB FF FF C3 90 ! 00 00 00 00 00 00 00 00...<\/code><\/pre>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Finalize, \u0441\u0442\u0440\u043e\u0447\u043a\u0430 Expected \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u044b \u0438\u0437 \u043e\u0431\u0440\u0430\u0437\u0430 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435, \u0430 \u0441\u0442\u0440\u043e\u0447\u043a\u0430 Present \u043d\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412\u043e\u0441\u043a\u043b\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u043a\u043e\u043c \u044f \u043e\u0442\u0434\u0435\u043b\u0438\u043b \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0435\u043a\u0446\u0438\u0438. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u0442\u0435\u0441\u044c \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0445 \u043a\u043e\u0434\u0430\u0445 \u0442\u043e \u0441\u0440\u0430\u0437\u0443 \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0447\u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u0431\u0430\u0439\u0442\u0430 \u043f\u0435\u0440\u0435\u0434 \u0432\u043e\u0441\u043a\u043b\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0437\u043d\u0430\u043a\u043e\u043c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u043f\u043a\u043e\u0434\u0430\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 RET \u0418 NOP, \u0438 \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u0438 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u043e \u0434\u0435\u043b\u043e \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043d\u0438\u0445 \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438 JMP, \u0430 \u0442\u0430\u043a-\u0436\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u043d\u0435\u0435 \u043f\u043e \u043a\u043e\u0434\u0443, \u0434\u0430 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u044f \u0440\u0435\u0448\u0438\u043b \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b \u043f\u0440\u043e\u0449\u0435, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<pre><code class=\"delphi\">function TRawPEImage.FixAddrSize(AddrVA: ULONG_PTR64;   var ASize: DWORD): Boolean; ... begin   AddrRva := VaToRva(AddrVA);   Result := GetSectionData(AddrRva, Data);   if Result then   begin     if Data.StartRVA + Data.Size &lt; AddrRva + ASize then       ASize := Data.StartRVA + Data.Size - AddrRva;   end; end;<\/code><\/pre>\n<p>  \u0415\u0451 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u044b\u0445\u043e\u0434 VA \u0430\u0434\u0440\u0435\u0441\u0430 \u0437\u0430 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0441\u0435\u043a\u0446\u0438\u0438, \u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440. <\/p>\n<p>  \u0418 \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">TPatchAnalyzer.CompareBinary<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure TPatchAnalyzer.CompareBinary(AddrVa: ULONG_PTR64; AddrRaw: DWORD;   const FuncName: string; Module: TRawPEImage); const   DefaultBuffSize = 64; ... begin   Inc(FAnalizeResult.Code.Scanned);    SetLength(RawBuff, DefaultBuffSize);   SetLength(RemoteBuff, DefaultBuffSize);    BuffSize := DefaultBuffSize;   Module.FixAddrSize(AddrVA, BuffSize);    \/\/ \u0437\u0430\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0431\u043b\u043e\u043a \u0438\u0437 \u0444\u0430\u0439\u043b\u0430   FRaw.Position := AddrRaw;   FRaw.ReadBuffer(RawBuff[0], BuffSize);    \/\/ \u0438 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438   if not ReadRemoteMemory(FProcessHandle, AddrVA,     @RemoteBuff[0], BuffSize) then     Exit;    if not CompareMem(@RawBuff[0], @RemoteBuff[0], BuffSize) then   begin      Data.Patched :=       CheckPageSharing(AddrVA, SharedCount) and       (SharedCount = 0);      \/\/ \u0431\u043b\u043e\u043a\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u043b\u0438     \/\/ \u043e\u0442\u0434\u0430\u0435\u043c \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u0432\u043d\u0435\u0448\u043d\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0443, \u0435\u0441\u043b\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d     if Assigned(FProcessCodeHook) then     begin       Data.ProcessHandle := FProcessHandle;       Data.Image64 := Module.Image64;       Data.ImageBase := Module.ImageBase;       Data.ExportFunc := ChangeFileExt(Module.ImageName, '.' + FuncName);       Data.AddrVA := AddrVA;       Data.RawOffset := AddrRaw;       Data.Raw := @RawBuff[0];       Data.Remote := @RemoteBuff[0];       Data.BufSize := BuffSize;       FProcessCodeHook(Data);     end;    end; end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043f\u043e \u0441\u0432\u043e\u0435\u0439 \u0441\u0443\u0442\u0438, \u043d\u0430 \u0432\u0445\u043e\u0434 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0434\u0432\u0430 \u0430\u0434\u0440\u0435\u0441\u0430, AddrVa \u2014 \u0430\u0434\u0440\u0435\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, AddrRaw \u2014 \u043e\u0444\u0441\u0435\u0442 \u0432 \u043e\u0431\u0440\u0430\u0437\u0435 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435. \u041f\u043e \u044d\u0442\u0438\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f 64 \u0431\u0430\u0439\u0442\u0430 (\u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u2014 \u043a\u043e\u0440\u0440\u0435\u043a\u0446\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0438\u0434\u0435\u0442 \u0447\u0435\u0440\u0435\u0437 FixAddrSize) \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u043e\u0431\u0430 \u0431\u043b\u043e\u043a\u0430 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f. \u041f\u0440\u0438 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u044d\u0442\u0438\u043c\u0438 \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u043d\u0435 \u0442\u0430\u043a. <\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u044b\u0437\u043e\u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043d\u0443\u0436\u043d\u043e \u0432 \u0434\u0432\u0443\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u0432 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u0432 \u043a\u043e\u043d\u0435\u0446 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u0443\u0441\u043e\u043a \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"delphi\">      \/\/ 1. \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c - \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443       if Exp.OriginalForvardedTo &lt;> EmptyStr then       begin         Inc(FAnalizeResult.Code.Skipped);         Continue;       end;        \/\/ 2. \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043a\u043e\u0434\u0430 - \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443       if not Exp.Executable then       begin         Inc(FAnalizeResult.Code.Skipped);         Continue;       end;        \/\/ \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e \u043a\u0430\u043a \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u043b\u0438\u0441\u044c \u0447\u0442\u043e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432\u0430\u043b\u0438\u0434\u043d\u0430\u044f       \/\/ \u0438 \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0442\u043e \u0442\u043e\u0433\u0434\u0430       \/\/ \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0443\u043d\u043a\u0446\u0438\u0438       CompareBinary(Exp.FuncAddrVA, Exp.FuncAddrRaw, Exp.ToString, Module);<\/code><\/pre>\n<p>  \u042d\u0442\u0438\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u0441\u044f \u0442\u0435\u043b\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0443 \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>  \u0410 \u0442\u0430\u043a\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 EntryPoint \u0438 TLS \u043a\u0430\u043b\u0431\u044d\u043a\u043e\u0432 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439: <\/p>\n<pre><code class=\"delphi\">procedure TPatchAnalyzer.ScanEntryPoints(Index: Integer; Module: TRawPEImage); begin   for var I := 0 to Module.EntryPointList.Count - 1 do     with Module.EntryPointList.List[I] do       CompareBinary(AddrVA, AddrRaw, EntryPointName, Module); end;<\/code><\/pre>\n<p>  \u041f\u0440\u0438\u0447\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u043d\u0430 \u0431\u0443\u0434\u0435\u0442 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f COM+ (\u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0438 \u0442\u043e\u043b\u044c\u043a\u043e IL \u043a\u043e\u0434)<\/p>\n<pre><code class=\"delphi\">  if not Module.ComPlusILOnly then     ScanEntryPoints(Index, Module);<\/code><\/pre>\n<p>  \u0418 \u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u043e\u0434 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u0430\u043b\u0431\u044d\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0431\u044b\u043b\u0430 \u043b\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0442\u0435\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u043d\u0435\u0442.<\/p>\n<p>  \u0414\u043b\u044f \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443 \u043d\u0443\u0436\u0435\u043d \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043d\u043e \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b \u044d\u0442\u043e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u044b\u043c (\u043e\u043d\u0430 \u0438 \u0442\u0430\u043a \u0432\u044b\u0448\u043b\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u044a\u0435\u043c\u043d\u0430\u044f) \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0437\u0430\u043c\u0435\u043d\u0438\u043b \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0435\u043d\u044c\u043a\u0438\u0439 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0434\u043b\u0438\u043d, \u0432\u0437\u044f\u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043e\u043f\u0430\u0432\u0448\u0438\u0439\u0441\u044f \u043d\u0430 GIT \u0438 \u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0432 \u0435\u0433\u043e \u043d\u0430 Delphi. \u041e\u043d \u0442\u0430\u043a\u043e\u0439 \u2014 \u043d\u0435\u043a\u0430\u0437\u0438\u0441\u0442\u044b\u0439, \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u0445, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0433\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u0434\u0443 \u0432 \u043a\u0430\u043b\u0431\u044d\u043a\u0435 \u0433\u0434\u0435 \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f RET, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0435\u0446 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0441 \u043d\u0435\u0439 \u043e\u043d \u0432 98 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e.<\/p>\n<p>  \u041a\u043e\u0434 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 (\u0435\u0441\u043b\u0438 \u043f\u043e\u0434\u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438) \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439:<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">ProcessCodeHook<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"delphi\">procedure ProcessCodeHook(const Data: TCodeHookData); ... begin   \/\/ \u043f\u043e\u0438\u0441\u043a \u043a\u043e\u043d\u0446\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438   rawCursor := Data.Raw;   I := Data.BufSize;   while I > 0 do   begin     OpcodeLen := ldisasm(rawCursor, Data.Image64);     Dec(I, OpcodeLen);     \/\/ \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0449\u0435\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e RET     if (OpcodeLen = 1) and (rawCursor^ = $C3) then       Break;     Inc(rawCursor, OpcodeLen);   end;    if CompareMem(Data.Raw, Data.Remote, Data.BufSize - I) then     Exit;    Writeln('  Expected: ' + ByteToHexStr(Data.Raw, Data.BufSize - I));   Writeln('  Present:  ' + ByteToHexStr(Data.Remote, Data.BufSize - I)); end;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0446 \u00ab\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445\u00bb \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (\u043e\u043f\u0438\u0440\u0430\u044f\u0441\u044c \u043d\u0430 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u0434\u043b\u0438\u043d \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439) \u0438 \u043f\u0440\u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0442\u0430\u043a\u043e\u0432\u043e\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0443\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443.<\/p>\n<p>  \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e, \u043a\u043e\u0433\u0434\u0430 \u0438\u0434\u0443\u0442 \u0434\u0432\u0435 \u0442\u0440\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e\u0434\u0440\u044f\u0434, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f, \u0431\u0435\u0437 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044f \u0434\u043b\u0438\u043d\u044b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435 \u0442\u0440\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u044b \u043a\u0430\u043a \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435, \u0430 \u0437\u0434\u0435\u0441\u044c \u0438\u0434\u0435\u0442 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0445\u043e\u0432\u043a\u0430 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0418 \u0442\u0435\u043f\u0435\u0440\u044c, \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0434\u0435\u043c\u043e-\u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438\u0437 \u043f\u043e\u0434 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430, \u043e\u043d (\u0431\u0443\u0434\u0443\u0447\u0438 \u0443\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043d\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f) \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u043e\u0439 Delphi (\u043d\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0430 \u0435\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0437 \u043f\u043e\u0434 \u043d\u0435\u0433\u043e).<\/p>\n<p>  \u041f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0430\u0442\u044c \u2014 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u044f\u0436\u0435\u043b\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043a\u0430\u043a bds.exe, \u0441 \u043e\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u0440\u0430\u043d\u0442\u0430\u0439\u043c\u043e\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u044d\u0448\u0430, \u043d\u0435 \u0441\u0438\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043d\u044f\u0442\u044c \u0441\u0435\u043a\u0443\u043d\u0434 20-30.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ti\/eo\/rt\/tieort0lmkqrhwchyrywrngmhim.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/ti\/eo\/rt\/tieort0lmkqrhwchyrywrngmhim.png\"\/><\/p>\n<p>  \u0427\u0442\u043e \u0438\u0437 \u043d\u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c:<\/p>\n<p>  1. \u0441\u0430\u043c\u0430\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0433\u043e\u0432\u043e\u0440\u0438\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 rtl270.bpl \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0447\u0435\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0435\u0434\u0443\u0449\u0430\u044f \u043d\u0430 kernel32.RaiseException \u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a \u0432\u0435\u0434\u0435\u0442 \u043a\u0443\u0434\u0430-\u0442\u043e \u0432\u0433\u043b\u0443\u0431\u044c exceptiondiag270.bpl<\/p>\n<p>  \u042d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u0430\u043c\u043e\u0439 delphi, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0439 \u0432 DesignTime \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u0442\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0441\u0442\u0435\u043a, \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043a \u043e\u0448\u0438\u0431\u043a\u0435.<\/p>\n<p>  2. \u0434\u0430\u043b\u0435\u0435 \u0438\u0434\u0443\u0442 \u0434\u0432\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u0437 \u0442\u043e\u0433\u043e \u0436\u0435 rtl270.bpl, \u044d\u0442\u043e HandleAutoException \u0438 RaiseLastOSError. \u042d\u0442\u043e \u043f\u043e\u0441\u0442\u0430\u0440\u0430\u043b\u0430\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u0430\u044f \u043d\u0430 \u043c\u043e\u0435\u0439 \u043c\u0430\u0448\u0438\u043d\u0435 EurekaLog \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0447\u0438\u043a \u043f\u0440\u044f\u043c\u043e \u0432 \u0442\u0435\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u043a\u0443\u0434\u0430-\u0442\u043e \u0432\u0433\u043b\u0443\u0431\u044c EurekaLogExpert270.bpl. \u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0432\u0438\u0434\u043d\u043e, \u0442.\u043a. \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0430\u0439\u0442\u044b \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u043e, \u0435\u0441\u043b\u0438 \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u0441\u0442\u0430\u043d\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439.<\/p>\n<p>  3. \u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043a\u0442\u043e-\u0442\u043e \u0432\u043b\u0435\u0437 \u0432 win32debugide270.bpl \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0432 \u043d\u0430\u0447\u0430\u043b\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 TNativeDebugger.DoShowException. \u042d\u0442\u043e \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0443 \u043c\u0435\u043d\u044f GExpert \u0431\u0430\u043b\u0443\u0435\u0442\u0441\u044f, \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0433\u043b\u0443\u0431\u044c GExpertsRS104.dll \u0447\u0442\u043e\u0431\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u0448\u0442\u0430\u0442\u043d\u043e\u0433\u043e \u043e\u043a\u043e\u0448\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435 \u0441 \u043a\u043d\u043e\u043f\u043a\u0430\u043c\u0438 \u00ab\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u00bb \u0438 \u0442.\u043f. \u2014 \u043a\u0441\u0442\u0430\u0442\u0438 \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u0432\u0435\u0448\u044c!<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0436\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0442\u043e \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sf\/xs\/ww\/sfxswwox6okt32kpqqpqifu0qg4.png\" alt=\"image\" data-src=\"https:\/\/habrastorage.org\/webt\/sf\/xs\/ww\/sfxswwox6okt32kpqqpqifu0qg4.png\"\/><\/p>\n<p>  \u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430 \u0440\u0443\u043a\u0430\u0445 \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u0434\u0430\u0436\u0435 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a \u0441\u0432\u043e\u0435\u043c\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0443. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0441 \u043d\u0438\u043c \u00ab\u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f\u00bb \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f\u0441\u044c \u043a \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c \u0438 \u043f\u043e\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0438\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442. \u0418\u043d\u043e\u0433\u0434\u0430 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0438 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0449\u0438.<\/p>\n<p>  \u041e\u0434\u043d\u0430 \u0438\u0437 \u043d\u0438\u0445 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c \u2014 \u0447\u0442\u043e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445\u0441\u044f \u0432 \u0441\u043e\u0441\u0442\u0430\u0432\u0435 \u0432\u0430\u0448\u0435\u0433\u043e \u041f\u041e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043b\u0435\u0442\u0443. \u042f \u0434\u0430\u0436\u0435 \u0441\u0430\u043c \u043d\u0435 \u0437\u043d\u0430\u043b \u043e \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438, \u043d\u043e \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0432 \u0440\u0435\u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0435\u0439\u043b\u044b \u043e\u0442 \u043c\u0430\u0439\u043a\u0440\u043e\u0441\u043e\u0444\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0430\u043d\u0430\u043b\u043e\u0433\u0438 (\u043d\u0443 \u0438\u043b\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u0435\u043d\u0435\u0432\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0435\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 Windows). \u0415\u0441\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0447\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043f\u0435\u0440\u0435\u043c\u0430\u043f\u043b\u0435\u043d\u0430 \u043d\u0430 \u0438\u0445 \u0441\u0442\u0430\u0440\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u041e\u0421 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u043b\u0430 \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433 C:\\Config.Msi\\<br \/>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 msvcp140.dll \u0432\u0434\u0440\u0443\u0433 \u0441\u0442\u0430\u043b\u0430 C:\\Config.Msi\\5761a70b.rbf \u0438 \u0442.\u0434. \u0430 \u0432\u043e\u0442 \u0432 \u0441\u043f\u0438\u0441\u043a\u0430\u0445 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0438 \u0442\u0430\u043c \u0447\u0435\u0441\u0442\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u0447\u0442\u043e \u043f\u043e \u0442\u0430\u043a\u043e\u043c\u0443-\u0442\u043e \u0430\u0434\u0440\u0435\u0441\u0443 \u043b\u0435\u0436\u0438\u0442 msvcp140.dll.<br \/>  \u042d\u0442\u0430 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434\u043e\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430, \u043d\u043e \u043e \u043d\u0435\u0439 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u043a\u0442\u043e \u0437\u0430\u0445\u043e\u0447\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0435\u0442\u0435\u043a\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/p>\n<p>  \u041d\u0443 \u0430 \u043a\u043e\u0434 \u043a \u0437\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0433\u043b\u0430\u0432\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f <a href=\"https:\/\/github.com\/AlexanderBagel\/articles\/tree\/main\/raw_scanner\/part%208\" rel=\"nofollow noopener noreferrer\">\u043f\u043e \u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a>.<\/p>\n<h3>9. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f<\/h3>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e \u0448\u0430\u0433\u0430\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043d\u0443\u0436\u043d\u043e:<\/p>\n<ol>\n<li>\u0443\u043c\u0435\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u0432\u0437\u0438\u0440\u0430\u044f \u043d\u0430 \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/li>\n<li>\u0443\u043c\u0435\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043f\u0438\u0441\u043a\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 \u0438\u0437 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/li>\n<li>\u0443\u043c\u0435\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\/\u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0442\u043e\u0447\u0435\u043a \u0432\u0445\u043e\u0434\u0430 \u0438 TLS \u043a\u0430\u043b\u0431\u044d\u043a\u043e\u0432<\/li>\n<li>\u0443\u043c\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0444\u043e\u0440\u0432\u0430\u0440\u0434 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 ApiSet \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u044b<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u0435\u043c\u0430\u0442\u0438\u043a\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0439\u0442\u0435, \u0447\u0442\u043e \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u043b \u043a\u043e\u0434 \u043d\u0430 \u0433\u043b\u0430\u0432\u044b \u0438 \u043d\u0430\u0440\u0430\u0449\u0438\u0432\u0430\u043b \u0435\u0433\u043e \u043e\u0442 \u0433\u043b\u0430\u0432\u044b \u043a \u0433\u043b\u0430\u0432\u0435 (\u0447\u0435\u0440\u0435\u0437 Merge \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0434\u0432\u0435 \u043f\u0430\u043f\u043a\u0438 \u0438 \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u043e\u0441\u044c\/\u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u043b\u0430\u0432\u044b).<\/p>\n<p>  \u0412\u043f\u043e\u043b\u043d\u0435 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432\u0430\u043c \u043f\u0440\u0438\u0433\u043e\u0434\u044f\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438: <\/p>\n<h4>\u041f\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432:<\/h4>\n<p>  <a href=\"https:\/\/learn.microsoft.com\/en-us\/archive\/msdn-magazine\/2002\/march\/inside-windows-an-in-depth-look-into-the-win32-portable-executable-file-format-part-2\" rel=\"nofollow noopener noreferrer\">An In-Depth Look into the Win32 Portable Executable File Format, Part 2<\/a><br \/>  <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/debug\/pe-format\" rel=\"nofollow noopener noreferrer\">PE Format<\/a><br \/>  <a href=\"https:\/\/wasm.in\/blogs\/ot-zelenogo-k-krasnomu-glava-2-format-ispolnjaemogo-fajla-os-windows-pe32-i-pe64-sposoby-zarazhenija-ispolnjaemyx-fajlov.390\/\" rel=\"nofollow noopener noreferrer\">\u041e\u0442 \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u043a \u043a\u0440\u0430\u0441\u043d\u043e\u043c\u0443: \u0413\u043b\u0430\u0432\u0430 2: \u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u041e\u0421 Windows. PE32 \u0438 PE64. \u0421\u043f\u043e\u0441\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/a><\/p>\n<h4>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043f\u043e ApiSet: <\/h4>\n<p>  <a href=\"https:\/\/lucasg.github.io\/2017\/10\/15\/Api-set-resolution\/\" rel=\"nofollow noopener noreferrer\">Api set resolution\/<\/a><br \/>  <a href=\"https:\/\/blog.quarkslab.com\/runtime-dll-name-resolution-apisetschema-part-i.html\" rel=\"nofollow noopener noreferrer\">Runtime DLL name resolution: ApiSetSchema \u2014 Part I<\/a><br \/>  <a href=\"https:\/\/blog.quarkslab.com\/runtime-dll-name-resolution-apisetschema-part-ii.html\" rel=\"nofollow noopener noreferrer\">Runtime DLL name resolution: ApiSetSchema \u2014 Part II<\/a><br \/>  <a href=\"https:\/\/github.com\/lucasg\/Dependencies\/blob\/master\/ClrPhlib\/include\/ApiSet.h\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/lucasg\/Dependencies\/blob\/master\/ClrPhlib\/include\/ApiSet.h<\/a><\/p>\n<h4>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e \u0440\u0430\u0431\u043e\u0442\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430:<\/h4>\n<p>  <a href=\"https:\/\/learn.microsoft.com\/en-us\/archive\/msdn-magazine\/2002\/march\/windows-2000-loader-what-goes-on-inside-windows-2000-solving-the-mysteries-of-the-loader\" rel=\"nofollow noopener noreferrer\">What Goes On Inside Windows 2000: Solving the Mysteries of the Loader<\/a><br \/>  <a href=\"https:\/\/doxygen.reactos.org\/d1\/d97\/ldrtypes_8h_source.html\" rel=\"nofollow noopener noreferrer\">https:\/\/doxygen.reactos.org\/d1\/d97\/ldrtypes_8h_source.html<\/a><br \/>  <a href=\"https:\/\/geoffchappell.com\/studies\/windows\/km\/ntoskrnl\/inc\/api\/ntldr\/ldr_data_table_entry.htm\" rel=\"nofollow noopener noreferrer\">LDR_DATA_TABLE_ENTRY<\/a><\/p>\n<h4>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/h4>\n<p>  <a href=\"https:\/\/learn.microsoft.com\/en-us\/cpp\/build\/reference\/understanding-the-helper-function?view=msvc-170\" rel=\"nofollow noopener noreferrer\">Understand the delay load helper function<\/a><\/p>\n<h4>\u041e \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438:<\/h4>\n<p>  <a href=\"https:\/\/learn.microsoft.com\/en-us\/windows\/win32\/dlls\/dynamic-link-library-search-order\" rel=\"nofollow noopener noreferrer\">Dynamic-link library search order<\/a><\/p>\n<h4>\u0414\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0435\u043c\u0443, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043c\u0435\u0442\u043e\u0434\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u043a\u043e\u0434\u0430:<\/h4>\n<p>  <a href=\"https:\/\/rce.co\/knockin-on-heavens-gate-dynamic-processor-mode-switching\/\" rel=\"nofollow noopener noreferrer\">Knockin\u2019 on Heaven\u2019s Gate \u2013 Dynamic Processor Mode Switching<\/a><br \/>  <a href=\"https:\/\/www.codeproject.com\/Articles\/5262969\/How-to-Hook-64-Bit-Code-from-WOW64-32-Bit-Mode\" rel=\"nofollow noopener noreferrer\">How to Hook 64-Bit Code from WOW64 32-Bit Mode<\/a><\/p>\n<p>  \u0412\u043e\u043e\u0431\u0449\u0435 \u0437\u0430\u0434\u0443\u043c\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e\u0439, \u043f\u043e\u043b\u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434, \u043a\u043e\u0433\u0434\u0430 \u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0435\u0433\u043e \u043d\u0430 \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445, \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0445 \u0443 \u043c\u0435\u043d\u044f \u043d\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u043a\u0430\u0445 \u0438 \u043e\u043d \u0447\u0435\u0442\u043a\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b, \u043a\u0430\u043a \u0442\u043e\u0442-\u0436\u0435 \u043e\u0444\u0438\u0441, \u0438\u043b\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u0434\u0435\u043b\u0430\u044e\u0442 \u0443 \u0441\u0435\u0431\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u00ab\u043f\u0435\u0441\u043e\u0447\u043d\u0438\u0446\u0443\u00bb \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0431\u0435\u0433\u0430 \u043a\u043e\u0434\u0430 \u043d\u0430\u0440\u0443\u0436\u0443, \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u044f \u043a\u0443\u0447\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043d\u0430 \u0441\u0430\u043c\u0438\u0445 \u0441\u0435\u0431\u044f. \u0418\u043b\u0438 \u043a\u0430\u043a \u0438\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0442\u043b\u043e\u0436\u0435\u043d\u044b\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u043c \u0441 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 \u0437\u0430\u0433\u043b\u0443\u0448\u043a\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435 \u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438 (\u0432 \u0434\u0435\u043b\u044c\u0444\u0438 \u0448\u0442\u0430\u0442\u043d\u043e \u0442\u0430\u043a\u043e\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u2014 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0443\u0447\u043a\u0430\u043c\u0438). \u041d\u0443 \u0438\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0440\u0430\u0431\u043e\u0442\u0443 \u0437\u0430\u0449\u0438\u0442\u044b \u041f\u041e, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0432\u044b\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u044f \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442 DbgUiRemoteBreakin \u0441 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430 TerminateProcess (\u0442\u0438\u043f\u0430 \u0437\u0430\u0449\u0438\u0442\u0430 \u043e\u0442 \u0430\u0442\u0442\u0430\u0447\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430 \u043a \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443) \ud83d\ude42 <\/p>\n<p>  \u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u043e\u0441\u044c\u043c\u043e\u0439 \u0433\u043b\u0430\u0432\u044b \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u0441\u0430\u043c\u043e\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u0438 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0438\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u0437\u044f\u0442\u044c \u0443\u0436\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445.<\/p>\n<p>  \u0412 \u043d\u0435\u0439 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0434\u0438\u0437\u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043e\u043c, \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f \u0438 \u043c\u043d\u043e\u0433\u043e\u0435 \u0434\u0440\u0443\u0433\u043e\u0435.<\/p>\n<p>  \u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432 \u0441\u043e\u0441\u0442\u0430\u0432 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0433\u043e \u043f\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c \u043e\u043f\u0435\u043d\u0441\u043e\u0440\u0441\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430 Process Memory Map (PMM), \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u044d\u0442\u043e \u0432 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u043c \u0432\u0438\u0434\u0435, \u043a\u0441\u0442\u0430\u0442\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u043d\u0435\u0433\u043e \u0434\u0435\u043b\u0430\u043b\u0438\u0441\u044c \u0432\u0441\u0435 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u043a \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<p>  <a href=\"https:\/\/github.com\/AlexanderBagel\/ProcessMemoryMap\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/AlexanderBagel\/ProcessMemoryMap<\/a><\/p>\n<p>  \u0420\u041c\u041c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043c\u043e\u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 \u043d\u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0432\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u043c\u043d\u0435 \u0431\u044b\u043b\u0430 \u043d\u0443\u0436\u043d\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u0412 \u043f\u043b\u0430\u043d\u0430\u0445, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0449\u0435 \u043c\u043d\u043e\u0433\u043e \u0447\u0442\u043e \u0435\u0441\u0442\u044c, \u043f\u043e\u0442\u0438\u0445\u043e\u043d\u0435\u0447\u043a\u0443 \u0431\u0443\u0434\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c, \u043d\u043e \u043d\u0435 \u0432\u0441\u0435 \u0441\u0440\u0430\u0437\u0443. <\/p>\n<p>  \u0417\u0430\u0441\u0438\u043c \u043e\u0442\u043a\u043b\u0430\u043d\u0438\u0432\u0430\u044e\u0441\u044c. <\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0447\u0438\u0442\u0430\u0435\u0442\u0435 \u044d\u0442\u043e\u0442 \u0442\u0435\u043a\u0441\u0442, \u0437\u043d\u0430\u0447\u0438\u0442 \u0432\u044b \u043f\u0440\u043e\u0447\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u044e \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0434\u043e \u043a\u043e\u043d\u0446\u0430.<\/p><\/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\/post\/720436\/\"> https:\/\/habr.com\/ru\/post\/720436\/<\/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-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/vw\/ax\/tc\/vwaxtcspzyyk1-qw88ent-s4m0s.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/vw\/ax\/tc\/vwaxtcspzyyk1-qw88ent-s4m0s.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  \u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043e\u0434\u0438\u043d \u0438\u0437 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u044b \u0443\u044f\u0437\u0432\u0438\u043c\u044b\u0445 \u043a \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0443 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441\u043e \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u0440\u0443\u0447\u043d\u044b\u043c \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0442\u0430\u0431\u043b\u0438\u0446 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u043e\u0442\u043b\u043e\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0430\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430\/TLS \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432, c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439 \u0444\u043e\u0440\u0432\u0430\u0440\u0434\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 ApiSet \u0440\u0435\u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0432.<br \/>  \u0411\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0432 64 \u0431\u0438\u0442\u043d\u043e\u0435 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0447\u0443\u0436\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0437 32 \u0431\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u0448\u043b\u044e\u0437, \u0442\u0430\u043a \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u043e\u0433\u043e \u0433\u0435\u0439\u0442\u0430.<br \/>  \u0411\u0443\u0434\u0435\u0442 \u0434\u0430\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u00ab\u043f\u043e\u0447\u0435\u043c\u0443\u00bb \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u0442 \u0438\u043b\u0438 \u0438\u043d\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043a\u0430\u043a \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435, \u0442\u0430\u043a \u0438 \u043d\u0430 \u0440\u0430\u0437\u0431\u043e\u0440\u0435 \u043a\u043e\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430\u043c.  <\/p>\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-346270","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346270","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=346270"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/346270\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=346270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=346270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=346270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}