{"id":333452,"date":"2022-05-20T21:00:34","date_gmt":"2022-05-20T21:00:34","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=333452"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=333452","title":{"rendered":"<span>Windows Chrome: \u0418\u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0437\u0432\u0443\u043a\u0430 \u043f\u043e Bluetooth<\/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<p>\u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043c\u044b \u043a\u0443\u043f\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u043d\u0430 Windows \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Mac&#8217;\u0430\u043c\u0438. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c &#8212; \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432\u0438\u0434\u0435\u043e \u0437\u0432\u0443\u043a \u0432 Bluetooth \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0430\u0445 \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u0432\u0438\u0434\u0435\u043e, \u043f\u0440\u0438\u0447\u0451\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f slow motion \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435, \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 200\u043c\u0441. \u042d\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u0438 \u044d\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0447\u044c \u0432 \u0432\u0438\u0434\u0435\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7fd\/e34\/d33\/7fde34d33862e919d8bd4184f93e7809.png\" alt=\"200\u043c\u0441 \u0434\u0430\u0436\u0435 \u043d\u0435\u0442 \u043d\u0430 \u0448\u043a\u0430\u043b\u0435\" title=\"200\u043c\u0441 \u0434\u0430\u0436\u0435 \u043d\u0435\u0442 \u043d\u0430 \u0448\u043a\u0430\u043b\u0435\" width=\"1190\" height=\"672\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7fd\/e34\/d33\/7fde34d33862e919d8bd4184f93e7809.png\"\/><figcaption>200\u043c\u0441 \u0434\u0430\u0436\u0435 \u043d\u0435\u0442 \u043d\u0430 \u0448\u043a\u0430\u043b\u0435<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4b4\/1d2\/dd4\/4b41d2dd47d1a5c739828c56eb7d26b7.png\" alt=\"Windows: 200ms, Mac: 0ms\" title=\"Windows: 200ms, Mac: 0ms\" width=\"1390\" height=\"838\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4b4\/1d2\/dd4\/4b41d2dd47d1a5c739828c56eb7d26b7.png\"\/><figcaption>Windows: 200ms, Mac: 0ms<\/figcaption><\/figure>\n<p>\u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0430 \u043c\u0430\u043a\u0435 \u043d\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438. \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h2>\u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0437\u0432\u0443\u043a\u0430<\/h2>\n<p>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0437\u0432\u0443\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0427\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 &#8212; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0432\u0443\u043a\u0435 (\u0432 \u0432\u0438\u0434\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432) \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0432\u0443\u043a (\u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439 \u0441\u0440\u0435\u0434\u044b) \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u0443\u0448\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 200\u043c\u0441 &#8212; \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0432\u0443\u043a \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 70 \u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0441\u0438\u0434\u0435\u043b\u0438 \u0432 70 \u043c\u0435\u0442\u0440\u0430\u0445 \u043e\u0442 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430, 200\u043c\u0441 \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u044b \u043d\u0435 \u0441\u0438\u0434\u0438\u043c \u0432 70 \u043c\u0435\u0442\u0440\u0430\u0445. \u0410 \u0441\u0432\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0447\u044c. \u0422\u0443\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u043d \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e. Bluetooth &#8212; \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u0430\u044f \u0448\u0443\u043c\u0430\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0427\u0442\u043e\u0431\u044b \u0437\u0432\u0443\u043a \u0448\u0451\u043b \u043f\u043b\u0430\u0432\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 (\u043f\u043e\u0447\u0442\u0438) \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f &#8212; \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0437\u0430\u0441\u0442\u0440\u044f\u043b\u0430 \u043f\u043e \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u0437\u0432\u0443\u043a \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430. <\/p>\n<p>\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u0438 \u0433\u0440\u0443\u0431\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 &#8212; \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/456182\/#:~:text=Audio%20transmission%20latency\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c). \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c &#8212; \u0447\u0435\u0440\u0435\u0437 Bluetooth <strong>\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u0430<\/strong>. \u042d\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0435 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438 (\u0445\u043e\u0442\u044f \u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430).<\/p>\n<p>\u0415\u0441\u0442\u044c aptX LL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u043d\u0438 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438, \u043d\u0438 \u043d\u043e\u0443\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442. \u0417\u043d\u0430\u0447\u0438\u0442, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c ~130\u043c\u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438.<\/p>\n<h3>\u0410 Mac?<\/h3>\n<p>\u041e\u043a\u0435\u0439, \u043d\u043e \u0432\u0435\u0434\u044c \u043c\u0430\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0437\u0432\u0443\u043a \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 <a href=\"https:\/\/gurux13.ddns.net\/beep.html\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 HTML<\/a>, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u043a \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0430\u0443\u0434\u0438\u043e <em>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e<\/em>, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 ~200\u043c\u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/567\/bff\/f01\/567bfff0176c9acb8a8345462f63c80e.png\" alt=\"\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 ~200ms \" title=\"\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 ~200ms \" width=\"632\" height=\"843\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/567\/bff\/f01\/567bfff0176c9acb8a8345462f63c80e.png\"\/><figcaption>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 ~200ms <\/figcaption><\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e (\u044e\u0442\u0443\u0431), \u043c\u0430\u043a<em> <\/em>\u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438 \u0437\u0432\u0443\u043a. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u0447\u043d\u0451\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 200\u043c\u0441 \u043f\u043e\u0437\u0436\u0435, \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435. \u0418\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0443, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u043c\u0430\u043a \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u043e\u0432, \u0447\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d\u0438 \u0432\u044b\u0432\u0435\u0434\u0443\u0442 \u0437\u0432\u0443\u043a, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432\u0438\u0434\u0435\u043e \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439. <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u0430\u043a \u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 <em>\u0432\u0438\u0434\u0438\u043c\u0443\u044e<\/em> \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0445\u043e\u0442\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u042f \u0445\u043e\u0447\u0443 \u0431\u044b\u0442\u044c \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044b\u043c! <\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0432\u0438\u043d\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442? \u0421\u0438\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u0439\u043d\u0430 \u0432\u0435\u043b\u0438\u043a\u0430\u044f. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 &#8212; \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0433\u0430\u0434\u043a\u0443, \u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u043b \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c. <\/p>\n<p><strong>\u0426\u0435\u043b\u044c: <\/strong>\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0445\u0440\u043e\u043c \u043f\u043e\u0434 \u0432\u0438\u043d\u0434\u043e\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0445\u0440\u043e\u043c\u0430\/\u0432\u0438\u043d\u0434\u044b \u0432\u0441\u0451 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u0437\u043d\u0430\u0442\u044c \u0443 bluetooth \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0433\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043f\u043e\u0434 \u0432\u0438\u043d\u0434\u0443 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0435\u0442.<\/p>\n<h2>Chrome<\/h2>\n<p>\u041c\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0434\u0440\u044f\u0434, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 200\u043c\u0441 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c. \u0417\u043d\u0430\u0447\u0438\u0442, \u043e\u043d \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0432 Chrome \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0438 \u0442\u043e\u0442 \u0443\u0436\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e. <\/p>\n<p>\u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/mac\/audio_auhal_mac.cc#L203\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e<\/a> \u0432 \u043a\u043e\u0434\u0435 \u0445\u0440\u043e\u043c\u0430, \u0433\u0434\u0435 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0438 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/mac\/audio_manager_mac.cc#L1066\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/a>, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u041f\u043e\u0434 \u0432\u0438\u043d\u0434\u043e\u0439, \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/win\/audio_low_latency_output_win.cc#L698\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043a\u043e\u0434<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/audioclient\/nf-audioclient-iaudioclock-getposition\" rel=\"noopener noreferrer nofollow\">IAudioClock::GetPosition<\/a>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u043d\u0434\u0430 \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u0430\u0443\u0434\u0438\u043e-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432 \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a <code>GetPosition<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\MMDevices\\Audio\\Render\\{GUID}\\Parameter<\/code><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/719\/311\/348\/719311348f0a51af6fdf6061da0a85dc.png\" alt=\"\u0427\u0442\u043e \u044d\u0442\u043e?\" title=\"\u0427\u0442\u043e \u044d\u0442\u043e?\" width=\"916\" height=\"194\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/719\/311\/348\/719311348f0a51af6fdf6061da0a85dc.png\"\/><figcaption>\u0427\u0442\u043e \u044d\u0442\u043e?<\/figcaption><\/figure>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0438\u0448\u043a\u0430\u0445 <code>GetPosition<\/code> \u0438 \u0435\u0451 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c \u0431\u0435\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u043e. \u042d\u0442\u043e COM, \u0432\u0435\u0441\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445, \u0438 \u0442\u0430\u043c \u0447\u0451\u0440\u0442 \u043d\u043e\u0433\u0443 \u0441\u043b\u043e\u043c\u0438\u0442. \u041e\u0431\u0438\u0434\u043d\u043e: \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b \u0440\u0435\u0448\u0435\u043d\u0430&#8230;<\/p>\n<p>\u041d\u043e \u043b\u0430\u0434\u043d\u043e, \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0445\u0440\u043e\u043c \u0433\u043e\u0442\u043e\u0432 \u043a \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u043e\u0434 \u0432\u0438\u043d\u0434\u043e\u0439, \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0430 \u043e \u043d\u0435\u0439 \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442. \u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u043b\u0430? \u041a\u0430\u0447\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0445\u0440\u043e\u043c\u0430, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443, \u0438 \u043f\u0430\u0442\u0447\u0438\u043c <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/win\/audio_low_latency_output_win.cc#L698\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442 \u043a\u043e\u0434<\/a> \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e7f\/708\/115\/e7f7081155e01c55695729c9de279a00.png\" width=\"740\" height=\"89\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e7f\/708\/115\/e7f7081155e01c55695729c9de279a00.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e <a href=\"https:\/\/chromium.googlesource.com\/chromium\/src\/+\/main\/docs\/windows_build_instructions.md\" rel=\"noopener noreferrer nofollow\">\u043e\u0444. \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a>. \u041f\u0440\u043e\u0448\u043b\u043e 6 \u0447\u0430\u0441\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438, <abbr title=\"\u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c - \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u0430\u0434\u0430\u043b\u0438 \u0441 access violation. \u0425\u0440\u043e\u043c, \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\/\u0438\u043b\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e?\" type=\"abbr\">\u0445\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441\u044f<\/abbr>. \u0418 \u0432\u0438\u0434\u0435\u043e \u0441\u0442\u0430\u043b\u043e \u043e\u043f\u0435\u0440\u0435\u0436\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e \u043d\u0430 ~200 \u043c\u0441! \u0417\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043d\u043e, \u0445\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443.<\/p>\n<p>\u041c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0445\u0440\u043e\u043c \u0438, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 \u0432 <code>chrome:\/\/flags<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443. \u041d\u043e \u044f \u043c\u043e\u0433\u0443 \u0441\u0435\u0431\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u043e\u0439 \u0444\u043b\u0430\u0433 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0445\u0440\u043e\u043c\u0443. \u0418 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044d\u0442\u043e \u0437\u0430\u0439\u043c\u0451\u0442 \u0443\u0439\u043c\u0443, \u0438 \u0448\u0430\u043d\u0441 \u043d\u0430 \u0443\u0441\u043f\u0435\u0445 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0436 \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c <a href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/detail?id=1206201\" rel=\"noopener noreferrer nofollow\">\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0431\u0430\u0433 \u043f\u043e\u0434 \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u043c<\/a>.<\/p>\n<h2>Hack<\/h2>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/3be\/909\/c6b\/3be909c6bf6b65d49e15540cf6445eba.jpg\" width=\"600\" height=\"779\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3be\/909\/c6b\/3be909c6bf6b65d49e15540cf6445eba.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>COM \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432 Chrome \u0441\u0432\u043e\u044e DLL, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u043c \u0438\u0437 <code>GetPosition<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0445\u0440\u043e\u043c\u0430<\/p>\n<\/li>\n<li>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0439 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0430\u0443\u0434\u0438\u043e<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c DLL \u0432 Chrome. Chrome &#8212; \u044d\u0442\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0438 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430, \u043f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/security.stackexchange.com\/questions\/255093\/how-does-chrome-78-block-all-methods-of-dll-injection\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c <\/a>\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0449\u0438\u0442\u044b, \u0438 \u043e\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u043e &#8212; \u043c\u043e\u0436\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u043e\u043c Microsoft. \u0428\u0430\u043d\u0441\u043e\u0432, \u0447\u0442\u043e MS \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u0442 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043d\u0435 \u0442\u043e \u0447\u0442\u043e \u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0442, \u043d\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u044d\u0442\u0430 \u0438\u0437 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u043e\u0441\u043e\u0431\u043e \u043c\u0430\u043b\u044b\u0445. <\/p>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u0442\u044c \u0433\u0438\u0442\u0445\u0430\u0431 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442 DLL \u0432 \u0445\u0440\u043e\u043c! \u0421\u043c. <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. \u041a\u0430\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c-\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0438 \u0432\u0438\u0434\u0438\u043c \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/487\/7f0\/691\/4877f0691f7190ec28ff5d067c41eb62.png\" alt=\"\u0421\u043f\u0438\u0441\u043e\u043a DLL chrome.exe\" title=\"\u0421\u043f\u0438\u0441\u043e\u043a DLL chrome.exe\" width=\"698\" height=\"151\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/487\/7f0\/691\/4877f0691f7190ec28ff5d067c41eb62.png\"\/><figcaption>\u0421\u043f\u0438\u0441\u043e\u043a DLL chrome.exe<\/figcaption><\/figure>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442, \u0445\u0440\u043e\u043c \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\u0441\u044f? \u041f\u043e\u0442\u0438\u0440\u0430\u0435\u043c \u0440\u0443\u043a\u0438 \u0438 \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u044e DLL. <\/p>\n<h3>DLL<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0440\u0430\u0431\u043e\u0442\u0443 DLL \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c <code>IAudioClock<\/code> \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c, \u0438 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0435\u0433\u043e vftable (\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439), \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 <code>IAudioClock<\/code>. <\/p>\n<p>\u0421\u0442\u0440\u043e\u0438\u043c <code>IAudioClock<\/code> \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c:<\/p>\n<pre><code class=\"cpp\">CoInitialize(NULL); \/\/ \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0438\u043d\u0444\u0440\u0443 COM CoCreateInstance( CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&amp;pEnumerator); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c IMMDeviceEnumerator  pEnumerator->GetDefaultAudioEndpoint( eRender, eConsole, &amp;pDevice); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c audio endpoint  pDevice->Activate( IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&amp;pAudioClient); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0443\u0434\u0438\u043e \u043a\u043b\u0438\u0435\u043d\u0442  pAudioClient->GetMixFormat(&amp;pwfx); \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u043e\u043b\u0443\u0447\u0438\u043c  pAudioClient->Initialize( AUDCLNT_SHAREMODE_SHARED, 0, hnsRequestedDuration, 0, pwfx, NULL); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0430\u0443\u0434\u0438\u043e-\u043a\u043b\u0438\u0435\u043d\u0442  pAudioClient->GetService(IID_PPV_ARGS(&amp;pClock)); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0430\u0441\u044b  InstallComInterfaceHooks(pClock, IID_IAudioClock); \/\/ \u0418 \u043f\u0430\u0442\u0447\u0438\u043c \u0438\u0445<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438, \u0432 \u0446\u0435\u043b\u043e\u043c, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0433\u0430\u0439\u0434\u0443 MS \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0430\u0443\u0434\u0438\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/coreaudio\/rendering-a-stream\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u043c\u0443<\/a>).<\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435<code>pClock<\/code>:<\/p>\n<pre><code class=\"cpp\">\/\/ \u041f\u0430\u0442\u0447\u0438\u0442 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434 HRESULT HookMethod(IUnknown * original, PVOID proxyMethod, PVOID * originalMethod, DWORD vtableOffset) {   \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c vftable PVOID* originalVtable = *(PVOID**)original;   \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 *originalMethod = originalVtable[vtableOffset];   \/\/ \u041f\u0430\u0442\u0447\u0438\u043c! originalVtable[vtableOffset] = proxyMethod; return S_OK; }  HRESULT InstallComInterfaceHooks(IUnknown * originalInterface, REFIID riid) { HRESULT hr = S_OK;   \/\/ \u042d\u0442\u043e \u0447\u0430\u0441\u044b? if (riid == IID_IAudioClock) { ATL::CComPtr&lt;IAudioClock> so;     \/\/ \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0447\u0430\u0441\u043e\u0432 \u0438\u0437 IUnknown - \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u043e\u043d \u0435\u0441\u0442\u044c HRESULT hr = originalInterface->QueryInterface(IID_IAudioClock, (void**)&amp;so); if (FAILED(hr)) return hr; \/\/ \u042d\u0442\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435? \u041d\u0430\u043c \u0447\u0430\u0441\u044b \u043d\u0443\u0436\u043d\u044b.    \/\/ \u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u0441 \u043f\u0430\u043c\u044f\u0442\u0438 DWORD dwOld = 0; ::VirtualProtect(*(PVOID**)(originalInterface), sizeof(LONG_PTR)*5, PAGE_READWRITE, &amp;dwOld);  DWORD tmp;     \/\/ \u041f\u0430\u0442\u0447\u0438\u043c \u043c\u0435\u0442\u043e\u0434 GetPosition     \/\/ \u0415\u0433\u043e \u043d\u043e\u043c\u0435\u0440 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 - 4 HookMethod(so, (PVOID)Hook::GetPositionOriginal, &amp;g_Context->m_OriginalGetPosition, 4);     \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a \u0431\u044b\u043b\u0430 ::VirtualProtect(*(PVOID**)(originalInterface), sizeof(LONG_PTR)*5, dwOld, &amp;tmp); } return hr; }<\/code><\/pre>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e &#8212; \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u0447\u0435\u0442\u0432\u0451\u0440\u043a\u0443, \u043d\u043e\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 vftable. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <code>IAudioClock<\/code>(<a href=\"https:\/\/github.com\/tpn\/winsdk-10\/blob\/master\/Include\/10.0.16299.0\/um\/Audioclient.h#L1214\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>), \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>GetPosition<\/code> \u0432 \u043d\u0451\u043c \u043f\u043e\u0434 \u0432\u0442\u043e\u0440\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c ( <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/audioclient\/nn-audioclient-iaudioclock\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 MSDN<\/a> \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>IAudioClock<\/code> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442 <code>IUnknown<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (<code>QueryInterface<\/code>, <code>AddRef<\/code>, <code>Release<\/code>). \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0448\u0430 <code>GetPosition<\/code> &#8212; \u043f\u044f\u0442\u0430\u044f, \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 4.<\/p>\n<p>DLL \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u0433\u043e\u0442\u043e\u0432\u0430, \u0438 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0451. \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>GetPosition<\/code>, \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u043b DLL \u0432 \u043d\u0435\u0451. \u0418 \u0432\u0441\u0451 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e!<\/p>\n<h3>Injection<\/h3>\n<p>\u042f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440\u043e\u043c<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u0445\u0440\u043e\u043c. <\/p>\n<p>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 DLL, \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a \u0441 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 <code>LoadLibrary<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 <code>CreateRemoteThread<\/code>, \u0438 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 DLL. \u0418\u0437 \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e <code>kernel32.dll<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <code>LoadLibrary<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u0430 ASLR, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0451 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 (\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <code>LoadLibrary<\/code> \u0432 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b DLL, \u0438&#8230; \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0430\u0441\u044c \u0432 \u0445\u0440\u043e\u043c, \u043d\u043e <code>GetPosition<\/code> \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f! <\/p>\n<p>\u042f \u043f\u0440\u0438\u0430\u0442\u0442\u0430\u0447\u0438\u043b\u0441\u044f \u043a chrome.exe \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c, \u0438 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e <code>GetPosition<\/code> \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0427\u0442\u043e \u0437\u0430 \u0434\u0435\u043b\u0430?<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0437\u0430 \u0437\u0432\u0443\u043a \u0432 Chrome \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0441\u043e\u0431\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f <code>audio.mojom.AudioService<\/code>. \u0418 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0445\u0440\u043e\u043c\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440 \u043d\u0435 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442, \u0438\u0437-\u0437\u0430 <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\/blob\/master\/ChromePatcherDll\/dllmain.cpp#:~:text=cmdLine.find(L%22%2D%2Dtype%3D%22)%20!%3D%20std%3A%3Awstring%3A%3Anpos\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u044d\u0442\u043e\u0439 \u0432\u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a>. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>GetPosition<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u0435 \u0431\u0435\u0434\u0430, \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c, \u0438&#8230; \u043d\u0438\u0447\u0435\u0433\u043e! \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. <\/p>\n<p>\u0412\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a \u0443\u0434\u043e\u0431\u043d\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438? \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0438\u0437\u0432\u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0434\u043d\u0443 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e <code>LoadLibrary<\/code>? \u0418 \u0447\u0442\u043e \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>bool<\/code>, \u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 <code>GetLastError<\/code>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0441\u0432\u043e\u044f? \u042f \u043e\u0442\u0432\u0435\u0447\u0443 &#8212; \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u043e! \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u0430\u0442\u0442\u0430\u0447\u0438\u0442\u044c\u0441\u044f \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 chrome.exe, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0430 \u0432 <code>LoadLibrary<\/code>, \u0438 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430. \u041e\u0448\u0438\u0431\u043a\u0430 &#8212; <code>STATUS_INVALID_IMAGE_HASH<\/code>, \u0438 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0430\u0441\u044c \u0437\u0430\u0449\u0438\u0442\u0430 \u0445\u0440\u043e\u043c\u0430. \u042d\u0442\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430 Microsoft.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e2c\/e7c\/24c\/e2ce7c24cbb3ab3a5234e0bcf8a19f22.png\" width=\"1316\" height=\"556\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e2c\/e7c\/24c\/e2ce7c24cbb3ab3a5234e0bcf8a19f22.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043c. <a href=\"http:\/\/koreahacker.org\/poc2017\/yunhai.pdf\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>, \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 29. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0445\u0440\u043e\u043c \u043d\u0435 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043d\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0434\u0435\u0442\u0435\u0439, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u0430\u0443\u0434\u0438\u043e-\u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443.<\/p>\n<p>\u041e\u0439. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/63e\/d19\/ecf\/63ed19ecf6eef4ea2773203cb3dded2b.jpg\" width=\"509\" height=\"303\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63e\/d19\/ecf\/63ed19ecf6eef4ea2773203cb3dded2b.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u043e \u0432\u0435\u0434\u044c \u043c\u043d\u0435 \u0434\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0442\u043e\u043a \u0432 \u0445\u0440\u043e\u043c\u0435 \u0438 \u043f\u0430\u043c\u044f\u0442\u044c \u0447\u0438\u0442\u0430\u0442\u044c-\u043f\u0438\u0441\u0430\u0442\u044c! \u0418 \u0432\u043e\u043e\u0431\u0449\u0435, \u0430 \u043a\u0430\u043a \u0436\u0435 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0438 \u044d\u0442\u043e \u0432\u0441\u0451 \u0434\u0435\u043b\u0430\u044e\u0442?<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0440\u0430 \u043d\u0435 \u0438\u0434\u0451\u0442 \u043a \u041c\u0430\u0433\u043e\u043c\u0435\u0442\u0443&#8230; \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0443\u0447\u043a\u0430\u043c\u0438.<\/p>\n<h3>\u0420\u0443\u0447\u043d\u043e\u0439 \u0438\u043c\u043f\u043e\u0440\u0442 DLL<\/h3>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0438\u043c\u043f\u043e\u0440\u0442 DLL? \u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 <code>LoadLibrary<\/code>, \u0447\u0435\u0433\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e?<\/p>\n<p>\u0414\u043b\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b DLL \u043d\u0443\u0436\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u043e \u0435\u0451 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c DLL \u0432 \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c reloc&#8217;\u0438<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u044b  <\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 <code>DllMain<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043c\u044b, \u0432 \u0446\u0435\u043b\u043e\u043c, \u043c\u043e\u0436\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u0438. \u0427\u0430\u0441\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 (\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430), \u0430 \u0447\u0430\u0441\u0442\u044c (\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 reloc&#8217;\u043e\u0432 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u043e\u0432, \u0432\u044b\u0437\u043e\u0432 <code>DllMain<\/code>) &#8212; \u043a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442 \u0432 chrome.exe.<\/p>\n<p>\u041a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 (loader&#8217;\u0430) \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c PIC, \u0442\u043e \u0435\u0441\u0442\u044c, poisition-independent, \u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u0447\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u0422\u043e\u0433\u0434\u0430 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u0432 \u043e\u0431\u043e\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445. <\/p>\n<p>\u041d\u0430\u0448\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0441\u044b\u043b\u0430\u0442\u044c\u0441\u044f \u043d\u0438 \u043d\u0430 \u043a\u0430\u043a\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b Microsoft. \u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 &#8212; \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0432\u0435 \u0441 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0438 \u043e\u043d\u0438 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u044b. <\/p>\n<details class=\"spoiler\">\n<summary>\u041a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 &#8212; \u043c\u043d\u043e\u0433\u0430\u0431\u0443\u043a\u0430\u0432<\/summary>\n<div class=\"spoiler__content\">\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u043c \u043a\u043e\u0434 \u0437\u0430\u0433\u0440\u0443\u0437\u0447\u0438\u043a\u0430 &#8212; \u043e\u043d \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0439, \u043d\u043e \u0434\u043b\u0438\u043d\u043d\u044b\u0439. \u042f \u0443\u0431\u0440\u0430\u043b \u0432\u0441\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043e\u0448\u0438\u0431\u043e\u043a \u0434\u043b\u044f \u043a\u0440\u0430\u0442\u043a\u043e\u0441\u0442\u0438.<\/p>\n<pre><code class=\"cpp\">\/\/ \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0434\u043b\u044f \u043b\u043e\u0430\u0434\u0435\u0440\u0430  typedef struct _MANUAL_INJECT {     PVOID ImageBase;     PIMAGE_NT_HEADERS NtHeaders;     PIMAGE_BASE_RELOCATION BaseRelocation;     PIMAGE_IMPORT_DESCRIPTOR ImportDirectory;     pLoadLibraryA fnLoadLibraryA;     pGetProcAddress fnGetProcAddress; } MANUAL_INJECT, * PMANUAL_INJECT; \/\/ \u043a\u043e\u0434 \u043b\u043e\u0430\u0434\u0435\u0440\u0430, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043d\u0430 _MANUAL_INJECT DWORD WINAPI LoadDll(PVOID p) { \/\/ \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f      ManualInject = (PMANUAL_INJECT)p;      pIBR = ManualInject->BaseRelocation;        \/\/ \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e ImageBase \u0438\u0437 \u0444\u0430\u0439\u043b\u0430     delta = (ULONGLONG)((LPBYTE)ManualInject->ImageBase - ManualInject->NtHeaders->OptionalHeader.ImageBase);       \/\/ Reloc'\u0438     \/\/ \u041f\u043e\u043a\u0430 \u0435\u0441\u0442\u044c \u0431\u043b\u043e\u043a\u0438...     while (pIBR->VirtualAddress)     {         \/\/ \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c reloc'\u0438         if (pIBR->SizeOfBlock >= sizeof(IMAGE_BASE_RELOCATION))         {             \/\/ \u041a\u0430\u0436\u0434\u044b\u0439 reloc - \u044d\u0442\u043e \u0441\u043b\u043e\u0432\u043e.             count = (pIBR->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) \/ sizeof(WORD);             list = (PWORD)(pIBR + 1);              for (i = 0; i &lt; count; i++)             {                 if (list[i])                 {                     ptr = (PULONGLONG)((LPBYTE)ManualInject->ImageBase + (pIBR->VirtualAddress + (list[i] &amp; 0xFFF)));                     \/\/ \u041f\u0430\u0442\u0447\u0438\u043c \u043f\u0430\u043c\u044f\u0442\u044c!                     *ptr += delta;                 }             }         } \/\/ \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u043b\u043e\u043a         pIBR = (PIMAGE_BASE_RELOCATION)((LPBYTE)pIBR + pIBR->SizeOfBlock);     }    \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0441 \u0438\u043c\u043f\u043e\u0440\u0442\u0430\u043c\u0438     pIID = ManualInject->ImportDirectory;     while (pIID->Characteristics)     {         OrigFirstThunk = (PIMAGE_THUNK_DATA)((LPBYTE)ManualInject->ImageBase + pIID->OriginalFirstThunk);         FirstThunk = (PIMAGE_THUNK_DATA)((LPBYTE)ManualInject->ImageBase + pIID->FirstThunk);        \/\/ \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443. \u0422\u0443\u0442 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0431\u044b\u043b\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u0430 MS!         hModule = ManualInject->fnLoadLibraryA((LPCSTR)ManualInject->ImageBase + pIID->Name);          while (OrigFirstThunk->u1.AddressOfData)         {             if (OrigFirstThunk->u1.Ordinal &amp; IMAGE_ORDINAL_FLAG)             {                 \/\/ \u0427\u0438\u0441\u043b\u043e\u0432\u043e\u0439 \u0438\u043c\u043f\u043e\u0440\u0442                 Function = (ULONGLONG)ManualInject->fnGetProcAddress(hModule, (LPCSTR)(OrigFirstThunk->u1.Ordinal &amp; 0xFFFF));                \/\/ \u041f\u0430\u0442\u0447\u0438\u043c!                 FirstThunk->u1.Function = Function;             }              else             {                 \/\/ \u0418\u043c\u043f\u043e\u0440\u0442 \u043f\u043e \u0438\u043c\u0435\u043d\u0438                 pIBN = (PIMAGE_IMPORT_BY_NAME)((LPBYTE)ManualInject->ImageBase + OrigFirstThunk->u1.AddressOfData);                 Function = (ULONGLONG)ManualInject->fnGetProcAddress(hModule, (LPCSTR)pIBN->Name);  \/\/ \u041f\u0430\u0442\u0447\u0438\u043c!                 FirstThunk->u1.Function = Function;             }              OrigFirstThunk++;             FirstThunk++;         }          pIID++;     }    \/\/ \u0418\u0449\u0435\u043c DllMain     if (ManualInject->NtHeaders->OptionalHeader.AddressOfEntryPoint)     {         EntryPoint = (PDLL_MAIN)((LPBYTE)ManualInject->ImageBase + ManualInject->NtHeaders->OptionalHeader.AddressOfEntryPoint);                \/\/ \u0418 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0435\u0451!         return EntryPoint((HMODULE)ManualInject->ImageBase, DLL_PROCESS_ATTACH, NULL); \/\/ Call the entry point     }      return TRUE; }  \/\/ \u041c\u0430\u0440\u043a\u0435\u0440 \u043a\u043e\u043d\u0446\u0430 \u043a\u043e\u0434\u0430 \u043b\u043e\u0430\u0434\u0435\u0440\u0430 DWORD WINAPI LoadDllEnd() {     return 0; }  \/\/ \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e injector int Inject(DWORD pid, std::wstring dll) {   \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u043d\u044b SE_DEBUG_NAME \u043f\u0440\u0438\u0432\u0438\u043b\u0435\u0433\u0438\u0438     if (OpenProcessToken((HANDLE)-1, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;hToken))     {         tp.PrivilegeCount = 1;         tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;          tp.Privileges[0].Luid.LowPart = 20;         tp.Privileges[0].Luid.HighPart = 0;          AdjustTokenPrivileges(hToken, FALSE, &amp;tp, 0, NULL, NULL);         CloseHandle(hToken);     }      \/\/ \u0411\u0443\u0434\u0435\u043c \u0447\u0438\u0442\u0430\u0442\u044c DLL     hFile = CreateFile(dll.c_str(), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); \/\/ Open the DLL     FileSize = GetFileSize(hFile, NULL);      \/\/ \u041c\u0435\u0441\u0442\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0434\u043b\u044f DLL     buffer = VirtualAlloc(NULL, FileSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);      \/\/ \u0427\u0438\u0442\u0430\u0435\u043c DLL     ReadFile(hFile, buffer, FileSize, &amp;read, NULL);      CloseHandle(hFile);    \/\/ \u041f\u0430\u0440\u0441\u0438\u043c DLL     pIDH = (PIMAGE_DOS_HEADER)buffer;     pINH = (PIMAGE_NT_HEADERS)((LPBYTE)buffer + pIDH->e_lfanew);      printf(\"\\nOpening target process.\\n\");     hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);    \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043f\u043e\u0434 DLL     image = VirtualAllocEx(hProcess, NULL, pINH->OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);       \/\/ \u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0445\u0435\u0434\u0435\u0440\u044b     WriteProcessMemory(hProcess, image, buffer, pINH->OptionalHeader.SizeOfHeaders, NULL);      pISH = (PIMAGE_SECTION_HEADER)(pINH + 1);      \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u0443 DLL, \u043f\u043e\u0441\u0435\u043a\u0446\u0438\u043e\u043d\u043d\u043e     for (i = 0; i &lt; pINH->FileHeader.NumberOfSections; i++)     {         WriteProcessMemory(hProcess, (PVOID)((LPBYTE)image + pISH[i].VirtualAddress), (PVOID)((LPBYTE)buffer + pISH[i].PointerToRawData), pISH[i].SizeOfRawData, NULL);         \/\/ \u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043a\u043e\u0434, \u0437\u0430\u0449\u0438\u0442\u0438\u043c, \u0447\u0442\u043e\u0431\u044b DEP \u043d\u0435 \u0440\u0443\u0433\u0430\u043b\u0441\u044f         if (pISH[i].Characteristics &amp; IMAGE_SCN_CNT_CODE) {             VirtualProtectEx(hProcess, (PVOID)((LPBYTE)image + pISH[i].VirtualAddress), ((pISH[i].SizeOfRawData - 1) | 4095 + 1), PAGE_EXECUTE_READ, NULL);         }     }        \/\/ \u0422\u0435\u043f\u0435\u0440\u044c \u0431\u0443\u0434\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c loader     mem = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); \/\/ Allocate memory for the loader code      \/\/ \u0417\u0430\u043f\u043e\u043b\u043d\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f loader'\u0430     memset(&amp;ManualInject, 0, sizeof(MANUAL_INJECT));      ManualInject.ImageBase = image;     ManualInject.NtHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)image + pIDH->e_lfanew);     ManualInject.BaseRelocation = (PIMAGE_BASE_RELOCATION)((LPBYTE)image + pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);     ManualInject.ImportDirectory = (PIMAGE_IMPORT_DESCRIPTOR)((LPBYTE)image + pINH->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress);     ManualInject.fnLoadLibraryA = LoadLibraryA;     ManualInject.fnGetProcAddress = GetProcAddress;  \/\/ \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c loader \u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b     WriteProcessMemory(hProcess, mem, &amp;ManualInject, sizeof(MANUAL_INJECT), NULL); \/\/ Write the loader information to target process     WriteProcessMemory(hProcess, (PVOID)((PMANUAL_INJECT)mem + 1), LoadDll, (ULONGLONG)LoadDllEnd - (ULONGLONG)LoadDll, NULL); \/\/ Write the loader code to target process      \/\/ \u0421\u043d\u043e\u0432\u0430 \u0443\u0441\u043f\u043e\u043a\u043e\u0438\u043c DEP   VirtualProtectEx(hProcess, (PVOID)((PMANUAL_INJECT)mem), (ULONGLONG)LoadDllEnd - (ULONGLONG)LoadDll + sizeof(MANUAL_INJECT), PAGE_EXECUTE_READ, NULL);    \/\/ \u0412\u044b\u0437\u043e\u0432\u0435\u043c loader - \u043f\u043e\u0435\u0445\u0430\u043b\u0438!     hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)((PMANUAL_INJECT)mem + 1), mem, 0, NULL); \/\/ Create a remote thread to execute the loader code      \/\/ \u0416\u0434\u0451\u043c, \u043f\u043e\u043a\u0430 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f     WaitForSingleObject(hThread, INFINITE);     GetExitCodeThread(hThread, &amp;ExitCode);      CloseHandle(hThread);     VirtualFreeEx(hProcess, mem, 0, MEM_RELEASE);      CloseHandle(hProcess);      VirtualFree(buffer, 0, MEM_RELEASE);     return 0; }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0415\u0441\u043b\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 DLL \u0447\u0435\u0440\u0435\u0437 <code>LoadLibrary<\/code> \u0431\u044b\u043b\u0430 \u0431\u043e\u043b\u044c\u044e, \u0442\u043e \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u043e\u0442 \u044d\u0442\u043e \u0432\u043e\u0442 &#8212; 10\/10 \u0431\u043e\u043b\u0438. \u041d\u0438 \u043e\u0434\u0438\u043d \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440 \u043d\u0435 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 &#8212; DLL, \u0438 \u043d\u0435 \u043c\u0430\u043f\u043f\u0438\u0442 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e DLL \u0441 \u0441\u044b\u0440\u0446\u0430\u043c\u0438\/PDB \u043d\u0430 \u043a\u043e\u0434 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0431\u0435\u0437 \u0430\u043d\u0430\u043b\u0438\u0437\u0430. \u041f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439. <\/p>\n<h4>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e printf()<\/h4>\n<p>\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u0443 &#8212; \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0418 \u0437\u0434\u0435\u0441\u044c \u0431\u044b \u043e\u043d\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u043e\u0448\u043b\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a &#8212; \u0431\u043e\u043b\u044c. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 &#8212; \u0442\u043e\u0436\u0435 \u0431\u043e\u043b\u044c. \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0430\u0443\u0434\u0438\u043e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b chrome \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0430\u0432 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0444\u0430\u0439\u043b\u043e\u0432 (\u0434\u0430\u0436\u0435 \u0432 Temp) \u0438 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u044e\u0447\u0435\u0439 \u0440\u0435\u0435\u0441\u0442\u0440\u0430 &#8212; \u044d\u0442\u043e \u0438\u0437 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u044f \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b. <\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u043e\u0447\u043d\u043e \u0438\u043c\u0435\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a CoreAudio, \u043d\u043e \u043c\u043d\u0435 \u0441\u0445\u043e\u0434\u0443 \u043d\u0435 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u0432 \u0433\u043e\u043b\u043e\u0432\u0443, <abbr title=\"TTS \u0438 \u043f\u0440\u043e\u0433\u043e\u0432\u0430\u0440\u0438\u0432\u0430\u043d\u0438\u0435 \u043b\u043e\u0433\u043e\u0432 \u0431\u044b\u043b\u0438 \u0431\u044b \u043f\u0440\u043e\u0440\u044b\u0432\u043e\u043c...\" type=\"abbr\">\u043a\u0430\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043b\u043e\u0433\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0430\u0443\u0434\u0438\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u043e\u0432<\/abbr>.<\/p>\n<p>\u0418\u0437\u0443\u0447\u0430\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b, \u0447\u0442\u043e \u043c\u043d\u0435 \u0434\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u043a\u0435\u0442\u044b \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c. \u0411\u0438\u043d\u0433\u043e, \u043f\u0438\u0448\u0435\u043c <a href=\"https:\/\/github.com\/gurux13\/chrome-audio-delay\/blob\/main\/InjectedDll\/dllmain.cpp#L28\" rel=\"noopener noreferrer nofollow\">\u043b\u043e\u0433\u0433\u0435\u0440<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043b\u044c\u0451\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 <code>localhost:7777<\/code> \u0438 \u0441\u043b\u0443\u0448\u0430\u0435\u043c \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 <code>nc -kl 7777<\/code>.<\/p>\n<p>\u041d\u043e \u044d\u0442\u043e \u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 &#8212; <strong>\u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442!<\/strong><\/p>\n<h3>\u041f\u043e\u0438\u0441\u043a chrome.exe<\/h3>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0432\u0441\u0435\u0433\u043e \u043d\u0438\u0447\u0435\u0433\u043e &#8212; \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0445\u0440\u043e\u043c\u0430 \u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u043d\u0435\u0433\u043e. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 ETW \u043b\u043e\u0433\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u0414\u043b\u044f \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 <a href=\"https:\/\/github.com\/microsoft\/krabsetw\" rel=\"noopener noreferrer nofollow\">krabs<\/a>. \u0418 \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f.<\/p>\n<pre><code class=\"cpp\">    krabs::kernel_trace trace(L\"My magic trace\");     krabs::kernel::process_provider provider;     provider.add_on_event_callback([](const EVENT_RECORD&amp; record, const krabs::trace_context&amp; trace_context) {         krabs::schema schema(record, trace_context.schema_locator);         if (schema.event_opcode() == 1) { \/\/ \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f             krabs::parser parser(schema);             DWORD pid = parser.parse&lt;uint32_t>(L\"ProcessId\");             auto cmdline = GetProcessCommandLine(pid);           \/\/ \u0410 chrome \u043b\u0438 \u0442\u044b?             if (cmdline.find(L\"chrome\") != std::wstring::npos) {               \/\/ \u0410 audio \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043b\u0438 \u0442\u044b?                 if (cmdline.find(L\"--utility-sub-type=audio.mojom.AudioService\") != std::wstring::npos) {                     std::wcout &lt;&lt; \"Found process \" &lt;&lt; pid &lt;&lt; \", injecting...\\n\";                     Inject(pid, L\"ChromePatcherDll.dll\");                 }             }         }     });     trace.enable(provider);     trace.start();<\/code><\/pre>\n<details class=\"spoiler\">\n<summary>\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0433\u043b\u0430\u0432\u044b<\/summary>\n<div class=\"spoiler__content\">\n<p>\u041f\u043e\u0434\u043c\u0435\u043d\u0430 <code>GetPosition<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0430\u0443\u0434\u0438\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u043c\u0435\u0448\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 Bluetooth \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f, \u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043f\u0440\u043e\u043f\u0430\u0434\u0430\u0435\u0442. \u041e\u043f\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430 &#8212; \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0447\u0435\u043c \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u043d\u0438\u0435, \u0438 \u043c\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u043c \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043c\u0435\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u044b \u0443\u0437\u043d\u0430\u0432\u0430\u0442\u044c, \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u0430\u0443\u0434\u0438\u043e-\u0434\u0435\u0432\u0430\u0439\u0441\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 <code>IAudioClock<\/code>, \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. <\/p>\n<p>\u042d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0434\u0432\u0443\u043c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c:<\/p>\n<ol>\n<li>\n<p>\u041d\u0443\u0436\u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0430\u0443\u0434\u0438\u043e\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f DLL \u0434\u043e\u043b\u0436\u043d\u0430 \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u043c\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0443 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 <code>IAudioClock<\/code><\/p>\n<\/li>\n<\/ol>\n<p>\u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e (\u0441\u043c. \u043a\u043e\u0434 <a href=\"https:\/\/github.com\/gurux13\/chrome-audio-delay\/tree\/main\/Configurator\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a>), \u0442\u043e \u0432\u0442\u043e\u0440\u0430\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043a\u0440\u0435\u043f\u043a\u0438\u043c \u043e\u0440\u0435\u0448\u043a\u043e\u043c. \u0421\u0430\u043c<code>IAudioClock<\/code> \u043d\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0434\u043e\u0441\u0442\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e<code>IMMDevice<\/code> (\u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0435\u0441\u0442\u044c <code>GetId<\/code>) \u0438\u043b\u0438 \u0441\u0430\u043c<code>id<\/code>.<\/p>\n<p>\u0415\u0441\u0442\u044c \u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<h4>\u041e\u0442\u0441\u043b\u0435\u0434\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 IAudioClock<\/h4>\n<p>\u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f <code>IAudioClock<\/code> -> <code>IMMDevice.<\/code> \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f <code>IMMDevice<\/code> -> <code>IAudioClient<\/code> -> <code>IAudioClock<\/code>, \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438.<\/p>\n<p>\u042d\u0442\u043e, \u043e\u0434\u043d\u0430\u043a\u043e, \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u044f\u0434\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 (<code>IMMDevice::Activate<\/code>, <code>IAudioClient::GetService<\/code>, <code>Release<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0442\u0440\u0451\u0445), \u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043f\u0430\u043c\u044f\u0442\u044c \u043d\u0435 \u043f\u043e\u0442\u0435\u043a\u043b\u0430. <\/p>\n<p>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0438 \u044d\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043d\u0443\u0436\u043d\u043e <em>\u0443\u0441\u043f\u0435\u0442\u044c<\/em> \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c DLL, \u043f\u043e\u043a\u0430 \u0430\u0443\u0434\u0438\u043e-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0435\u0449\u0451 \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u044b. \u041f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0447\u0435\u0440\u0435\u0437 ETW \u043b\u043e\u0433\u0438 \u044f \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0441\u043f\u0435\u0432\u0430\u044e \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0445\u0440\u043e\u043c\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0441 <code>CREATE_SUSPENDED<\/code>, \u043d\u043e \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0433\u0435\u043c\u043e\u0440\u0440\u043e\u0439. \u0418 \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435-\u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440 \u0443\u043f\u0430\u0434\u0451\u0442, \u0445\u0440\u043e\u043c \u043e\u0441\u0442\u0430\u043d\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u0437\u0432\u0443\u043a\u0430. <\/p>\n<h4>\u041d\u0435\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b<\/h4>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/41c\/82a\/4f2\/41c82a4f201bff82c0765ae6faf27277.jpg\" width=\"750\" height=\"655\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/41c\/82a\/4f2\/41c82a4f201bff82c0765ae6faf27277.jpg\" data-blurred=\"true\"\/><figcaption><\/figcaption><\/figure>\n<pre><code class=\"cpp\">\/\/ \u043c\u0430\u0433\u0438\u044f, \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u0442\u044c<\/code><\/pre>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 <code>IAudioClock<\/code> \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u043c\u0443 <code>IAudioClient<\/code> \u043e\u043d \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442, \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u043e\u0442\u043e\u043a\u0435. \u0417\u043d\u0430\u0447\u0438\u0442, \u0433\u0434\u0435-\u0442\u043e \u0432\u043d\u0443\u0442\u0440\u0438 <code>IAudioClock<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 <code>IAudioClient<\/code>.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0441\u043a\u043e\u043f\u0430\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u0447\u0438\u043a\u043e\u043c, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>IAudioClient<\/code> \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 <code>IAudioClock<\/code>:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/fa6\/485\/9ca\/fa64859cacaf19dfc9ce941879a6b3f2.png\" width=\"1025\" height=\"246\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/fa6\/485\/9ca\/fa64859cacaf19dfc9ce941879a6b3f2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <code>IAudioClient<\/code>, \u043d\u0430\u043c \u043f\u043e\u0432\u0435\u0437\u0451\u0442, \u0438 \u0442\u0430\u043c \u0441\u0440\u0430\u0437\u0443 \u0431\u0443\u0434\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 Unicode \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 <code>id<\/code> \u0434\u0435\u0432\u0430\u0439\u0441\u0430:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/174\/2b5\/ab9\/1742b5ab94ad378d09c6586d87a9eb41.png\" width=\"1074\" height=\"374\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/174\/2b5\/ab9\/1742b5ab94ad378d09c6586d87a9eb41.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041e\u043a\u0435\u0439, \u0447\u0442\u043e\u0431\u044b \u0445\u043e\u0442\u044c \u043d\u0435\u043c\u043d\u043e\u0436\u043a\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u043c\u043e\u0441\u0442\u044c, \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f, \u0430 \u043f\u043e\u0438\u0449\u0435\u043c \u0438\u0445 \u0432 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0425\u0440\u0430\u043d\u0438\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f (\u0432 \u0435\u0434\u0438\u043d\u0438\u0446\u0430\u0445 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439) struct Offsets {   \/\/ \u0410\u0434\u0440\u0435\u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0447\u0430\u0441\u043e\u0432 int clockToClientPtr = -1;   \/\/ \u0410\u0434\u0440\u0435\u0441 \u0441\u0442\u0440\u043e\u043a\u0438 \u0441 id \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 int clientToIdPtr = -1; }; Offsets offsets; void FillOffsets(IMMDevice* device, IAudioClient* client, IAudioClock* clock) {   \/\/ \u0418\u0449\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 IAudioClient \u0432 IAudioClock for (int i = 0; i &lt; 100; ++i) { if (*(((void**)clock) + i) == client) { offsets.clockToClientPtr = i; break; } } LPWSTR id; device->GetId(&amp;id); auto len = lstrlenW(id);   \/\/ \u0418\u0449\u0435\u043c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 id \u0432 IAudioClient for (int i = 0; i &lt; 100; ++i) { LPWSTR ptr = *((LPWSTR*)client + i); if (IsBadReadPtr(ptr, len * 2 + 2)) { \/\/ \u0415\u0441\u043b\u0438 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u043e\u0434\u0435 \u0435\u0441\u0442\u044c IsBadReadPtr, \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a continue; } if (memcmp(id, ptr, len * 2) == 0) { offsets.clientToIdPtr = i; break; } } CoTaskMemFree(id); }<\/code><\/pre>\n<p>\u0418 \u0434\u0430\u043b\u044c\u0448\u0435 \u0447\u0442\u043e-\u0442\u043e \u0442\u0430\u043a\u043e\u0435:<\/p>\n<pre><code class=\"cpp\">if (offsets.clientToIdPtr != -1 &amp;&amp; offsets.clockToClientPtr != -1) {   if (!IsBadReadPtr(*((void**)This + offsets.clockToClientPtr), offsets.clientToIdPtr * sizeof(void*))) {     void* clientPtr = *((void**)This + offsets.clockToClientPtr);     if (!IsBadReadPtr(*((void**)clientPtr + offsets.clientToIdPtr), 20)) {       LPWSTR idPtr = *((LPWSTR*)clientPtr + offsets.clientToIdPtr);       std::wstring idStr = idPtr;       clockToDeviceMap[This] = idStr;       myDeviceStr = &amp;clockToDeviceMap[This];     }   } }<\/code><\/pre>\n<p>\u0423\u0436\u0430\u0441, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<h3>\u0418\u0442\u043e\u0433<\/h3>\n<p>\u0412 \u0438\u0442\u043e\u0433\u0435 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043e\u0431\u0430 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 &#8212; \u0435\u0441\u043b\u0438 \u0443\u0441\u043f\u0435\u043b\u0438 \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u0438\u0442\u044c, \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0441\u043b\u043e\u0432\u0430\u0440\u044c. \u0415\u0441\u043b\u0438 \u043d\u0435 \u0443\u0441\u043f\u0435\u043b\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434 \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0438 id \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f\u043c.<\/p>\n<p>\u041a\u043e\u0434 \u0440\u0430\u0437\u0431\u0440\u043e\u0441\u0430\u043d \u043f\u043e <a href=\"https:\/\/github.com\/gurux13\/chrome-audio-delay\/blob\/main\/InjectedDll\/dllmain.cpp\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443<\/a>.<\/p>\n<\/div>\n<\/details>\n<h2>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b<\/h2>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043f\u0430\u0442\u0447\u0438\u043d\u0433\u0430 \u0432\u0438\u0434\u0435\u043e \u0438 \u0430\u0443\u0434\u0438\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e:<\/p>\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6287a7d1cfffb2b489681b8c\" data-style=\"\" id=\"6287a7d1cfffb2b489681b8c\" width=\"\"><\/div>\n<p>\u0422\u0430\u043a \u0431\u044b\u043b\u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0435\u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0438 \u0440\u0435\u0447\u044c \u0432 Bluetooth \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0430\u0445 \u0442\u0435\u043f\u0435\u0440\u044c \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043b\u0438\u0447\u043d\u043e. <\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c\u0438 \u0432\u0435\u0440\u0441\u0438\u044f\u043c\u0438 Win10 \u0438 Win11, \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u0436\u0435 Chrome.<\/p>\n<h2>Links<\/h2>\n<ul>\n<li>\n<p>\u041c\u043e\u0439 \u043a\u043e\u0434: <a href=\"https:\/\/github.com\/gurux13\/chrome-audio-delay\/\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/gurux13\/chrome-audio-delay\/<\/a><\/p>\n<\/li>\n<li>\n<p>Injector \u0434\u043b\u044f Chrome: <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher<\/a><\/p>\n<\/li>\n<li>\n<p>\u0420\u0443\u0447\u043d\u043e\u0435 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 DLL: <a href=\"http:\/\/www.rohitab.com\/discuss\/topic\/40761-manual-dll-injection\/\" rel=\"noopener noreferrer nofollow\">http:\/\/www.rohitab.com\/discuss\/topic\/40761-manual-dll-injection\/<\/a> (x86 \u0432\u0435\u0440\u0441\u0438\u044f, \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0434\u043b\u044f x64)<\/p>\n<\/li>\n<li>\n<p>Krabs: <a href=\"https:\/\/github.com\/microsoft\/krabsetw\/\" rel=\"noopener noreferrer nofollow\">https:\/\/github.com\/microsoft\/krabsetw\/<\/a><\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/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\/664966\/\"> https:\/\/habr.com\/ru\/post\/664966\/<\/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<p>\u0421\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u043c\u044b \u043a\u0443\u043f\u0438\u043b\u0438 \u043d\u043e\u0432\u044b\u0439 \u043d\u043e\u0443\u0442\u0431\u0443\u043a \u043d\u0430 Windows \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f Mac&#8217;\u0430\u043c\u0438. \u041e\u0434\u043d\u0430 \u0438\u0437 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c &#8212; \u043f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0432\u0438\u0434\u0435\u043e \u0437\u0432\u0443\u043a \u0432 Bluetooth \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0430\u0445 \u0437\u0430\u043f\u0430\u0437\u0434\u044b\u0432\u0430\u0435\u0442 \u043f\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044e \u043a \u0432\u0438\u0434\u0435\u043e, \u043f\u0440\u0438\u0447\u0451\u043c \u0437\u0430\u043c\u0435\u0442\u043d\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f slow motion \u0432\u0438\u0434\u0435\u043e \u043d\u0430 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0435, \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 200\u043c\u0441. \u042d\u0442\u043e \u043c\u043d\u043e\u0433\u043e, \u0438 \u044d\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0440\u0435\u0447\u044c \u0432 \u0432\u0438\u0434\u0435\u043e.<\/p>\n<figure class=\"full-width\"><figcaption>200\u043c\u0441 \u0434\u0430\u0436\u0435 \u043d\u0435\u0442 \u043d\u0430 \u0448\u043a\u0430\u043b\u0435<\/figcaption><\/figure>\n<figure class=\"full-width\"><figcaption>Windows: 200ms, Mac: 0ms<\/figcaption><\/figure>\n<p>\u0412 \u0442\u043e \u0436\u0435 \u0432\u0440\u0435\u043c\u044f, \u043d\u0430 \u043c\u0430\u043a\u0435 \u043d\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438. \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a? \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f.<\/p>\n<h2>\u041f\u0440\u0438\u0447\u0438\u043d\u044b \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u0437\u0432\u0443\u043a\u0430<\/h2>\n<p>\u0412\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u044b\u0439 \u0437\u0432\u0443\u043a \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u0442\u044c \u043e\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430. \u0427\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u0441\u0442\u0430\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0437\u0432\u0430\u043d\u0430 \u0432\u043f\u043e\u043b\u043d\u0435 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 &#8212; \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0432\u0443\u043a\u0435 (\u0432 \u0432\u0438\u0434\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432) \u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0432\u0443\u043a (\u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043b\u0435\u0431\u0430\u043d\u0438\u0439 \u0441\u0440\u0435\u0434\u044b) \u0434\u043e\u043b\u0436\u043d\u044b \u0434\u043e\u0439\u0442\u0438 \u0434\u043e \u043d\u0430\u0448\u0438\u0445 \u0443\u0448\u0435\u0439. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 200\u043c\u0441 &#8212; \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0437\u0432\u0443\u043a \u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0432\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 70 \u043c\u0435\u0442\u0440\u043e\u0432 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0441\u0438\u0434\u0435\u043b\u0438 \u0432 70 \u043c\u0435\u0442\u0440\u0430\u0445 \u043e\u0442 \u043d\u043e\u0443\u0442\u0431\u0443\u043a\u0430, 200\u043c\u0441 \u0431\u044b\u043b\u043e \u0431\u044b \u0432\u043f\u043e\u043b\u043d\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0439 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043c\u044b \u043d\u0435 \u0441\u0438\u0434\u0438\u043c \u0432 70 \u043c\u0435\u0442\u0440\u0430\u0445. \u0410 \u0441\u0432\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0431\u044b\u0441\u0442\u0440\u043e, \u0447\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u043d\u0430 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043d\u0435\u0431\u0440\u0435\u0447\u044c. \u0422\u0443\u0442 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u043b\u0430\u043d \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u0443\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u0438 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044e. Bluetooth &#8212; \u0431\u0435\u0441\u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0430\u044f \u0441\u0432\u044f\u0437\u044c, \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u043d\u0430\u044f \u0448\u0443\u043c\u0430\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0439 \u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0427\u0442\u043e\u0431\u044b \u0437\u0432\u0443\u043a \u0448\u0451\u043b \u043f\u043b\u0430\u0432\u043d\u043e, \u043d\u0443\u0436\u043d\u043e \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0438\u043c\u0435\u0442\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u0444\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 (\u043f\u043e\u0447\u0442\u0438) \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f &#8212; \u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0430 \u0437\u0430\u0441\u0442\u0440\u044f\u043b\u0430 \u043f\u043e \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u0435, \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u0437\u0432\u0443\u043a \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430. <\/p>\n<p>\u042d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043a\u0440\u0430\u0442\u043a\u043e\u0435 \u0438 \u0433\u0440\u0443\u0431\u043e\u0435 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0435\u0439 &#8212; \u0441\u043c. <a href=\"https:\/\/habr.com\/ru\/post\/456182\/#:~:text=Audio%20transmission%20latency\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> (\u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c). \u0413\u043b\u0430\u0432\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c &#8212; \u0447\u0435\u0440\u0435\u0437 Bluetooth <strong>\u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u0430<\/strong>. \u042d\u0442\u043e \u0432\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u044b\u0435 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438 (\u0445\u043e\u0442\u044f \u0438 \u0442\u0430\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430).<\/p>\n<p>\u0415\u0441\u0442\u044c aptX LL, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043d\u0438\u0436\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043d\u043e \u043d\u0438 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u0438, \u043d\u0438 \u043d\u043e\u0443\u0442 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442. \u0417\u043d\u0430\u0447\u0438\u0442, \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435 \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0443\u043c ~130\u043c\u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438.<\/p>\n<h3>\u0410 Mac?<\/h3>\n<p>\u041e\u043a\u0435\u0439, \u043d\u043e \u0432\u0435\u0434\u044c \u043c\u0430\u043a \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0437\u0432\u0443\u043a \u0431\u0435\u0437 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438? \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442 \u0438, \u043d\u0430\u043f\u0438\u0441\u0430\u0432 <a href=\"https:\/\/gurux13.ddns.net\/beep.html\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0439 HTML<\/a>, \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u043a \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0430\u0443\u0434\u0438\u043e <em>\u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u043e<\/em>, \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 ~200\u043c\u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438. <\/p>\n<figure class=\"full-width\"><figcaption>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 ~200ms <\/figcaption><\/figure>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u0435\u043e (\u044e\u0442\u0443\u0431), \u043c\u0430\u043a<em> <\/em>\u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e\u043f\u043e\u0442\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0438 \u0437\u0432\u0443\u043a. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432\u0438\u0434\u0435\u043e \u043d\u0430\u0447\u043d\u0451\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043d\u0430 200\u043c\u0441 \u043f\u043e\u0437\u0436\u0435, \u0432\u044b \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u0435. \u0418\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0435\u0439\u0447\u0430\u0441 \u044f \u0443\u0436\u0435 \u043d\u0435 \u043d\u0430\u0439\u0434\u0443, \u044f \u0432\u044b\u044f\u0441\u043d\u0438\u043b, \u0447\u0442\u043e \u043c\u0430\u043a \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0443 \u043d\u0430\u0443\u0448\u043d\u0438\u043a\u043e\u0432, \u0447\u0435\u0440\u0435\u0437 \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043e\u043d\u0438 \u0432\u044b\u0432\u0435\u0434\u0443\u0442 \u0437\u0432\u0443\u043a, \u0438 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u0432\u0438\u0434\u0435\u043e \u0441 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439. <\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c, \u043c\u0430\u043a \u043e\u0431\u043c\u0430\u043d\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0441 \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442 <em>\u0432\u0438\u0434\u0438\u043c\u0443\u044e<\/em> \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0445\u043e\u0442\u044f \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0441\u0451 \u0435\u0449\u0451 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u042f \u0445\u043e\u0447\u0443 \u0431\u044b\u0442\u044c \u043e\u0431\u043c\u0430\u043d\u0443\u0442\u044b\u043c! <\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0436\u0435 \u0432\u0438\u043d\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442? \u0421\u0438\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u0439\u043d\u0430 \u0432\u0435\u043b\u0438\u043a\u0430\u044f. \u0426\u0435\u043b\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 &#8212; \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u044d\u0442\u0443 \u0437\u0430\u0433\u0430\u0434\u043a\u0443, \u0430 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0434\u0435\u043b \u0445\u043e\u0442\u044c \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c. <\/p>\n<p><strong>\u0426\u0435\u043b\u044c: <\/strong>\u0437\u0430\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0445\u0440\u043e\u043c \u043f\u043e\u0434 \u0432\u0438\u043d\u0434\u043e\u0439 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0432\u0438\u0434\u0435\u043e \u0441 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u043e\u0439, \u0447\u0442\u043e\u0431\u044b \u0430\u0443\u0434\u0438\u043e \u0438 \u0432\u0438\u0434\u0435\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<p>\u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0431\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0438 \u0445\u0440\u043e\u043c\u0430\/\u0432\u0438\u043d\u0434\u044b \u0432\u0441\u0451 \u043d\u0435 \u0441\u043b\u043e\u043c\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u043f\u044b\u0442\u0430\u0442\u044c\u0441\u044f \u0443\u0437\u043d\u0430\u0442\u044c \u0443 bluetooth \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u043a\u0430\u043a\u0430\u044f \u0443 \u043d\u0435\u0433\u043e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043f\u043e\u0434 \u0432\u0438\u043d\u0434\u0443 \u0443 \u043c\u0435\u043d\u044f \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430 \u043d\u0435\u0442.<\/p>\n<h2>Chrome<\/h2>\n<p>\u041c\u0430\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0434\u0440\u044f\u0434, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0442\u043e\u0433\u0434\u0430 \u0432\u0435\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430 200\u043c\u0441 \u0432 \u043f\u0440\u043e\u0448\u043b\u043e\u043c. \u0417\u043d\u0430\u0447\u0438\u0442, \u043e\u043d \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0432 Chrome \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0438 \u0442\u043e\u0442 \u0443\u0436\u0435 \u0437\u0430\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0435\u043e. <\/p>\n<p>\u0418 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/mac\/audio_auhal_mac.cc#L203\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e<\/a> \u0432 \u043a\u043e\u0434\u0435 \u0445\u0440\u043e\u043c\u0430, \u0433\u0434\u0435 \u0430\u0443\u0434\u0438\u043e\u043f\u043e\u0442\u043e\u043a \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0438 \u0432\u043e\u0442 <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/mac\/audio_manager_mac.cc#L1066\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u0443 \u0444\u0443\u043d\u043a\u0446\u0438\u044e<\/a>, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>\u041f\u043e\u0434 \u0432\u0438\u043d\u0434\u043e\u0439, \u043a\u0430\u043a \u043d\u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/win\/audio_low_latency_output_win.cc#L698\" rel=\"noopener noreferrer nofollow\">\u043f\u043e\u0445\u043e\u0436\u0438\u0439 \u043a\u043e\u0434<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044e <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/audioclient\/nf-audioclient-iaudioclock-getposition\" rel=\"noopener noreferrer nofollow\">IAudioClock::GetPosition<\/a>. \u0412\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u043d\u0434\u0430 \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 \u0430\u0443\u0434\u0438\u043e-\u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435, \u0430 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u042f \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u043f\u0430\u0440\u0443 \u0447\u0430\u0441\u043e\u0432 \u043d\u0430 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a <code>GetPosition<\/code> \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438 \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442 \u0437\u0430\u043f\u0438\u0441\u0438 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <code>HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\MMDevices\\Audio\\Render\\{GUID}\\Parameter<\/code><\/p>\n<figure class=\"full-width\"><figcaption>\u0427\u0442\u043e \u044d\u0442\u043e?<\/figcaption><\/figure>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u044f \u0442\u0430\u043a \u0438 \u043d\u0435 \u043f\u043e\u043d\u044f\u043b. \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u043a\u0438\u0448\u043a\u0430\u0445 <code>GetPosition<\/code> \u0438 \u0435\u0451 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0441 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u0441\u0442\u0435\u043a\u043e\u043c \u0431\u0435\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 \u043e\u0447\u0435\u043d\u044c \u0442\u044f\u0436\u0435\u043b\u043e. \u042d\u0442\u043e COM, \u0432\u0435\u0441\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430\u0445, \u0438 \u0442\u0430\u043c \u0447\u0451\u0440\u0442 \u043d\u043e\u0433\u0443 \u0441\u043b\u043e\u043c\u0438\u0442. \u041e\u0431\u0438\u0434\u043d\u043e: \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0430\u043a\u043e\u0435-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0440\u0435\u0435\u0441\u0442\u0440\u0435 \u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0431\u044b \u0440\u0435\u0448\u0435\u043d\u0430&#8230;<\/p>\n<p>\u041d\u043e \u043b\u0430\u0434\u043d\u043e, \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0445\u0440\u043e\u043c \u0433\u043e\u0442\u043e\u0432 \u043a \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0435 \u043f\u043e\u0434 \u0432\u0438\u043d\u0434\u043e\u0439, \u0432\u043e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u043d\u0430 \u043e \u043d\u0435\u0439 \u043d\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442. \u0410 \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442, \u0435\u0441\u043b\u0438 \u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0430\u043b\u0430? \u041a\u0430\u0447\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0445\u0440\u043e\u043c\u0430, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u0441\u0431\u043e\u0440\u043a\u0443, \u0438 \u043f\u0430\u0442\u0447\u0438\u043c <a href=\"https:\/\/github.com\/chromium\/chromium\/blob\/main\/media\/audio\/win\/audio_low_latency_output_win.cc#L698\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442 \u043a\u043e\u0434<\/a> \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043f\u043e <a href=\"https:\/\/chromium.googlesource.com\/chromium\/src\/+\/main\/docs\/windows_build_instructions.md\" rel=\"noopener noreferrer nofollow\">\u043e\u0444. \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438<\/a>. \u041f\u0440\u043e\u0448\u043b\u043e 6 \u0447\u0430\u0441\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438, <abbr title=\"\u041f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u043d\u0443\u044e \u0441\u0431\u043e\u0440\u043a\u0443 \u0443 \u043c\u0435\u043d\u044f \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c - \u0432\u043a\u043b\u0430\u0434\u043a\u0438 \u043f\u0430\u0434\u0430\u043b\u0438 \u0441 access violation. \u0425\u0440\u043e\u043c, \u0432\u044b \u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\/\u0438\u043b\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e?\" type=\"abbr\">\u043d\u0435 \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443 \u0438\/\u0438\u043b\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e?&#187; type=&#187;abbr&#187;>\u0445\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0441<\/abbr>. \u0418 \u0432\u0438\u0434\u0435\u043e \u0441\u0442\u0430\u043b\u043e \u043e\u043f\u0435\u0440\u0435\u0436\u0430\u0442\u044c \u0430\u0443\u0434\u0438\u043e \u043d\u0430 ~200 \u043c\u0441! \u0417\u043d\u0430\u0447\u0438\u0442, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u0440\u043d\u043e, \u0445\u0440\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443.<\/p>\n<p>\u041c\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0445\u0440\u043e\u043c \u0438, \u0441\u043a\u0430\u0436\u0435\u043c, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u043b\u0430\u0433 \u0432 <code>chrome:\/\/flags<\/code>, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443. \u041d\u043e \u044f \u043c\u043e\u0433\u0443 \u0441\u0435\u0431\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043a\u043e\u0439 \u0444\u043b\u0430\u0433 \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0445\u0440\u043e\u043c\u0443. \u0418 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044d\u0442\u043e \u0437\u0430\u0439\u043c\u0451\u0442 \u0443\u0439\u043c\u0443, \u0438 \u0448\u0430\u043d\u0441 \u043d\u0430 \u0443\u0441\u043f\u0435\u0445 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0443\u0436 \u0431\u043e\u043b\u044c\u0448\u043e\u0439. \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0435\u0441\u043b\u0438 \u0443\u0447\u0435\u0441\u0442\u044c <a href=\"https:\/\/bugs.chromium.org\/p\/chromium\/issues\/detail?id=1206201\" rel=\"noopener noreferrer nofollow\">\u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0431\u0430\u0433 \u043f\u043e\u0434 \u043b\u0438\u043d\u0443\u043a\u0441\u043e\u043c<\/a>.<\/p>\n<h2>Hack<\/h2>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>COM \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0445\u0432\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0432 Chrome \u0441\u0432\u043e\u044e DLL, \u0438 \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u043c \u0438\u0437 <code>GetPosition<\/code> \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0434\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443 \u0442\u0430\u043a, \u043a\u0430\u043a \u043d\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c:<\/p>\n<ul>\n<li>\n<p>\u041d\u0435 \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f \u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0445\u0440\u043e\u043c\u0430<\/p>\n<\/li>\n<li>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043e\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0439 \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0430\u0443\u0434\u0438\u043e<\/p>\n<\/li>\n<li>\n<p>\u0411\u044b\u0441\u0442\u0440\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u043e \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430: \u043c\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c DLL \u0432 Chrome. Chrome &#8212; \u044d\u0442\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0438 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u043b\u044e\u0431\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430, \u043f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/security.stackexchange.com\/questions\/255093\/how-does-chrome-78-block-all-methods-of-dll-injection\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c <\/a>\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0449\u0438\u0442\u044b, \u0438 \u043e\u043d\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0435. \u0413\u043b\u0430\u0432\u043d\u043e\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043b\u044f \u043d\u0430\u0441 \u0432\u0430\u0436\u043d\u043e &#8212; \u043c\u043e\u0436\u043d\u043e \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u044e\u0447\u043e\u043c Microsoft. \u0428\u0430\u043d\u0441\u043e\u0432, \u0447\u0442\u043e MS \u043f\u043e\u0434\u043f\u0438\u0448\u0435\u0442 \u043d\u0430\u0448\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443, \u043d\u0435 \u0442\u043e \u0447\u0442\u043e \u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0442, \u043d\u043e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u044d\u0442\u0430 \u0438\u0437 \u0440\u0430\u0437\u0440\u044f\u0434\u0430 \u043e\u0441\u043e\u0431\u043e \u043c\u0430\u043b\u044b\u0445. <\/p>\n<p>\u0421 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u0435\u0441\u0442\u044c \u0433\u0438\u0442\u0445\u0430\u0431 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442 DLL \u0432 \u0445\u0440\u043e\u043c! \u0421\u043c. <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>. \u041a\u0430\u0447\u0430\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043c-\u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0438 \u0432\u0438\u0434\u0438\u043c \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u043e\u0435:<\/p>\n<figure class=\"full-width\"><figcaption>\u0421\u043f\u0438\u0441\u043e\u043a DLL chrome.exe<\/figcaption><\/figure>\n<p>\u0417\u043d\u0430\u0447\u0438\u0442, \u0445\u0440\u043e\u043c \u043d\u0435 \u0442\u0430\u043a \u0443\u0436 \u0438 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442\u0441\u044f? \u041f\u043e\u0442\u0438\u0440\u0430\u0435\u043c \u0440\u0443\u043a\u0438 \u0438 \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u044e DLL. <\/p>\n<h3>DLL<\/h3>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0440\u0430\u0431\u043e\u0442\u0443 DLL \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a: \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c <code>IAudioClock<\/code> \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c, \u0438 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0435\u0433\u043e vftable (\u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439), \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u0438\u0442 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 <code>IAudioClock<\/code>. <\/p>\n<p>\u0421\u0442\u0440\u043e\u0438\u043c <code>IAudioClock<\/code> \u043a\u0430\u043a-\u043d\u0438\u0431\u0443\u0434\u044c:<\/p>\n<pre><code class=\"cpp\">CoInitialize(NULL); \/\/ \u041f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u043c \u0438\u043d\u0444\u0440\u0443 COM CoCreateInstance( CLSID_MMDeviceEnumerator, NULL, CLSCTX_ALL, IID_IMMDeviceEnumerator, (void**)&amp;pEnumerator); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c IMMDeviceEnumerator  pEnumerator->GetDefaultAudioEndpoint( eRender, eConsole, &amp;pDevice); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c audio endpoint  pDevice->Activate( IID_IAudioClient, CLSCTX_ALL, NULL, (void**)&amp;pAudioClient); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0430\u0443\u0434\u0438\u043e \u043a\u043b\u0438\u0435\u043d\u0442  pAudioClient->GetMixFormat(&amp;pwfx); \/\/ \u041d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u043e\u043b\u0443\u0447\u0438\u043c  pAudioClient->Initialize( AUDCLNT_SHAREMODE_SHARED, 0, hnsRequestedDuration, 0, pwfx, NULL); \/\/ \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0430\u0443\u0434\u0438\u043e-\u043a\u043b\u0438\u0435\u043d\u0442  pAudioClient->GetService(IID_PPV_ARGS(&amp;pClock)); \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0447\u0430\u0441\u044b  InstallComInterfaceHooks(pClock, IID_IAudioClock); \/\/ \u0418 \u043f\u0430\u0442\u0447\u0438\u043c \u0438\u0445<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438, \u0432 \u0446\u0435\u043b\u043e\u043c, \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0433\u0430\u0439\u0434\u0443 MS \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0430\u0443\u0434\u0438\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/coreaudio\/rendering-a-stream\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u043c\u0443<\/a>).<\/p>\n<p>\u0417\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435<code>pClock<\/code>:<\/p>\n<pre><code class=\"cpp\">\/\/ \u041f\u0430\u0442\u0447\u0438\u0442 \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434 HRESULT HookMethod(IUnknown * original, PVOID proxyMethod, PVOID * originalMethod, DWORD vtableOffset) {   \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c vftable PVOID* originalVtable = *(PVOID**)original;   \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 *originalMethod = originalVtable[vtableOffset];   \/\/ \u041f\u0430\u0442\u0447\u0438\u043c! originalVtable[vtableOffset] = proxyMethod; return S_OK; }  HRESULT InstallComInterfaceHooks(IUnknown * originalInterface, REFIID riid) { HRESULT hr = S_OK;   \/\/ \u042d\u0442\u043e \u0447\u0430\u0441\u044b? if (riid == IID_IAudioClock) { ATL::CComPtr&lt;IAudioClock> so;     \/\/ \u041f\u043e\u043b\u0443\u0447\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0447\u0430\u0441\u043e\u0432 \u0438\u0437 IUnknown - \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430, \u0447\u0442\u043e \u043e\u043d \u0435\u0441\u0442\u044c HRESULT hr = originalInterface->QueryInterface(IID_IAudioClock, (void**)&amp;so); if (FAILED(hr)) return hr; \/\/ \u042d\u0442\u043e \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435? \u041d\u0430\u043c \u0447\u0430\u0441\u044b \u043d\u0443\u0436\u043d\u044b.    \/\/ \u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u0441 \u043f\u0430\u043c\u044f\u0442\u0438 DWORD dwOld = 0; ::VirtualProtect(*(PVOID**)(originalInterface), sizeof(LONG_PTR)*5, PAGE_READWRITE, &amp;dwOld);  DWORD tmp;     \/\/ \u041f\u0430\u0442\u0447\u0438\u043c \u043c\u0435\u0442\u043e\u0434 GetPosition     \/\/ \u0415\u0433\u043e \u043d\u043e\u043c\u0435\u0440 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 - 4 HookMethod(so, (PVOID)Hook::GetPositionOriginal, &amp;g_Context->m_OriginalGetPosition, 4);     \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c \u0437\u0430\u0449\u0438\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a \u0431\u044b\u043b\u0430 ::VirtualProtect(*(PVOID**)(originalInterface), sizeof(LONG_PTR)*5, dwOld, &amp;tmp); } return hr; }<\/code><\/pre>\n<p>\u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0435\u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e &#8212; \u043e\u0442\u043a\u0443\u0434\u0430 \u0431\u0440\u0430\u0442\u044c \u044d\u0442\u0443 \u0447\u0435\u0442\u0432\u0451\u0440\u043a\u0443, \u043d\u043e\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 vftable. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 <code>IAudioClock<\/code>(<a href=\"https:\/\/github.com\/tpn\/winsdk-10\/blob\/master\/Include\/10.0.16299.0\/um\/Audioclient.h#L1214\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a>), \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>GetPosition<\/code> \u0432 \u043d\u0451\u043c \u043f\u043e\u0434 \u0432\u0442\u043e\u0440\u044b\u043c \u043d\u043e\u043c\u0435\u0440\u043e\u043c ( <a href=\"https:\/\/docs.microsoft.com\/en-us\/windows\/win32\/api\/audioclient\/nn-audioclient-iaudioclock\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 MSDN<\/a> \u043f\u043e \u0430\u043b\u0444\u0430\u0432\u0438\u0442\u0443). \u041f\u0440\u0438 \u044d\u0442\u043e\u043c <code>IAudioClock<\/code> \u043d\u0430\u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043e\u0442 <code>IUnknown<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (<code>QueryInterface<\/code>, <code>AddRef<\/code>, <code>Release<\/code>). \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0430\u0448\u0430 <code>GetPosition<\/code> &#8212; \u043f\u044f\u0442\u0430\u044f, \u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 4.<\/p>\n<p>DLL \u0432 \u043f\u0435\u0440\u0432\u043e\u043c \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u0438 \u0433\u043e\u0442\u043e\u0432\u0430, \u0438 \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0451. \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u0443\u044e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>GetPosition<\/code>, \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u043b DLL \u0432 \u043d\u0435\u0451. \u0418 \u0432\u0441\u0451 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e!<\/p>\n<h3>Injection<\/h3>\n<p>\u042f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0442\u0435\u043c \u0436\u0435 \u0441\u0430\u043c\u044b\u043c <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\" rel=\"noopener noreferrer nofollow\">\u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440\u043e\u043c<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u0436\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u043b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0432 \u0445\u0440\u043e\u043c. <\/p>\n<p>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c: \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e\u0434 \u043f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443 \u0441 DLL, \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0442\u043e\u043a \u0441 \u0442\u043e\u0447\u043a\u043e\u0439 \u0432\u0445\u043e\u0434\u0430 \u043d\u0430 <code>LoadLibrary<\/code>. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0440\u043e\u0432\u043d\u043e \u043e\u0434\u0438\u043d \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442, \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432 <code>CreateRemoteThread<\/code>, \u0438 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442 DLL. \u0418\u0437 \u0437\u0430\u0431\u0430\u0432\u043d\u043e\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e, \u0447\u0442\u043e <code>kernel32.dll<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 <code>LoadLibrary<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f, \u043d\u0435 \u043f\u043e\u0434\u0432\u0435\u0440\u0436\u0435\u043d\u0430 ASLR, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0451 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441 \u0432\u043e \u0432\u0441\u0435\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 (\u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <code>LoadLibrary<\/code> \u0432 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043f\u043e \u0442\u043e\u043c\u0443 \u0436\u0435 \u0430\u0434\u0440\u0435\u0441\u0443 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u044f \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u043b DLL, \u0438&#8230; \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0430\u0441\u044c \u0432 \u0445\u0440\u043e\u043c, \u043d\u043e <code>GetPosition<\/code> \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0441\u044f! <\/p>\n<p>\u042f \u043f\u0440\u0438\u0430\u0442\u0442\u0430\u0447\u0438\u043b\u0441\u044f \u043a chrome.exe \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c, \u0438 \u0443\u0432\u0438\u0434\u0435\u043b, \u0447\u0442\u043e <code>GetPosition<\/code> \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0427\u0442\u043e \u0437\u0430 \u0434\u0435\u043b\u0430?<\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0437\u0430 \u0437\u0432\u0443\u043a \u0432 Chrome \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043e\u0441\u043e\u0431\u0430\u044f \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f <code>audio.mojom.AudioService<\/code>. \u0418 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0445\u0440\u043e\u043c\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u0436\u0435\u043a\u0442\u043e\u0440 \u043d\u0435 \u0438\u043d\u0436\u0435\u043a\u0442\u0438\u0442, \u0438\u0437-\u0437\u0430 <a href=\"https:\/\/github.com\/Ceiridge\/Chrome-Developer-Mode-Extension-Warning-Patcher\/blob\/master\/ChromePatcherDll\/dllmain.cpp#:~:text=cmdLine.find(L%22%2D%2Dtype%3D%22)%20!%3D%20std%3A%3Awstring%3A%3Anpos\" rel=\"noopener noreferrer nofollow\">\u0432\u043e\u0442 \u044d\u0442\u043e\u0439 \u0432\u043e\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/a>. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u0435\u0431\u0430\u0433\u0433\u0435\u0440\u043e\u043c, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>GetPosition<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u0435 \u0431\u0435\u0434\u0430, \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c,<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-333452","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/333452","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=333452"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/333452\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=333452"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=333452"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=333452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}