{"id":392191,"date":"2024-06-29T10:16:25","date_gmt":"2024-06-29T10:16:25","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=392191"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-06-29T10:16:25","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=392191","title":{"rendered":"<span>\u041d\u0435\u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0439 pwsh<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/de2\/45d\/6ae\/de245d6ae99f5180ad74b13e0bdfdeea.png\" width=\"1680\" height=\"840\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/de2\/45d\/6ae\/de245d6ae99f5180ad74b13e0bdfdeea.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0443\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0440\u0443\u0431\u0435\u0436 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, PowerShell (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e <em>pwsh<\/em>) \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043f\u043e\u0432\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0447\u0442\u043e, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u0435\u0442 \u043a\u0438\u0431\u0435\u0440\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u043b\u043e\u0432\u0440\u0435\u0434 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0435\u0449\u0451 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0447\u0435\u0433\u043e \u0448\u0435\u043b\u043b\u0430, \u0437\u0430\u0442\u0435\u043c \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u043e\u0441\u0442\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 &#171;\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438&#187; \u0434\u043b\u044f \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u043d\u0443 \u0430 \u0442\u0430\u043c \u0443\u0436 \u0438 \u0430\u043d\u0435\u043a\u0434\u043e\u0442\u043e\u0432 \u043d\u0430\u0441\u043e\u0447\u0438\u043d\u044f\u043b\u0438. \u0412 \u0441\u043c\u044b\u0441\u043b\u0435, \u0431\u044b\u043b\u0430 \u043f\u043e\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043c\u0430\u0441\u0441\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u0431\u0430\u0440\u0430\u0445\u043b\u0430 \u0432\u0440\u043e\u0434\u0435 <em>tips of day<\/em> \u0438\u043b\u0438 <em>how to do<\/em>. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 <em>pwsh<\/em> \u0433\u0440\u043e\u0437\u0438\u043b\u0430 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0442\u0438 \u0432 \u043d\u0435\u043a\u0438\u0439 <em>stand up<\/em>, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0430\u044f\u0441\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439-\u0442\u043e \u0438 \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0440\u044f\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u043c\u0430\u0442\u0451\u0440\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f\u0445. \u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043d\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c pwsh \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u044f\u0442\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u041c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c \u043c\u0430\u043b\u0432\u0430\u0440\u044c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 pwsh, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u043f\u043e\u0434 Linux, \u0438 \u043f\u043e\u0434 MacOS, \u0447\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u0434\u0443\u0448\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0418\u0411 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0430\u043c\u0438, &#8212; \u0432\u0438\u043d\u0438\u0442\u044c \u0432\u043e \u0432\u0441\u0451\u043c Microsoft \u0443\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0448\u043b\u043e \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0443.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 pwsh \u043b\u0435\u0436\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0431\u043b\u0430\u0433\u0430\u044f \u0438\u0434\u0435\u044f: \u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 (\u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0431\u044b\u043b\u043e \u0438 \u0441 <em>Tcl<\/em>). \u041d\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u0437\u0430\u043b\u043e\u0436\u043d\u0438\u043a\u043e\u043c \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u043b\u0443\u0447\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u044b\u043d\u0435 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u0435\u0442 pwsh, \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0442\u0443\u043f\u0438\u043a, \u043d\u0435\u0436\u0435\u043b\u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b. \u0420\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0443\u0436\u0435 \u043d\u0435\u043a\u0443\u0434\u0430, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0430\u0445\u0430\u0440\u043e\u043c \u0438\u043b\u0438 \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0443\u043c\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0434\u0430 \u043a\u043e\u0435-\u0447\u0442\u043e \u043f\u043e \u043c\u0435\u043b\u043e\u0447\u0438. \u0418\u043b\u0438 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u0432\u043e\u0440\u043e\u0442 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u044b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 <em>C++<\/em>. \u041e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 <em>\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c API<\/em> \u0440\u0435\u0447\u044c \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 pwsh \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <em>DllImport<\/em> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 pwsh \u0432 \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 <em>C#<\/em> \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u0441\u0430\u043c\u043e\u043c pwsh \u043c\u043e\u0436\u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0443\u0442\u043e\u0433\u043e <em>Add-Type<\/em> \u0432 \u043f\u043e\u043b\u044c\u0437\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c &#171;\u043d\u0430\u043b\u0435\u0442\u0443&#187;, \u0447\u0430\u0439 \u0432\u0435\u0434\u044c <em>Get-Process<\/em> \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0438\u043c\u0438\u0434\u0436\u0435\u0439, \u0430 \u0442\u0430\u043c, \u0432\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 PE \u0438\u043b\u0438 ELF (\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e MacOS \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0438\u0431\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0436\u0438\u0442\u044c\u0441\u044f \u0438\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u043e\u0447\u043a\u0443), \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442. \u041a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e (\u0434\u043b\u044f Windows) \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"powershell\">$GetNtdllExports = {   end {     $jmp = ($mov = [Marshal]::ReadInt32(( # IMAGE_NT_HEADERS       $mod = ($ps = Get-Process -Id $PID).Modules.Where{         $_.ModuleName -match 'ntdll'}.BaseAddress), 0x3C       )     ) + [Marshal]::SizeOf([UInt32]0)     $ps.Dispose()      $j = switch ([BitConverter]::ToUInt16( # IMAGE_FILE_HEADER->Machine       [BitConverter]::GetBytes([Marshal]::ReadInt16($mod, $jmp)), 0)     ) { # \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 VA \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430       0x0014C { 0x20, 0x78, 0x7C }       0x08664 { 0x40, 0x88, 0x8C }       default { throw [SystemException]::new() }     }      $tmp, $fun = $mod.\"ToInt$($j[0])\"(), @{}     $va, $sz = $j[1..2].ForEach{[Marshal]::ReadInt32($mod, $mov + $_)}     ($e=@{bs=0x10;nf=0x14;nn=0x18;af=0x1C;an=0x20;ao=0x24}).Keys.ForEach{       $$ = [Marshal]::ReadInt32($mod, $va + $e.$_)       Set-Variable -Name $_ -Value ($_.StartsWith('a') ? $tmp + $$ : $$) -Scope Script     }      function Assert-Forwarder([UInt32]$fa) {end{($va -le $fa) -and ($fa -lt ($va + $sz))}}     (0..($nf - 1)).ForEach{       $fun[$bs + $_] = (         Assert-Forwarder ($fa = [Marshal]::ReadInt32([IntPtr]($af + $_ * 4)))       ) ? @{Address = ''; Forward = [Marshal]::PtrToStringAnsi([IntPtr]($tmp + $fa))}         : @{ Address = [IntPtr]($tmp + $fa); Forward = '' }     }     (0..($nn - 1)).ForEach{       [PSCustomObject]@{         Ordinal = ($ord = $bs + [Marshal]::ReadInt16([IntPtr]($ao + $_ * 2)))         Address = $fun[$ord].Address         Name = [Marshal]::PtrToStringAnsi(           [IntPtr]($tmp + [Marshal]::ReadInt32([IntPtr]($an + $_ * 4)))         )         ForwarderTo = $fun[$ord].Forward       }     }   } }<\/code><\/pre>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u043e\u0436\u043d\u043e &#171;\u0441\u0432\u044f\u0437\u0430\u0432&#187; \u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u043e\u0439 \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"powershell\">$EstablishConnection = {   param(     [IntPtr]$Address,     [Type]$Prototype,     [CallingConvention]$CallingConvention = 'StdCall'   )    end {     $method = $Prototype.GetMethod('Invoke')     $returntype, $paramtypes = $method.ReturnType, ($method.GetParameters().ParameterType ?? $null)     $il, $to_i = ($holder = [DynamicMethod]::new('Invoke', $returntype, $paramtypes, $Prototype)     ).GetILGenerator(), \"ToInt$(($sz = [IntPtr]::Size) * 8)\"     if ($paramtypes) { (0..($paramtypes.Length - 1)).ForEach{$il.Emit([OpCodes]::ldarg, $_)} }     $il.Emit([OpCodes]::\"ldc_i$sz\", $Address.$to_i())     $il.EmitCalli([OpCodes]::calli, $CallingConvention, $returntype, $paramtypes)     $il.Emit([OpCodes]::ret)     $holder.CreateDelegate($Prototype)   } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c (\u0441\u043d\u043e\u0432\u0430 \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430) PEB \u0445\u043e\u0441\u0442\u0430 pwsh:<\/p>\n<pre><code class=\"powershell\">$signature = (&amp; $GetNtdllExports).Where{$_.Name -ceq 'NtQueryInformationProcess'} Set-Variable -Name NtQueryInformationProcess -Value (   $EstablishConnection.Invoke($signature.Address, [Func[IntPtr, UInt32, [Byte[]], UInt32, [Byte[]], Int32]]) ) -Scope Script -Option Const  $buffer = [Byte[]]::new((($sz = [IntPtr]::Size) -eq 8 ? 0x30 : 0x18)) if ($NtQueryInformationProcess.Invoke([IntPtr]-1, 0, $buffer, $buffer.Length, $null) -ne 0) {   throw [InvalidOperationException]::new() } \"PEB: 0x{0:X$($sz * 2)}\" -f [BitConverter]::\"ToInt$($sz * 8)\"(($sz -eq 8 ? $buffer[8..15] : $buffer[4..7]), 0)<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a &#171;\u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435&#187; \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430, \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 <em>ref<\/em> \u0438 <em>out<\/em>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0439\u0442\u0438 \u043d\u0430 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0444\u0435\u0440\u044b. \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0442\u0435\u043c\u0438 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0443 \u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, HANDLE \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f)? \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435 &#8212; \u043c\u0435\u0442\u043e\u0434 <em>MakeNewCustomDelegate<\/em> \u0442\u0438\u043f\u0430 <em>DelegateHelpers<\/em>. \u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0434\u0430\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043c\u0430\u043d\u0451\u0432\u0440\u0430. \u041d\u043e \u0438 \u043d\u0430 \u043d\u0438\u0445 \u0441\u0432\u0435\u0442 \u043a\u043b\u0438\u043d\u043e\u043c \u043d\u0435 \u0441\u043e\u0448\u0451\u043b\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0432\u0438\u0434\u0443 \u043b\u0438\u0431\u0435\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0440\u0430\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET (\u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0443 <em>Core<\/em>), \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0443\u0442\u044c \u043a \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u043e\u0449\u0440\u0451\u043d\u043d\u044b\u043c \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 API. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435-\u043a\u0430 \u0431\u043b\u0438\u0436\u0435 \u043a \u0442\u0435\u043c\u0435.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 pwsh \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u0435\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u0442\u0430\u0433\u043d\u0430\u0446\u0438\u0438. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b: \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0434\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e \u0443\u043c\u0430, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0448\u0430\u0433\u043e\u0432 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 (\u0445\u043e\u0442\u044f \u044d\u0442\u0438\u043c \u0433\u0440\u0435\u0448\u0430\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 Python); \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 pwsh \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u0430 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 SCM (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0442\u043e\u0442 \u0436\u0435 CSV, Git \u0438 \u0442.\u0434.) \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 gdb \u0438 WinDbg (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u043f\u0440\u0430\u0432\u0434\u0430, \u0445\u043e\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>JavaScript<\/em>), &#8212; \u0441\u043b\u043e\u0432\u043e\u043c, \u0432 \u043d\u0451\u043c \u043d\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438 \u0447\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e (\u0442\u043e\u0442 \u0436\u0435 Python). \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, pwsh \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0448\u0442\u0443\u0440\u043c\u043e\u0432\u0430\u0442\u044c \u0430\u043c\u0431\u0438\u0446\u0438\u044f\u043c\u0438, \u0430 \u043d\u0435 \u0434\u0435\u043b\u043e\u043c. \u0410 \u044d\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/581942\/\"> https:\/\/habr.com\/ru\/articles\/581942\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0443\u0436\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0434\u0430\u0432\u043d\u043e \u043f\u0440\u043e\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0440\u0443\u0431\u0435\u0436 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b, PowerShell (\u0434\u0430\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e <em>pwsh<\/em>) \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0442\u043e\u043f\u043e\u0432\u044b\u0445 \u043f\u043e\u0437\u0438\u0446\u0438\u0439 \u0441\u0440\u0435\u0434\u0438 \u043f\u0440\u043e\u0447\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432, \u0447\u0442\u043e, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043d\u0438\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u0435\u0442 \u043a\u0438\u0431\u0435\u0440\u043f\u0440\u0435\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c. \u041f\u0435\u0440\u0432\u044b\u0439 \u0437\u043b\u043e\u0432\u0440\u0435\u0434 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u0435\u0449\u0451 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0447\u0435\u0433\u043e \u0448\u0435\u043b\u043b\u0430, \u0437\u0430\u0442\u0435\u043c \u0431\u044b\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u043f\u043e\u0441\u0442\u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 &#171;\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438&#187; \u0434\u043b\u044f \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u043d\u0443 \u0430 \u0442\u0430\u043c \u0443\u0436 \u0438 \u0430\u043d\u0435\u043a\u0434\u043e\u0442\u043e\u0432 \u043d\u0430\u0441\u043e\u0447\u0438\u043d\u044f\u043b\u0438. \u0412 \u0441\u043c\u044b\u0441\u043b\u0435, \u0431\u044b\u043b\u0430 \u043f\u043e\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043c\u0430\u0441\u0441\u0430 \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0432 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u0431\u0430\u0440\u0430\u0445\u043b\u0430 \u0432\u0440\u043e\u0434\u0435 <em>tips of day<\/em> \u0438\u043b\u0438 <em>how to do<\/em>. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 <em>pwsh<\/em> \u0433\u0440\u043e\u0437\u0438\u043b\u0430 \u043f\u0435\u0440\u0435\u0440\u0430\u0441\u0442\u0438 \u0432 \u043d\u0435\u043a\u0438\u0439 <em>stand up<\/em>, \u0435\u0441\u043b\u0438 \u0431\u044b \u043d\u0435 \u0432\u043d\u0435\u0437\u0430\u043f\u043d\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u043b\u0443\u0447\u0438\u0432\u0448\u0430\u044f\u0441\u044f \u043a\u0440\u043e\u0441\u0441\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439-\u0442\u043e \u0438 \u0441\u043f\u043e\u0442\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0440\u044f\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u043c\u0430\u0442\u0451\u0440\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043f\u0438\u0441\u0430\u0442\u0435\u043b\u044f\u0445. \u041a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043d\u043e \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c pwsh \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u044f\u0442\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e. \u041c\u0435\u0436\u0434\u0443 \u0442\u0435\u043c \u043c\u0430\u043b\u0432\u0430\u0440\u044c, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 pwsh, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u043f\u043e\u0434 Linux, \u0438 \u043f\u043e\u0434 MacOS, \u0447\u0442\u043e \u0432\u0435\u043b\u0438\u043a\u043e\u0434\u0443\u0448\u043d\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0418\u0411 \u044d\u043a\u0441\u043f\u0435\u0440\u0442\u0430\u043c\u0438, &#8212; \u0432\u0438\u043d\u0438\u0442\u044c \u0432\u043e \u0432\u0441\u0451\u043c Microsoft \u0443\u0436\u0435 \u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043e\u0448\u043b\u043e \u0432 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0443.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u0435 pwsh \u043b\u0435\u0436\u0438\u0442 \u0432\u043f\u043e\u043b\u043d\u0435 \u0431\u043b\u0430\u0433\u0430\u044f \u0438\u0434\u0435\u044f: \u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430\u043c \u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043e\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430 (\u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0431\u044b\u043b\u043e \u0438 \u0441 <em>Tcl<\/em>). \u041d\u043e, \u043a\u0430\u043a \u043e\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0431\u044b\u0432\u0430\u0435\u0442, \u0445\u043e\u0440\u043e\u0448\u0435\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u0437\u0430\u043b\u043e\u0436\u043d\u0438\u043a\u043e\u043c \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u043b\u0443\u0447\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438 \u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u044b\u043d\u0435 \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u0435\u0442 pwsh, \u0431\u043e\u043b\u0435\u0435 \u043d\u0430\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u0442\u0443\u043f\u0438\u043a, \u043d\u0435\u0436\u0435\u043b\u0438 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b. \u0420\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0443 \u0443\u0436\u0435 \u043d\u0435\u043a\u0443\u0434\u0430, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043e\u0431\u0440\u0430\u0441\u0442\u0430\u0442\u044c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0430\u0445\u0430\u0440\u043e\u043c \u0438\u043b\u0438 \u0434\u043e\u0432\u0435\u0441\u0442\u0438 \u0434\u043e \u0443\u043c\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432\u0432\u0435\u0441\u0442\u0438 \u0442\u0430\u043a\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u044b, \u0434\u0430 \u043a\u043e\u0435-\u0447\u0442\u043e \u043f\u043e \u043c\u0435\u043b\u043e\u0447\u0438. \u0418\u043b\u0438 \u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u0432\u043e\u0440\u043e\u0442 \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u0442\u0438\u043b\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u0430\u043a \u044d\u0442\u043e \u043d\u044b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0432 <em>C++<\/em>. \u041e \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 <em>\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u043c API<\/em> \u0440\u0435\u0447\u044c \u043d\u0435 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 pwsh \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 <em>DllImport<\/em> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442 pwsh \u0432 \u043d\u0435\u043a\u043e\u0435 \u043f\u043e\u0434\u043e\u0431\u0438\u0435 <em>C#<\/em> \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u0430, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u0441\u0430\u043c\u043e\u043c pwsh \u043c\u043e\u0436\u043d\u043e \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0440\u043c\u043e\u0437\u043d\u0443\u0442\u043e\u0433\u043e <em>Add-Type<\/em> \u0432 \u043f\u043e\u043b\u044c\u0437\u0443, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c &#171;\u043d\u0430\u043b\u0435\u0442\u0443&#187;, \u0447\u0430\u0439 \u0432\u0435\u0434\u044c <em>Get-Process<\/em> \u043b\u044e\u0431\u0435\u0437\u043d\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u0438\u043c\u0438\u0434\u0436\u0435\u0439, \u0430 \u0442\u0430\u043c, \u0432\u043e\u043e\u0440\u0443\u0436\u0438\u0432\u0448\u0438\u0441\u044c \u0437\u043d\u0430\u043d\u0438\u044f\u043c\u0438 \u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 PE \u0438\u043b\u0438 ELF (\u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e MacOS \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043c\u043e\u0433\u0443 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0438\u0431\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0437\u0436\u0438\u0442\u044c\u0441\u044f \u0438\u043c \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0430\u0442\u044c \u043f\u043e\u0447\u043a\u0443), \u0433\u043b\u044f\u043d\u0443\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043d\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442. \u041a\u043e\u043d\u0446\u0435\u043f\u0442\u0443\u0430\u043b\u044c\u043d\u043e (\u0434\u043b\u044f Windows) \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"powershell\">$GetNtdllExports = {   end {     $jmp = ($mov = [Marshal]::ReadInt32(( # IMAGE_NT_HEADERS       $mod = ($ps = Get-Process -Id $PID).Modules.Where{         $_.ModuleName -match 'ntdll'}.BaseAddress), 0x3C       )     ) + [Marshal]::SizeOf([UInt32]0)     $ps.Dispose()      $j = switch ([BitConverter]::ToUInt16( # IMAGE_FILE_HEADER->Machine       [BitConverter]::GetBytes([Marshal]::ReadInt16($mod, $jmp)), 0)     ) { # \u0431\u0438\u0442\u043d\u043e\u0441\u0442\u044c, \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043d\u0430 VA \u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430       0x0014C { 0x20, 0x78, 0x7C }       0x08664 { 0x40, 0x88, 0x8C }       default { throw [SystemException]::new() }     }      $tmp, $fun = $mod.\"ToInt$($j[0])\"(), @{}     $va, $sz = $j[1..2].ForEach{[Marshal]::ReadInt32($mod, $mov + $_)}     ($e=@{bs=0x10;nf=0x14;nn=0x18;af=0x1C;an=0x20;ao=0x24}).Keys.ForEach{       $$ = [Marshal]::ReadInt32($mod, $va + $e.$_)       Set-Variable -Name $_ -Value ($_.StartsWith('a') ? $tmp + $$ : $$) -Scope Script     }      function Assert-Forwarder([UInt32]$fa) {end{($va -le $fa) -and ($fa -lt ($va + $sz))}}     (0..($nf - 1)).ForEach{       $fun[$bs + $_] = (         Assert-Forwarder ($fa = [Marshal]::ReadInt32([IntPtr]($af + $_ * 4)))       ) ? @{Address = ''; Forward = [Marshal]::PtrToStringAnsi([IntPtr]($tmp + $fa))}         : @{ Address = [IntPtr]($tmp + $fa); Forward = '' }     }     (0..($nn - 1)).ForEach{       [PSCustomObject]@{         Ordinal = ($ord = $bs + [Marshal]::ReadInt16([IntPtr]($ao + $_ * 2)))         Address = $fun[$ord].Address         Name = [Marshal]::PtrToStringAnsi(           [IntPtr]($tmp + [Marshal]::ReadInt32([IntPtr]($an + $_ * 4)))         )         ForwarderTo = $fun[$ord].Forward       }     }   } }<\/code><\/pre>\n<p>\u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0435\u0439 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u043c\u043e\u0436\u043d\u043e &#171;\u0441\u0432\u044f\u0437\u0430\u0432&#187; \u0430\u0434\u0440\u0435\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u043c\u043e\u0439 \u043d\u0430\u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u043c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440:<\/p>\n<pre><code class=\"powershell\">$EstablishConnection = {   param(     [IntPtr]$Address,     [Type]$Prototype,     [CallingConvention]$CallingConvention = 'StdCall'   )    end {     $method = $Prototype.GetMethod('Invoke')     $returntype, $paramtypes = $method.ReturnType, ($method.GetParameters().ParameterType ?? $null)     $il, $to_i = ($holder = [DynamicMethod]::new('Invoke', $returntype, $paramtypes, $Prototype)     ).GetILGenerator(), \"ToInt$(($sz = [IntPtr]::Size) * 8)\"     if ($paramtypes) { (0..($paramtypes.Length - 1)).ForEach{$il.Emit([OpCodes]::ldarg, $_)} }     $il.Emit([OpCodes]::\"ldc_i$sz\", $Address.$to_i())     $il.EmitCalli([OpCodes]::calli, $CallingConvention, $returntype, $paramtypes)     $il.Emit([OpCodes]::ret)     $holder.CreateDelegate($Prototype)   } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c (\u0441\u043d\u043e\u0432\u0430 \u043b\u0438\u0448\u044c \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430) PEB \u0445\u043e\u0441\u0442\u0430 pwsh:<\/p>\n<pre><code class=\"powershell\">$signature = (&amp; $GetNtdllExports).Where{$_.Name -ceq 'NtQueryInformationProcess'} Set-Variable -Name NtQueryInformationProcess -Value (   $EstablishConnection.Invoke($signature.Address, [Func[IntPtr, UInt32, [Byte[]], UInt32, [Byte[]], Int32]]) ) -Scope Script -Option Const  $buffer = [Byte[]]::new((($sz = [IntPtr]::Size) -eq 8 ? 0x30 : 0x18)) if ($NtQueryInformationProcess.Invoke([IntPtr]-1, 0, $buffer, $buffer.Length, $null) -ne 0) {   throw [InvalidOperationException]::new() } \"PEB: 0x{0:X$($sz * 2)}\" -f [BitConverter]::\"ToInt$($sz * 8)\"(($sz -eq 8 ? $buffer[8..15] : $buffer[4..7]), 0)<\/code><\/pre>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a &#171;\u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u0435&#187; \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430, \u043d\u0430 \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b, \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u0442\u0438\u043f\u043e\u043c \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u043e\u0432 (\u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 <em>ref<\/em> \u0438 <em>out<\/em>), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0439\u0442\u0438 \u043d\u0430 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0444\u0435\u0440\u044b. \u0410 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0442\u0435\u043c\u0438 \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0431\u0443\u0444\u0435\u0440\u0430\u043c\u0438 \u0432 \u0432\u0438\u0434\u0443 \u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, HANDLE \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u044f)? \u041f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044e, \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435 &#8212; \u043c\u0435\u0442\u043e\u0434 <em>MakeNewCustomDelegate<\/em> \u0442\u0438\u043f\u0430 <em>DelegateHelpers<\/em>. \u041f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0440\u043e\u0434\u0430 \u0442\u0435\u0445\u043d\u0438\u043a\u0438 \u0434\u0430\u044e\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0432\u043d\u0443\u0448\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043c\u0430\u043d\u0451\u0432\u0440\u0430. \u041d\u043e \u0438 \u043d\u0430 \u043d\u0438\u0445 \u0441\u0432\u0435\u0442 \u043a\u043b\u0438\u043d\u043e\u043c \u043d\u0435 \u0441\u043e\u0448\u0451\u043b\u0441\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0432\u0438\u0434\u0443 \u043b\u0438\u0431\u0435\u0440\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0440\u0430\u0435\u0443\u0433\u043e\u043b\u044c\u043d\u044b\u0445 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b .NET (\u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0443 <em>Core<\/em>), \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0431\u0435\u0433\u043d\u0443\u0442\u044c \u043a \u0431\u043e\u043b\u0435\u0435 \u0438\u0437\u043e\u0449\u0440\u0451\u043d\u043d\u044b\u043c \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c \u0432 \u043f\u043b\u0430\u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 API. \u041d\u043e \u0434\u0430\u0432\u0430\u0439\u0442\u0435-\u043a\u0430 \u0431\u043b\u0438\u0436\u0435 \u043a \u0442\u0435\u043c\u0435.<\/p>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 pwsh \u043f\u0440\u0435\u0431\u044b\u0432\u0430\u0435\u0442 \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0441\u0442\u0430\u0433\u043d\u0430\u0446\u0438\u0438. \u041a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0431\u044b: \u0447\u0442\u043e-\u0442\u043e \u043f\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u0434\u043e\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u043e \u0443\u043c\u0430, \u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0438\u0430\u043b\u044c\u043d\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f. \u0411\u043e\u043b\u0435\u0435 \u0442\u043e\u0433\u043e, \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0448\u0430\u0433\u043e\u0432 \u043d\u0435 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 (\u0445\u043e\u0442\u044f \u044d\u0442\u0438\u043c \u0433\u0440\u0435\u0448\u0430\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440\u043e\u0432, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u043b\u044e\u0431\u0438\u043c\u044b\u0439 Python); \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430 pwsh \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u0430 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 SCM (\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u0442\u043e\u0442 \u0436\u0435 CSV, Git \u0438 \u0442.\u0434.) \u0438 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0430\u043c\u0438 \u0432\u0440\u043e\u0434\u0435 gdb \u0438 WinDbg (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439, \u043f\u0440\u0430\u0432\u0434\u0430, \u0445\u043e\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>JavaScript<\/em>), &#8212; \u0441\u043b\u043e\u0432\u043e\u043c, \u0432 \u043d\u0451\u043c \u043d\u0435\u0442 \u043c\u043d\u043e\u0433\u043e\u0433\u043e \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e-\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438 \u0447\u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0441\u044c\u043c\u0430 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e (\u0442\u043e\u0442 \u0436\u0435 Python). \u0418\u043d\u0430\u0447\u0435 \u0433\u043e\u0432\u043e\u0440\u044f, pwsh \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0448\u0442\u0443\u0440\u043c\u043e\u0432\u0430\u0442\u044c \u0430\u043c\u0431\u0438\u0446\u0438\u044f\u043c\u0438, \u0430 \u043d\u0435 \u0434\u0435\u043b\u043e\u043c. \u0410 \u044d\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0448\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/581942\/\"> https:\/\/habr.com\/ru\/articles\/581942\/<\/a><br \/><\/br><\/br><\/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-392191","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/392191","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=392191"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/392191\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=392191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=392191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=392191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}