{"id":296888,"date":"2020-01-09T09:00:27","date_gmt":"2020-01-09T09:00:27","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=296888"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=296888","title":{"rendered":"\u0420\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430 BattlEye"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/483068\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ps\/ae\/ij\/psaeijpcayldgrqiqeiq6l83nue.jpeg\"><\/div>\n<p>  BattlEye \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0430\u043d\u0442\u0438\u0447\u0438\u0442, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 32-\u043b\u0435\u0442\u043d\u0438\u043c <em>\u0411\u0430\u0441\u0442\u0438\u0430\u043d\u043e\u043c \u0425\u0435\u0439\u043a\u043e \u0421\u0443\u0442\u0435\u0440\u043e\u043c<\/em>. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u0438\u043b\u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c) \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f\u043c \u0438\u0433\u0440 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0443\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u0431\u0449\u0435\u0439 \u0437\u0430\u0449\u0438\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0438\u0433\u0440 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f; \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430: <code>QUALITY MADE IN GERMANY<\/code>. BattlEye \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u0430\u0434 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0447\u0438\u0442\u0435\u0440\u043e\u0432 \u0432 \u0438\u0433\u0440\u0430\u0445, \u043e\u043f\u043b\u0430\u0442\u0438\u0432\u0448\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0427\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>BEService\n<ul>\n<li>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430 Windows, \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c BattlEye <em>BEServer<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 <em>BEDaisy<\/em> \u0438 <em>BEClient<\/em>.<\/li>\n<\/ul>\n<\/li>\n<li>BEDaisy\n<ul>\n<li>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u044f\u0434\u0440\u0430 Windows, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0432\u0435\u043d\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u043c\u0438\u043d\u0438-\u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0442\u0435\u0440\u0430\u043c \u0432 \u043d\u0435\u0437\u0430\u043a\u043e\u043d\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u044b<\/li>\n<\/ul>\n<\/li>\n<li>BEClient\n<ul>\n<li>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Windows, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0437\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043d\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0438\u0433\u0440\u044b.<\/li>\n<\/ul>\n<\/li>\n<li>BEServer\n<ul>\n<li>\u041f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u0431\u044d\u043a\u0435\u043d\u0434-\u0441\u0435\u0440\u0432\u0435\u0440, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0441\u0431\u043e\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043c\u0435\u0440 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0438\u0442\u0435\u0440\u043e\u0432.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h1>\u0428\u0435\u043b\u043b-\u043a\u043e\u0434<\/h1>\n<p>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0432\u0441\u043f\u043b\u044b\u043b \u0434\u0430\u043c\u043f \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 BattlEye, \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0438\u0449\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f BattlEye. \u041c\u044b \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 BattlEye \u0446\u0435\u043b\u044b\u0445 \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0434\u0430\u043c\u043f \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b. \u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0434\u0430\u043c\u043f\u0430, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0432, \u0447\u0442\u043e \u0432 BattlEye \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u041a\u0430\u043a?<\/h1>\n<p>  BattlEye \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 \u0441\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0432 \u0441\u043b\u0443\u0436\u0431\u0443 Windows \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c BEService. \u042d\u0442\u0430 \u0441\u043b\u0443\u0436\u0431\u0430 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u043c\u043e\u0434\u0443\u043b\u0435\u043c BEClient, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b. \u041e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440 <code>\\.namedpipeBattleye<\/code> \u0438 \u0434\u043e 2018 \u0433\u043e\u0434\u0430 \u0431\u044b\u043b \u043d\u0435\u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0422\u0435\u043f\u0435\u0440\u044c \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0448\u0438\u0444\u0440\u0443\u044e\u0442\u0441\u044f xor-\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043b\u044c\u0449\u0438\u043a\u043e\u043c \u0441 \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0430\u0442\u0430\u043a\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0442\u0435\u043a\u0441\u0442\u043e\u0432 (plaintext attacks). \u041a\u043e\u0433\u0434\u0430 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0443, \u043e\u043d \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0432\u0441\u0435\u0445 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438\u0437-\u0437\u0430 \u0447\u0435\u0433\u043e \u0435\u0433\u043e \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c. \u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u043c\u043f\u0430 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 Windows API \u0442\u0438\u043f\u0430 CreateFile, ReadFile \u0438 \u0442.\u043f., \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0434\u0430\u043c\u043f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u0432\u0441\u0435\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (\u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443), \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0445\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0432\u0441\u0435\u0445 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438\u043b\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0433\u0440\u044b \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0432\u0441\u0435\u0445 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0438 \u0434\u0430\u043c\u043f\u0438\u0442\u044c \u0435\u0451 \u043d\u0430 \u0434\u0438\u0441\u043a. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0443\u0436\u043d\u043e \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u0434\u0430\u043c\u043f \u043a\u0430\u043a\u0438\u0445 \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0443\u0436\u0435 \u0431\u044b\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d, \u0447\u0442\u043e\u0431\u044b \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u0434\u0430\u043c\u043f\u043e\u0432.<\/p>\n<h1>\u041e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435<\/h1>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u044b \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0430 <strong>\u0441\u0438\u043b\u044c\u043d\u043e<\/strong> \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0440\u0430\u0434\u0438 \u043a\u0440\u0430\u0441\u043e\u0442\u044b. \u0412\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0434\u0430\u043c\u043f\u0438\u0442\u044c \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 BattlEye \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0443\u0437\u043d\u0430\u0442\u044c \u044d\u0442\u0438 \u0447\u0430\u0441\u0442\u0438; \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u044d\u0442\u043e \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0435 \u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u0436\u0430\u0441\u043d\u043e\u043c \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0435, \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u043e\u0439\u0442\u0438 \u0435\u0433\u043e (:<\/p>\n<h2>\u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438<\/h2>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430\u0445 \u2014 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043d\u0438\u0435 (memory enumeration) \u0438 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 <em>\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445<\/em> \u043e\u0431\u0440\u0430\u0437\u043e\u0432 \u0447\u0438\u0442\u043e\u0432. \u041e\u043d \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438, \u043a\u0430\u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0435, \u043f\u0440\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u0435 \u0437\u0430\u0431\u044b\u043b\u0438 \u043e\u0441\u043d\u043e\u0432\u044b \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0438 \u0437\u0430\u043d\u0435\u0441\u043b\u0438 \u0432 \u0447\u0451\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u043b\u043e\u0433 \u043e\u0431\u0449\u0435\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438.<\/p>\n<p>  Battleye \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0451 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b (\u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435) \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0441\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0412\u043e\u0442 \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 Battleye:<\/p>\n<pre><code class=\"cpp\">\/\/ MEMORY ENUMERATION for (current_address = 0     \/\/ QUERY MEMORY_BASIC_INFORMATION     NtQueryVirtualMemory(GetCurrentProcess(), current_address, 0, &amp;memory_information, 0x30, &amp;return_length) &gt;= 0      current_address = memory_information.base_address + memory_information.region_size)  {      const auto outside_of_shellcode =          memory_information.base_address &gt; shellcode_entry ||          memory_information.base_address + memory_information.region_size &lt;= shellcode_entry      const auto executable_memory =          memory_information.state == MEM_COMMIT &amp;&amp;         (memory_information.protect == PAGE_EXECUTE ||         memory_information.protect == PAGE_EXECUTE_READ ||         memory_information.protect == PAGE_EXECUTE_READWRITE      const auto unknown_whitelist =          memory_information.protect != PAGE_EXECUTE_READWRITE ||          memory_information.region_size != 100000000      if (!executable_memory || !outside_of_shellcode || !unknown_whitelist)         continue      \/\/ RUN CHECKS     memory::anomaly_check(memory_information      memory::pattern_check(current_address, memory_information      memory::module_specific_check_microsoft(memory_information      memory::guard_check(current_address, memory_information      memory::module_specific_check_unknown(memory_information }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u0410\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u043f\u0430\u043c\u044f\u0442\u0438<\/h1>\n<p>  BattlEye \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0432 \u0430\u0434\u0440\u0435\u0441\u043d\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0435 \u043f\u0430\u043c\u044f\u0442\u0438, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c\u0443 \u043e\u0431\u0440\u0430\u0437\u0443:<\/p>\n<pre><code class=\"cpp\">void memory::anomaly_check(MEMORY_BASIC_INFORMATION memory_information) {     \/\/ REPORT ANY EXECUTABLE PAGE OUTSIDE OF KNOWN MODULES     if (memory_information.type == MEM_PRIVATE || memory_information.type == MEM_MAPPED)      {         if ((memory_information.base_address &amp; 0xFF0000000000) != 0x7F0000000000 &amp;&amp; \/\/ UPPER EQUALS 0x7F             (memory_information.base_address &amp; 0xFFF000000000) != 0x7F000000000 &amp;&amp;  \/\/ UPPER EQUALS 0x7F0             (memory_information.base_address &amp; 0xFFFFF0000000) != 0x70000000 &amp;&amp; \/\/ UPPER EQUALS 0x70000             memory_information.base_address != 0x3E0000))         {             memory_report.unknown = 0             memory_report.report_id = 0x2F             memory_report.base_address = memory_information.base_address             memory_report.region_size = memory_information.region_size             memory_report.memory_info =                  memory_information.type |                  memory_information.protect |                  memory_information.state                          battleye::report(&amp;memory_report, sizeof(memory_report), 0         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432<\/h1>\n<p>  \u041a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, BattlEye \u0442\u0430\u043a\u0436\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0447\u0451\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043d\u0438\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u041f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0430 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e <strong>\u044d\u0442\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438<\/strong> \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043f\u043e\u0438\u0441\u043a\u0430\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u043e\u0431\u0440\u0430\u0437\u0430\u0445. \u0427\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0432\u0441\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0438 \u043f\u043e\u043c\u0435\u0449\u0451\u043d\u043d\u044b\u0435 \u0432 \u0431\u0435\u043b\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0438 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430, \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u043d\u044b\u0435 \u043a\u0430\u043a <em>RWX<\/em>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0431\u0435\u0437 \u044d\u043c\u0443\u043b\u044f\u0446\u0438\u0438 \u0443\u043f\u0430\u043a\u043e\u0432\u0449\u0438\u043a\u0430. \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 BattlEye \u044d\u0442\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0436\u0451\u0441\u0442\u043a\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u0430\u043d\u044b:<\/p>\n<pre><code class=\"cpp\">[05 18] ojectsPUBGChinese [05 17] BattleGroundsPrivate_CheatESP [05 17] [%.0fm] %s [05 3E] 0000Neck0000Chest0000000Mouse 10 [05 3F] PlayerESPColor [05 40]  Aimbot: %d02D3E2041 [05 36] HackMachine [05 4A] VisualHacks.net [05 50] 3E232F653E31314E4E563D4276282A3A2E463F757523286752552E6F30584748 [05 4F] DLLInjection-master\\x64\\Release\\ [05 52] NameESP [05 48] Skullhack [05 55] .rdata$zzzdbg [05 39] AimBot [05 39] EB4941803C123F755C623FEB388D41D0FBEC93C977583E930EB683E1DF [05 5F] 55E9 [05 5F] 57E9 [05 5F] 60E9 [05 68] D3D11Present initialised [05 6E] [ %.0fM ] [05 74] [hp:%d]%dm [05 36] 48836424380488D4C2458488B5424504C8BC848894C24304C8BC7488D4C2460 [05 36] 741FBA80000FF15607E0085C07510F2F1087801008B8788100EB [05 36] 40F2AA156F8D2894E9AB4489535D34F9CPOSITION0000COL [05 7A] FFE090 [05 79] %s00%d00POSITION0000COLOR0000000 [05 36] 8E85765DCDDA452E75BA12B4C7B94872116DB948A1DAA6B948A7676BB948902C [05 8A] n&lt;assembly xmlsn='urn:schemas-mi<\/code><\/pre>\n<p>  \u042d\u0442\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u043f\u0430\u043c\u044f\u0442\u0438 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0434\u0432\u0443\u0445\u0431\u0430\u0439\u0442\u043d\u044b\u0439 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>05<\/code> \u0438 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440.<\/p>\n<p>  \u0427\u0435\u0433\u043e \u043c\u044b \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c, \u0442\u0430\u043a \u044d\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e BattlEye \u0442\u0430\u043a\u0436\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u0443\u044e \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0438\u0437 <em>BEServer<\/em> \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0445 \u0432 <em>BEClient<\/em>, \u043d\u043e \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c.<\/p>\n<p>  \u041e\u043d\u0438 \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">void memory::pattern_check(void* current_address, MEMORY_BASIC_INFORMATION memory_information) {     const auto is_user32 = memory_information.allocation_base == GetModuleHandleA(\"user32.dll\"          \/\/ ONLY SCAN PRIVATE MEMORY AND USER32 CODE SECTION     if (memory_information.type != MEM_PRIVATE &amp;&amp; !is_user32)          continue      for (address = current_address           address != memory_information.base_address + memory_information.region_size           address += PAGE_SIZE) \/\/ PAGE_SIZE     {         \/\/ READ ENTIRE PAGE FROM LOCAL PROCESS INTO BUFFER         if (NtReadVirtualMemory(GetCurrentProcess(), address, buffer, PAGE_SIZE, 0) &lt; 0)             continue          for (pattern_index = 0 pattern_index &lt; 0x1C\/*PATTERN COUNT*\/ ++pattern_index)         {             if (pattern[pattern_index].header == 0x57A &amp;&amp; !is_user32) \/\/ ONLY DO FFE090 SEARCHES WHEN IN USER32                 continue              for (offset = 0 pattern[pattern_index].length + offset &lt;= PAGE_SIZE ++offset)              {                 const auto pattern_matches =                      memory::pattern_match(&amp;address[offset], pattern[pattern_index \/\/    BASIC PATTERN MATCH                  if (pattern_matches)                  {                     \/\/ PATTERN FOUND IN MEMORY                     pattern_report.unknown = 0                     pattern_report.report_id = 0x35                     pattern_report.type = pattern[index].header                     pattern_report.data = &amp;address[offset                     pattern_report.base_address = memory_information.base_address                     pattern_report.region_size = memory_information.region_size                     pattern_report.memory_info =                          memory_information.type |                          memory_information.protect |                          memory_information.state                      battleye::report(&amp;pattern_report, sizeof(pattern_report), 0                 }             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (Microsoft)<\/h1>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u043e \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0433\u0440\u044b:<\/p>\n<pre><code class=\"cpp\">void memory::module_specific_check_microsoft(MEMORY_BASIC_INFORMATION memory_information) {     auto executable =          memory_information.protect == PAGE_EXECUTE ||          memory_information.protect == PAGE_EXECUTE_READ ||          memory_information.protect == PAGE_EXECUTE_READWRITE      auto allocated =          memory_information.state == MEM_COMMIT      if (!allocated || !executable)         continue      auto mmres_handle = GetModuleHandleA(\"mmres.dll\"     auto mshtml_handle = GetModuleHandleA(\"mshtml.dll\"      if (mmres_handle &amp;&amp; mmres_handle == memory_information.allocation_base)     {         battleye_module_anomaly_report module_anomaly_report         module_anomaly_report.unknown = 0         module_anomaly_report.report_id = 0x5B         module_anomaly_report.identifier = 0x3480         module_anomaly_report.region_size = memory_information.region_size         battleye::report(&amp;module_anomaly_report, sizeof(module_anomaly_report), 0        }     else if (mshtml_handle &amp;&amp; mshtml_handle == memory_information.allocation_base)     {         battleye_module_anomaly_report module_anomaly_report         module_anomaly_report.unknown = 0         module_anomaly_report.report_id = 0x5B         module_anomaly_report.identifier = 0xB480         module_anomaly_report.region_size = memory_information.region_size         battleye::report(&amp;module_anomaly_report, sizeof(module_anomaly_report), 0       } }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 (\u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445)<\/h1>\n<p>  \u0412 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0443 \u0432\u0430\u0441 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u043c\u043e\u0434\u0443\u043b\u0438, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0435 <em>\u043b\u044e\u0431\u043e\u043c\u0443<\/em> \u0438\u0437 \u044d\u0442\u0438\u0445 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432:<\/p>\n<pre><code class=\"cpp\">void memory::module_specific_check_unknown(MEMORY_BASIC_INFORMATION memory_information) {     const auto dos_header = (DOS_HEADER*)module_handle     const auto pe_header = (PE_HEADER*)(module_handle + dos_header-&gt;e_lfanew      const auto is_image = memory_information.state == MEM_COMMIT &amp;&amp; memory_information.type == MEM_IMAGE     if (!is_image)         return      const auto is_base = memory_information.base_address == memory_information.allocation_base     if (!is_base)         return      const auto match_1 =          time_date_stamp == 0x5B12C900 &amp;&amp;          *(__int8*)(memory_information.base_address + 0x1000) == 0x00 &amp;&amp;         *(__int32*)(memory_information.base_address + 0x501000) != 0x353E900      const auto match_2 =          time_date_stamp == 0x5A180C35 &amp;&amp;          *(__int8*)(memory_information.base_address + 0x1000) != 0x00      const auto match_2 =          time_date_stamp == 0xFC9B9325 &amp;&amp;          *(__int8*)(memory_information.base_address + 0x6D3000) != 0x00      if (!match_1 &amp;&amp; !match_2 &amp;&amp; !match_3)         return          const auto buffer_offset = 0x00 \/\/ OFFSET DEPENDS ON WHICH MODULE MATCHES, RESPECTIVELY 0x501000, 0x1000 AND 0x6D3000      unknown_module_report.unknown1 = 0     unknown_module_report.report_id = 0x46     unknown_module_report.unknown2 = 1     unknown_module_report.data = *(__int128*)(memory_information.base_address + buffer_offset      battleye::report(&amp;unknown_module_report, sizeof(unknown_module_report), 0 }<\/code><\/pre>\n<p>  \u041c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u044d\u0442\u0438\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c, \u043d\u043e \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u0432\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0447\u0438\u0442-\u043c\u043e\u0434\u0443\u043b\u0435\u0439.<\/p>\n<p>  \u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435: @how02 \u0441\u043e\u043e\u0431\u0449\u0438\u043b \u043d\u0430\u043c, \u0447\u0442\u043e \u043c\u043e\u0434\u0443\u043b\u044c <code>action_x64.dll<\/code> \u0438\u043c\u0435\u0435\u0442 \u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 <code>0x5B12C900<\/code> \u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0438\u0441\u044c; \u043a\u0430\u043a \u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0440\u0430\u043d\u0435\u0435, \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u0430.<\/p>\n<h1>\u0417\u0430\u0449\u0438\u0442\u0430 \u043f\u0430\u043c\u044f\u0442\u0438<\/h1>\n<p>  \u0412 BattlEye \u0442\u0430\u043a\u0436\u0435 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043f\u043e \u043d\u0430\u0448\u0435\u043c\u0443 \u043c\u043d\u0435\u043d\u0438\u044e, \u0438\u0449\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u044c \u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0444\u043b\u0430\u0433\u043e\u043c <em>PAGE_GUARD<\/em>, \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043b\u0438 \u0444\u043b\u0430\u0433 <em>PAGE_GUARD<\/em>:<\/p>\n<pre><code class=\"cpp\">void memory::guard_check(void* current_address, MEMORY_BASIC_INFORMATION memory_information) {     if (memory_information.protect != PAGE_NOACCESS)     {         auto bad_ptr = IsBadReadPtr(current_address, sizeof(temporary_buffer         auto read = NtReadVirtualMemory(             GetCurrentProcess(),              current_address,              temporary_buffer, sizeof(temporary_buffer),              0          if (read &lt; 0 || bad_ptr)         {             auto query = NtQueryVirtualMemory(                 GetCurrentProcess(),                  current_address,                  0,                  &amp;new_memory_information, sizeof(new_memory_information),                  &amp;return_length              memory_guard_report.guard =                      query &lt; 0 ||                      new_memory_information.state != memory_information.state ||                      new_memory_information.protect != memory_information.protect              if (memory_guard_report.guard)             {                 memory_guard_report.unknown = 0                 memory_guard_report.report_id = 0x21                 memory_guard_report.base_address = memory_information.base_address                 memory_guard_report.region_size = (int)memory_information.region_size                 memory_guard_report.memory_info =                      memory_information.type |                      memory_information.protect |                      memory_information.state                  battleye::report(&amp;memory_guard_report, sizeof(memory_guard_report), 0             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043d\u0438\u0435 \u043e\u043a\u043e\u043d<\/h2>\n<p>  \u0428\u0435\u043b\u043b-\u043a\u043e\u0434 BattlEye \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 \u0438\u0437 \u0442\u0435\u043a\u0443\u0449\u0438\u0445 \u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0433\u0440\u044b \u043e\u043a\u043e\u043d, \u043e\u0431\u0445\u043e\u0434\u044f \u043e\u043a\u043d\u0430 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 (\u043f\u043e z-\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e). \u0414\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u044b \u043e\u043a\u043e\u043d, \u043d\u0430\u0445\u043e\u0434\u044f\u0449\u0438\u0435\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b, \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430, \u0438 \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>GetWindowThreadProcessId<\/code>. \u0421\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u043a \u043b\u043e\u0436\u043d\u043e\u043c\u0443 \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0443 \u043e\u043a\u043d\u0430, \u0447\u0442\u043e\u0431\u044b <strong>BattlEye \u043d\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0432\u0430\u0448\u0435 \u043e\u043a\u043d\u043e<\/strong>.<\/p>\n<pre><code class=\"cpp\">void window_handler::enumerate() {     for (auto window_handle = GetTopWindow          window_handle           window_handle = GetWindow(window_handle, GW_HWNDNEXT), \/\/ GET WINDOW BELOW          ++window_handler::windows_enumerated)                  \/\/ INCREMENT GLOBAL COUNT FOR LATER USAGE     {         auto window_process_pid = 0         GetWindowThreadProcessId(window_handle, &amp;window_process_pid          if (window_process_pid == GetCurrentProcessId())             continue          \/\/ APPEND INFORMATION TO THE MISC. REPORT, THIS IS EXPLAINED LATER IN THE ARTICLE         window_handler::handle_summary(window_handle          constexpr auto max_character_count = 0x80         const auto length = GetWindowTextA(window_handle, window_title_report.window_title, max_character_count          \/\/ DOES WINDOW TITLE MATCH ANY OF THE BLACKLISTED TITLES?         if (!contains(window_title_report.window_title, \"CheatAut\") &amp;&amp;             !contains(window_title_report.window_title, \"pubg_kh\") &amp;&amp;             !contains(window_title_report.window_title, \"conl -\") &amp;&amp;             !contains(window_title_report.window_title, \"PerfectA\") &amp;&amp;             !contains(window_title_report.window_title, \"AIMWA\") &amp;&amp;             !contains(window_title_report.window_title, \"PUBG AIM\") &amp;&amp;             !contains(window_title_report.window_title, \"HyperChe\"))             continue          \/\/ REPORT WINDOW         window_title_report.unknown_1 = 0         window_title_report.report_id = 0x33         battleye::report(&amp;window_title_report, sizeof(window_title_report) + length, 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u0410\u043d\u043e\u043c\u0430\u043b\u0438\u044f \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043d\u0438\u0438<\/h2>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0435\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0434\u0432\u0430 \u043e\u043a\u043d\u0430, \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435. \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0430\u0442\u0447\u0438\u043d\u0433 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0445 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0443 BattlEye \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0438 \u043e\u0434\u043d\u043e \u043e\u043a\u043d\u043e:<\/p>\n<pre><code class=\"cpp\">void window_handler::check_count() {     if (window_handler::windows_enumerated &gt; 1)         return          \/\/ WINDOW ENUMERATION FAILED, MOST LIKELY DUE TO HOOK     window_anomaly_report.unknown_1 = 0     window_anomaly_report.report_id = 0x44     window_anomaly_report.enumerated_windows = windows_enumerated     battleye::report(&amp;window_anomaly_report, sizeof(window_anomaly_report), 0      }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432<\/h2>\n<p>  \u041f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0432\u044b\u0437\u043e\u0432\u0430 <code>CreateToolhelp32Snapshot<\/code> BattlEye \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u043d\u043e <strong>\u043d\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u043e\u0448\u0438\u0431\u043a\u0438<\/strong>, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u043f\u0430\u0442\u0447\u0438\u0442\u044c \u0438 \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f:<\/p>\n<h1>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0443\u0442\u0438<\/h1>\n<p>  \u0415\u0441\u043b\u0438 \u043e\u0431\u0440\u0430\u0437 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u043d\u0443\u0442\u0440\u0438 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0443\u0445 \u043f\u043e\u0434\u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 (\u0441\u0447\u0438\u0442\u0430\u044f \u043e\u0442 \u043a\u043e\u0440\u043d\u044f \u0434\u0438\u0441\u043a\u0430), \u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043c\u0435\u0442\u0438\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0444\u043b\u0430\u0433\u043e\u043c, \u0435\u0441\u043b\u0438 \u043f\u0443\u0442\u044c \u043a \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0437\u0443 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0443 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">Desktop Temp FileRec Documents Downloads Roaming tmp.ex notepad. ...\\. cmd.ex<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0443\u0442\u044c \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u0441\u0442\u0440\u043e\u043a, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043e \u043f\u0443\u0442\u0438 \u043a \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0431\u0438\u0442 \u0444\u043b\u0430\u0433\u0430, \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440\u0443):<\/p>\n<pre><code class=\"cpp\">steam.exe       [0x01] explorer.exe    [0x02] lsass.exe       [0x08] cmd.exe         [0x10]<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c\u0438 \u043f\u0440\u0430\u0432\u0430\u043c\u0438 <code>QueryLimitedInformation<\/code>, \u0442\u043e \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442 \u0431\u0438\u0442 \u0444\u043b\u0430\u0433\u0430 <code>0x04<\/code>, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438 \u0441\u0431\u043e\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 <code>OpenProcess<\/code> \u043d\u0435 \u0440\u0430\u0432\u043d\u0430 <code>ERROR_ACCESS_DENIED<\/code>, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0444\u043b\u0430\u0433\u0430:<\/p>\n<pre><code class=\"cpp\">enum BATTLEYE_PROCESS_FLAG {   STEAM     = 0x1,   EXPLORER  = 0x2,   ERROR     = 0x4,   LSASS     = 0x8,   CMD       = 0x10 }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f steam, \u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433 \u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441 id \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f <code>0x40<\/code><\/p>\n<h1>\u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430<\/h1>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043b\u044e\u0431\u043e\u043c\u0443 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432, \u0442\u043e \u0432\u0430\u043c \u043c\u0433\u043d\u043e\u0432\u0435\u043d\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0444\u043b\u0430\u0433 \u0438 \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441 id \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f <code>0x38<\/code><\/p>\n<pre><code class=\"cpp\">\u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"Loadlibr\" \u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"Rng \" \u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"A0E7FFFFFF81\" \u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"RNG \" \u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"90E54355\" \u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"2.6.ex\" \u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \"TempFile.exe\"<\/code><\/pre>\n<p>  <\/p>\n<h1>\u041e\u0432\u0435\u0440\u043b\u0435\u0439 \u0438\u0433\u0440 Steam<\/h1>\n<p>  BattlEye \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0432\u043d\u0443\u0442\u0440\u0438\u0438\u0433\u0440\u043e\u0432\u043e\u0439 \u043e\u0432\u0435\u0440\u043b\u0435\u0439, \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Steam. \u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f \u0445\u043e\u0441\u0442\u0430 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam \u2014 <code>gameoverlayui.exe<\/code>; \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0435\u0433\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u043e\u0432 \u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0432\u0437\u043b\u043e\u043c\u0430\u0442\u044c \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043d\u0435\u0437\u0430\u043a\u043e\u043d\u043d\u0443\u044e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u0432 \u043e\u043a\u043d\u0435 \u0438\u0433\u0440\u044b. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435:<\/p>\n<pre><code class=\"cpp\">file size != 0 &amp;&amp; image name contains (case insensitive) gameoverlayu<\/code><\/pre>\n<p>  \u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c \u0434\u043b\u044f \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u0435 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b.<\/p>\n<h1>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam<\/h1>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0438 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0439. \u041d\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0433\u043b\u0443\u0431\u0436\u0435 \u0432 \u043a\u0440\u043e\u043b\u0438\u0447\u044c\u044e \u043d\u043e\u0440\u0443, \u0438 \u0443\u0437\u043d\u0430\u0442\u044c, \u0434\u043b\u044f \u0447\u0435\u0433\u043e \u044d\u0442\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0438 \u043e\u0447\u0435\u043d\u044c \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0435 \u0438 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u043c\u043e\u0434\u0443\u043b\u044f\u043c\u0438 \u0447\u0438\u0442\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">void gameoverlay::pattern_scan(MEMORY_BASIC_INFORMATION memory_information) {     \/\/ PATTERNS:     \/\/ Home     \/\/ F1     \/\/ FFFF83C48C30000000000     \/\/ \\.pipe%s     \/\/ C760000C64730     \/\/ 60C01810033D2      \/\/ ...      \/\/ PATTERN SCAN, ALMOST IDENTICAL CODE TO THE AFOREMENTIONED PATTERN SCANNING ROUTINE      gameoverlay_memory_report.unknown_1 = 0     gameoverlay_memory_report.report_id = 0x35     gameoverlay_memory_report.identifier = 0x56C     gameoverlay_memory_report.data = &amp;buffer[offset     gameoverlay_memory_report.base_address = memory_information.base_address     gameoverlay_memory_report.region_size = (int)memory_information.region_size     gameoverlay_memory_report.memory_info =          memory_information.type |          memory_information.protect |          memory_information.state      battleye::report(&amp;gameoverlay_memory_report, sizeof(gameoverlay_memory_report), 0 }<\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0438\u0449\u0435\u0442 \u043b\u044e\u0431\u044b\u0435 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0438 \u0432 \u0432\u0438\u0434\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u044f, \u0447\u0442\u043e \u0432\u0437\u043b\u043e\u043c\u0449\u0438\u043a\u0438 \u0438\u043d\u044a\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u0434 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0432\u0435\u0440\u043b\u0435\u044f:<\/p>\n<pre><code class=\"cpp\">void gameoverlay::memory_anomaly_scan(MEMORY_BASIC_INFORMATION memory_information) {       \/\/ ...     \/\/ ALMOST IDENTICAL ANOMALY SCAN COMPARED TO MEMORY ENUMERATION ROUTINE OF GAME PROCESS      gameoverlay_report.unknown = 0     gameoverlay_report.report_id = 0x3B     gameoverlay_report.base_address = memory_information.base_address     gameoverlay_report.region_size = memory_information.region_size     gameoverlay_report.memory_info = memory_information.type | memory_information.protect | memory_information.state     battleye::report(&amp;gameoverlay_report, sizeof(gameoverlay_report), 0 }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u0417\u0430\u0449\u0438\u0442\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam<\/h1>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam \u0437\u0430\u0449\u0438\u0449\u0451\u043d \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Windows \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 <em>Light (WinTcb)<\/em>, \u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440 \u043f\u043e\u043b\u0443\u0447\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.<\/p>\n<pre><code class=\"cpp\">void gameoverlay::protection_check(HANDLE process_handle) {     auto process_protection = 0      NtQueryInformationProcess(         process_handle, ProcessProtectionInformation,          &amp;process_protection, sizeof(process_protection), nullptr      if (process_protection == 0) \/\/ NO PROTECTION         return      gameoverlay_protected_report.unknown = 0     gameoverlay_protected_report.report_id = 0x35     gameoverlay_protected_report.identifier = 0x5B1     gameoverlay_protected_report.data = process_protection     battleye::report(&amp;gameoverlay_protected_report, sizeof(gameoverlay_protected_report), 0 }<\/code><\/pre>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 <em>OpenProcess<\/em> \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <em>ERROR_ACCESS_DENIED<\/em>, \u0442\u043e \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0432\u044b\u0441\u044b\u043b\u0430\u0435\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u0441 id <code>3B<\/code>.<\/p>\n<h1>\u041f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h1>\n<p>  \u041c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam \u0442\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0438\u0449\u0443\u0442\u0441\u044f <code>vgui2_s.dll<\/code> \u0438 <code>gameoverlayui.dll<\/code>. \u0414\u043b\u044f \u044d\u0442\u0438\u0445 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 <code>gameoverlayui.dll<\/code>.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435: <code>[gameoverlayui.dll+6C779] == 08BE55DC3CCCCB8????????C3CCCCCC<\/code>, \u0442\u043e \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0435\u0442 vtable \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443, \u0445\u0440\u0430\u043d\u044f\u0449\u0435\u043c\u0443\u0441\u044f \u0432 \u0431\u0430\u0439\u0442\u0430\u0445 <code>????????<\/code>. \u0415\u0441\u043b\u0438 \u043b\u044e\u0431\u043e\u0439 \u0438\u0437 \u044d\u0442\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 vtable \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f gameoverlayui.dll \u0438\u043b\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e <code>int 3<\/code>, \u0442\u043e \u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 id \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f <code>3B<\/code>.<\/p>\n<pre><code class=\"cpp\">void gameoverlay::scan_vtable(HANDLE process_handle, char* buffer, MODULEENTRY32 module_entry) {     char function_buffer[16      for (vtable_index = 0 vtable_index &lt; 20 vtable_index += 4)     {         NtReadVirtualMemory(           process_handle,           *(int*)&amp;buffer[vtable_index],           &amp;function_buffer,           sizeof(function_buffer),           0          if (*(int*)&amp;buffer[vtable_index] &lt; module_entry.modBaseAddr ||             *(int*)&amp;buffer[vtable_index] &gt;= module_entry.modBaseAddr + module_entry.modBaseSize ||             function_buffer[0] == 0xCC )    \/\/ FUNCTION PADDING         {             gameoverlay_vtable_report.report_id = 0x3B             gameoverlay_vtable_report.vtable_index = vtable_index             gameoverlay_vtable_report.address = buffer[vtable_index             battleye::report(&amp;gameoverlay_vtable_report, sizeof(gameoverlay_vtable_report), 0         }     } }<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u044f <code>vgui2_s.dll<\/code> \u0442\u043e\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438:<\/p>\n<pre><code class=\"cpp\">void vgui::scan() {     if (!equals(vgui_buffer, \"6A08B31FF561C8BD??????????FF96????????8BD????????8B1FF90\"))     {         auto could_read = NtReadVirtualMemory(             process_handle, module_entry.modBaseAddr + 0x48338, vgui_buffer, 8, 0) &gt;= 0          constexpr auto pattern_offset = 0x48378          \/\/ IF READ DID NOT FAIL AND PATTERN IS FOUND         if (could_read &amp;&amp; equals(vgui_buffer, \"6A46A06A26A\"))         {             vgui_report.unknown_1 = 0             vgui_report.report_id = 0x3B             vgui_report.unknown_2 = 0             vgui_report.address = LODWORD(module_entry.modBaseAddr) + pattern_offset              \/\/ READ TARGET BUFFER INTO REPORT             NtReadVirtualMemory(               process_handle,               module_entry.modBaseAddr + pattern_offset,               vgui_report.buffer,               sizeof(vgui_report.buffer),               0              battleye::report(&amp;vgui_report, sizeof(vgui_report), 0         }     }     else if (             \/\/ READ ADDRESS FROM CODE             NtReadVirtualMemory(process_handle, *(int*)&amp;vgui_buffer[9], vgui_buffer, 4, 0) &gt;= 0 &amp;&amp;             \/\/ READ POINTER TO CLASS             NtReadVirtualMemory(process_handle, *(int*)vgui_buffer, vgui_buffer, 4, 0) &gt;= 0 &amp;&amp;              \/\/ READ POINTER TO VIRTUAL TABLE             NtReadVirtualMemory(process_handle, *(int*)vgui_buffer, vgui_buffer, sizeof(vgui_buffer), 0) &gt;= 0)     {         for (vtable_index = 0 vtable_index &lt; 984 vtable_index += 4 )      \/\/ 984\/4 VTABLE ENTRY COUNT         {             NtReadVirtualMemory(process_handle, *(int*)&amp;vgui_buffer[vtable_index], &amp;vtable_entry, sizeof(vtable_entry), 0              if (*(int*)&amp;vgui_buffer[vtable_index] &lt; module_entry.modBaseAddr ||                 *(int*)&amp;vgui_buffer[vtable_index] &gt;= module_entry.modBaseAddr + module_entry.modBaseSize ||                 vtable_entry == 0xCC )             {                 vgui_vtable_report.unknown = 0                 vgui_vtable_report.report_id = 0x3B                 vgui_vtable_report.vtable_index = vtable_index                 vgui_vtable_report.address = *(int*)&amp;vgui_buffer[vtable_index                 battleye::report(&amp;vgui_vtable_report, sizeof(vgui_vtable_report), 0             }         }     }<\/code><\/pre>\n<p>  \u0414\u0430\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044e <code>48378<\/code>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">push    04 push    offset aCBuildslaveSte_4 ; \"c:\\buildslave\\steam_rel_client_win32\"... push    offset aAssertionFaile_7 ; \"Assertion Failed: IsValidIndex(elem)\"<\/code><\/pre>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438 \u043a\u0430\u0436\u0443\u0449\u0435\u0433\u043e\u0441\u044f \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"cpp\">push    04 push    00 push    02 push    ??<\/code><\/pre>\n<p>  \u041d\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043a\u043e\u043f\u0438\u044e vgui2_s.dll, \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043f\u0435\u0440\u0432\u043e\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0432\u044b\u0448\u0435\u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u0443\u044e vtable \u043e\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442.<\/p>\n<h1>\u041f\u043e\u0442\u043e\u043a\u0438 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam<\/h1>\n<p>  \u041f\u043e\u0442\u043e\u043a\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043e\u0432\u0435\u0440\u043b\u0435\u044f \u0438\u0433\u0440 Steam \u0442\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u044e\u0442\u0441\u044f:<\/p>\n<pre><code class=\"cpp\">void gameoverlay::check_thread(THREADENTRY32 thread_entry) {     const auto tread_handle = OpenThread(THREAD_SUSPEND_RESUME|THREAD_GET_CONTEXT, 0, thread_entry.th32ThreadID     if (thread_handle)     {         suspend_count = ResumeThread(thread_handle         if (suspend_count &gt; 0)         {             SuspendThread(thread_handle             gameoverlay_thread_report.unknown = 0             gameoverlay_thread_report.report_id = 0x3B             gameoverlay_thread_report.suspend_count = suspend_count             battleye::report(&amp;gameoverlay_thread_report, sizeof(gameoverlay_thread_report), 0         }          if (GetThreadContext(thread_handle, &amp;context) &amp;&amp; context.Dr7)         {             gameoverlay_debug_report.unknown = 0             gameoverlay_debug_report.report_id = 0x3B             gameoverlay_debug_report.debug_register = context.Dr0             battleye::report(&amp;gameoverlay_debug_report, sizeof(gameoverlay_debug_report), 0         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>LSASS<\/h1>\n<p>  \u0410\u0434\u0440\u0435\u0441\u043d\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 Windows <em>lsass.exe<\/em>, \u0442\u0430\u043a\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043a\u0430\u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441 Local Security Authority, \u0442\u043e\u0436\u0435 \u043f\u0435\u0440\u0435\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u043e \u0432\u0441\u0435\u0445 \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u044f\u0445 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u043a\u0430\u043a \u0438 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0443\u0445 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0445 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u043a:<\/p>\n<pre><code class=\"cpp\">if (equals(process_entry.executable_path, \"lsass.exe\")) {     auto lsass_handle = OpenProcess(QueryInformation, 0, (unsigned int)process_entry.th32ProcessID     if (lsass_handle)     {         for (address = 0               NtQueryVirtualMemory(lsass_handle, address, 0, &amp;lsass_memory_info, 0x30, &amp;bytes_needed) &gt;= 0               address = lsass_memory_info.base_address + lsass_memory_info.region_size)         {             if (lsass_memory_info.state == MEM_COMMIT               &amp;&amp; lsass_memory_info.type == MEM_PRIVATE               &amp;&amp; (lsass_memory_info.protect == PAGE_EXECUTE                || lsass_memory_info.protect == PAGE_EXECUTE_READ                || lsass_memory_info.protect == PAGE_EXECUTE_READWRITE))             {                 \/\/ FOUND EXECUTABLE MEMORY OUTSIDE OF MODULES                 lsass_report.unknown = 0                 lsass_report.report_id = 0x42                 lsass_report.base_address = lsass_memory_info.base_address                 lsass_report.region_size = lsass_memory_info.region_size                 lsass_report.memory_info =                      lsass_memory_info.type | lsass_memory_info.protect | lsass_memory_info.state                 battleye::report(&amp;lsass_report, sizeof(lsass_report), 0             }         }         CloseHandle(lsass_handle     } }<\/code><\/pre>\n<p>  LSASS \u0440\u0430\u043d\u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0432 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u0430\u0445 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435, \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043c\u0443 LSASS. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f BattlEye \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u0447\u0438\u0449\u0430\u044f \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044f <code>ReadProcessMemory<\/code>\/<code>WriteProcessMemory<\/code>, \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0432\u044b\u0437\u043e\u0432\u044b \u043d\u0430 \u0441\u0432\u043e\u0439 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 BEDaisy. \u0414\u0430\u043b\u0435\u0435 BEDaisy \u0440\u0435\u0448\u0430\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441 \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0437\u0430\u043a\u043e\u043d\u043d\u043e\u0439. \u0415\u0441\u043b\u0438 \u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0437\u0430\u043a\u043e\u043d\u043d\u0430, \u0442\u043e \u043e\u043d \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442 \u0435\u0451, \u0430 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0435 \u0441\u0438\u043d\u0438\u0439 \u044d\u043a\u0440\u0430\u043d.<\/p>\n<h2>\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f<\/h2>\n<p>  BattlEye \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0435\u0451 \u0441\u0435\u0440\u0432\u0435\u0440\u0443 \u0441 id \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f <code>3C<\/code>. \u042d\u0442\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<ul>\n<li>\u041b\u044e\u0431\u043e\u0435 \u043e\u043a\u043d\u043e \u0441 \u0444\u043b\u0430\u0433\u043e\u043c <em>WS_EX_TOPMOST<\/em> \u0438\u043b\u0438 \u0435\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430\u043c\u0438:\n<ul>\n<li>\u0422\u0435\u043a\u0441\u0442 \u043e\u043a\u043d\u0430 (Unicode)<\/li>\n<li>\u0418\u043c\u044f \u043a\u043b\u0430\u0441\u0441\u0430 \u043e\u043a\u043d\u0430 (Unicode)<\/li>\n<li>Window style<\/li>\n<li>Window extended style<\/li>\n<li>\u041f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a \u043e\u043a\u043d\u0430<\/li>\n<li>\u041f\u0443\u0442\u044c \u043a \u043e\u0431\u0440\u0430\u0437\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430-\u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430-\u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0430<\/li>\n<\/ul>\n<\/li>\n<li>\u041b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u0438\u0433\u0440\u0435 \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 (VM_WRITE|VM_READ)\n<ul>\n<li>\u0418\u043c\u044f \u043e\u0431\u0440\u0430\u0437\u0430<\/li>\n<li>\u041f\u0443\u0442\u044c \u043a \u043e\u0431\u0440\u0430\u0437\u0443<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u0440\u0430\u0437\u0430<\/li>\n<li>\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u0434\u0435\u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0440\u0443<\/li>\n<\/ul>\n<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0433\u0440\u044b:<br \/> \n<ul>\n<li>\u2026.ContentPaksTslGame-WindowsNoEditor_assets_world.pak<\/li>\n<li>\u2026.ContentPaksTslGame-WindowsNoEditor_ui.pak<\/li>\n<li>\u2026.ContentPaksTslGame-WindowsNoEditor_sound.pak<\/li>\n<\/ul>\n<p>  <\/li>\n<li>\u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438\u0433\u0440\u044b:<br \/> \n<ul>\n<li>\u2026.BLGameCookedContentScriptBLGame.u<\/li>\n<\/ul>\n<\/li>\n<li>\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0431\u0445\u043e\u0434\u0435 NtGetContextThread<br \/> \n<ul>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u0441\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 (E9), \u0438 \u0430\u0434\u0440\u0435\u0441 \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u043e\u0433<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>NoEye<\/h2>\n<p>  \u0412 BattlEye \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u043d\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u0440\u0443\u0442\u043a\u0438\u0442\u0430 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u044d\u0442\u043e\u0433\u043e \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430 \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c NoEye: \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 <em>GetFileAttributesExA<\/em> \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 <code>BE_DLL.dll<\/code>, \u0435\u0441\u043b\u0438 \u044d\u0442\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u043d\u0430 \u0434\u0438\u0441\u043a\u0435.<\/p>\n<pre><code class=\"cpp\">void noeye::detect() {     WIN32_FILE_ATTRIBUTE_DATA file_information     if (GetFileAttributesExA(\"BE_DLL.dll\", 0, &amp;file_information))     {       noeye_report.unknown = 0       noeye_report.report_id = 0x3D       noeye_report.file_size = file_information.nFileSizeLow       battleye::report(&amp;noeye_report, sizeof(noeye_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u0432<\/h2>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 Beep \u0438 Null; \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0445 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435. \u0412 \u043e\u0431\u044b\u0447\u043d\u043e\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u044d\u0442\u0438 \u0434\u0432\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u0442\u043e-\u0442\u043e \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0432\u043a\u043b\u044e\u0447\u0438\u043b \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e. \u0422\u0430\u043a\u0430\u044f \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f driver device hijacking. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0442\u044c \u043e\u0431\u043c\u0435\u043d \u0434\u0430\u043d\u043d\u044b\u043c\u0438 IOCTL \u0441 \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u043d\u044b\u043c \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u043e\u043c \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430.<\/p>\n<pre><code class=\"cpp\">void driver::check_beep() {     auto handle = CreateFileA(\"\\\\.\\Beep\", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0     if (handle != INVALID_HANDLE_VALUE)     {       beep_report.unknown = 0       beep_report.report_id = 0x3E       battleye::report(&amp;beep_report, sizeof(beep_report), 0       CloseHandle(handle     } }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">void driver::check_null() {     auto handle = CreateFileA(\"\\\\.\\Null\", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0     if (handle != INVALID_HANDLE_VALUE)     {       null_report.unknown = 0       null_report.report_id = 0x3E       battleye::report(&amp;null_report, sizeof(null_report), 0       CloseHandle(handle     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>Sleep delta<\/h2>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, BattlEye \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0442\u044c \u0443 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043e\u0434\u043d\u0443 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438 \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0446\u0438\u043a\u043b\u043e\u0432 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0431\u0435\u0437\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (sleep):<\/p>\n<pre><code class=\"cpp\">void sleep::check_delta() {     const auto tick_count = GetTickCount     Sleep(1000     const auto tick_delta = GetTickCount() - tick_count     if (tick_delta &gt;= 1200)     {         sleep_report.unknown = 0         sleep_report.report_id = 0x45         sleep_report.delta = tick_delta         battleye::report(&amp;sleep_report, sizeof(sleep_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>7zip<\/h2>\n<p>  \u0412 BattlEye \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u043d\u0438\u0432\u0430\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043d\u0435 \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 7zip \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438\u0433\u0440\u044b \u0438 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u042d\u0442\u043e \u0434\u0435\u043b\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435 \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0430\u043d\u043e\u043c\u0430\u043b\u0438\u0439. \u0412 BattlEye \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 7zip.<\/p>\n<pre><code class=\"cpp\">void module::check_7zip() {     constexpr auto sz_7zipdll = \"..\\..\\Plugins\\ZipUtility\\ThirdParty\\7zpp\\dll\\Win64\\7z.dll\"     const auto module_handle = GetModuleHandleA(sz_7zipdll     if (module_handle &amp;&amp; *(int*)(module_handle + 0x1000) != 0xFF1441C7)     {       sevenzip_report.unknown_1 = 0       sevenzip_report.report_id = 0x46       sevenzip_report.unknown_2 = 0       sevenzip_report.data1 = *(__int64*)(module_handle + 0x1000       sevenzip_report.data2 = *(__int64*)(module_handle + 0x1008       battleye::report(&amp;sevenzip_report, sizeof(sevenzip_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439<\/h2>\n<p>  BattlEye \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0443\u0440\u043e\u0432\u043d\u044f \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0439 Windows (hal.dll), \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u0441\u0435\u0440\u0432\u0435\u0440\u0443, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 \u043b\u0438 \u043e\u043d\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0438\u0433\u0440\u044b.<\/p>\n<pre><code class=\"cpp\">void module::check_hal() {     const auto module_handle = GetModuleHandleA(\"hal.dll\"     if (module_handle)     {         hal_report.unknown_1 = 0         hal_report.report_id = 0x46         hal_report.unknown_2 = 2         hal_report.data1 = *(__int64*)(module_handle + 0x1000         hal_report.data2 = *(__int64*)(module_handle + 0x1008         battleye::report(&amp;hal_report, sizeof(hal_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043e\u0431\u0440\u0430\u0437\u043e\u0432<\/h2>\n<p>  \u0422\u0430\u043a\u0436\u0435 BattlEye \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043e\u0431\u0440\u0430\u0437\u044b, \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0438\u0433\u0440\u044b. \u042d\u0442\u0438 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043e\u0431\u0440\u0430\u0437\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u0438\u0440\u0443\u044e\u0442, \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043d\u0430 \u0437\u043b\u043e\u0432\u0440\u0435\u0434\u043d\u043e\u0435, \u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u044b \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u043d\u0438\u0445 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431 \u0438\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0438:<\/p>\n<h1>nvToolsExt64_1<\/h1>\n<p>  <\/p>\n<pre><code class=\"cpp\">void module::check_nvtoolsext64_1 {     const auto module_handle = GetModuleHandleA(\"nvToolsExt64_1.dll\"     if (module_handle)     {       nvtools_report.unknown = 0       nvtools_report.report_id = 0x48       nvtools_report.module_id = 0x5A8       nvtools_report.size_of_image = (PE_HEADER*)(module_handle + (DOS_HEADER*)(module_handle)-&gt;e_lfanew))-&gt;SizeOfImage       battleye::report(&amp;nvtools_report, sizeof(nvtools_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>ws2detour_x96<\/h1>\n<p>  <\/p>\n<pre><code class=\"cpp\">void module::check_ws2detour_x96 {     const auto module_handle = GetModuleHandleA(\"ws2detour_x96.dll\"     if (module_handle)     {       ws2detour_report.unknown = 0       ws2detour_report.report_id = 0x48       ws2detour_report.module_id = 0x5B5       ws2detour_report.size_of_image = (PE_HEADER*)(module_handle + (DOS_HEADER*)(module_handle)-&gt;e_lfanew))-&gt;SizeOfImage       battleye::report(&amp;ws2detour_report, sizeof(ws2detour_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>networkdllx64<\/h1>\n<p>  <\/p>\n<pre><code class=\"cpp\">void module::check_networkdllx64 {     const auto module_handle = GetModuleHandleA(\"networkdllx64.dll\"     if (module_handle)     {         const auto dos_header = (DOS_HEADER*)module_handle         const auto pe_header = (PE_HEADER*)(module_handle + dos_header-&gt;e_lfanew         const auto size_of_image = pe_header-&gt;SizeOfImage          if (size_of_image &lt; 0x200000 || size_of_image &gt;= 0x400000)         {             if (pe_header-&gt;sections[DEBUG_DIRECTORY].size == 0x1B20)             {                 networkdll64_report.unknown = 0                 networkdll64_report.report_id = 0x48                 networkdll64_report.module_id = 0x5B7                 networkdll64_report.data = pe_header-&gt;TimeDatestamp                 battleye::report(&amp;networkdll64_report, sizeof(networkdll64_report), 0             }         }         else         {             networkdll64_report.unknown = 0             networkdll64_report.report_id = 0x48             networkdll64_report.module_id = 0x5B7             networkdll64_report.data = pe_header-&gt;sections[DEBUG_DIRECTORY].size             battleye::report(&amp;networkdll64_report, sizeof(networkdll64_report), 0         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>nxdetours_64<\/h1>\n<p>  <\/p>\n<pre><code class=\"cpp\">void module::check_nxdetours_64 {     const auto module_handle = GetModuleHandleA(\"nxdetours_64.dll\"     if (module_handle)     {       nxdetours64_report.unknown = 0       nxdetours64_report.report_id = 0x48       nxdetours64_report.module_id = 0x5B8       nxdetours64_report.size_of_image = (PE_HEADER*)(module_handle + (DOS_HEADER*)(module_handle)-&gt;e_lfanew))-&gt;SizeOfImage       battleye::report(&amp;nxdetours64_report, sizeof(nxdetours64_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>nvcompiler<\/h1>\n<p>  <\/p>\n<pre><code class=\"cpp\">void module::check_nvcompiler {     const auto module_handle = GetModuleHandleA(\"nvcompiler.dll\"     if (module_handle)     {       nvcompiler_report.unknown = 0       nvcompiler_report.report_id = 0x48       nvcompiler_report.module_id = 0x5BC       nvcompiler_report.data = *(int*)(module_handle + 0x1000       battleye::report(&amp;nvcompiler_report, sizeof(nvcompiler_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>wmp<\/h1>\n<p>  <\/p>\n<pre><code class=\"cpp\">void module::check_wmp {     const auto module_handle = GetModuleHandleA(\"wmp.dll\"     if (module_handle)     {       wmp_report.unknown = 0       wmp_report.report_id = 0x48       wmp_report.module_id = 0x5BE       wmp_report.data = *(int*)(module_handle + 0x1000       battleye::report(&amp;wmp_report, sizeof(wmp_report), 0     } }<\/code><\/pre>\n<p>  <\/p>\n<h1>\u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439<\/h1>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043c \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438 id \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">enum module_id {     nvtoolsext64    = 0x5A8,     ws2detour_x96   = 0x5B5,     networkdll64    = 0x5B7,     nxdetours_64    = 0x5B8,     nvcompiler      = 0x5BC,     wmp             = 0x5BE<\/code><\/pre>\n<p>  <\/p>\n<h2>\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446 TCP<\/h2>\n<p>  \u0428\u0435\u043b\u043b-\u043a\u043e\u0434 BattlEye \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043f\u043e\u0438\u0441\u043a \u0441\u043f\u0438\u0441\u043a\u0430 TCP-\u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0439 \u0432\u0441\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b (\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00ab\u0442\u0430\u0431\u043b\u0438\u0446\u0430 TCP\u00bb, TCP table) \u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 IP-\u0430\u0434\u0440\u0435\u0441\u043e\u0432 Cloudflare-\u0448\u043b\u044e\u0437\u0430, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0445 \u043d\u0435\u043c\u0435\u0446\u043a\u043e\u043c\u0443 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0443 pay-to-cheat \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/xera.ph\/\">xera.ph<\/a>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0431\u044b\u043b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u0434\u043b\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0438\u0433\u0440\u044b \u0437\u0430\u043f\u0443\u0449\u0435\u043d launcher, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043e\u043d\u0438 \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u044e\u0442\u0441\u044f. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e IP-\u0430\u0434\u0440\u0435\u0441\u0430 Cloudflare-\u0448\u043b\u044e\u0437\u0430 \u043f\u043e\u0437\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u0432. \u0438 \u0435\u0441\u043b\u0438 \u0438\u0445 \u043d\u043e\u0432\u044b\u0439 \u0432\u043b\u0430\u0434\u0435\u043b\u0435\u0446 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0442\u044c \u041f\u041e, \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u043e\u0435 \u043a \u0435\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u0442, \u0442\u043e \u0431\u0435\u0437 \u0432\u0441\u044f\u043a\u0438\u0445 \u0441\u043e\u043c\u043d\u0435\u043d\u0438\u0439 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442\u044c \u043b\u043e\u0436\u043d\u043e\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430.<\/p>\n<p>  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0441\u043b\u0443\u0433 pay-to-cheat <em>xera.ph<\/em> \u0443\u0436\u0435 \u0434\u043e\u043b\u0433\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0438\u0445 \u043b\u043e\u0432\u044f\u0442, \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0441 \u044d\u0442\u0438\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f. \u041c\u044b \u0441\u0432\u044f\u0437\u0430\u043b\u0438\u0441\u044c \u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c\u0438 <em>xera.ph<\/em>, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u0438\u043c \u043e\u0431 \u0438\u0445 \u0433\u043b\u0443\u043f\u043e\u043c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438, \u043d\u043e \u043e\u043d\u0438 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441 \u043f\u043e\u043d\u044f\u043b\u0438 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b\u0438 \u043d\u0430\u043c \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e, \u043d\u0435 \u043f\u043e\u0434\u0443\u043c\u0430\u0432, \u0447\u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0432\u0437\u043b\u043e\u043c\u0430\u0442\u044c \u0438 \u0437\u0430\u0440\u0435\u043b\u0438\u0437\u0438\u0442\u044c \u0435\u0451. \u041c\u044b \u0442\u0430\u043a \u043d\u0435 \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c, \u043d\u043e, \u043d\u0430\u0432\u0435\u0440\u043d\u043e, \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0435 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u043b\u044e\u0434\u044f\u043c, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u0440\u0435\u0432\u0435\u0440\u0441-\u0438\u043d\u0436\u0438\u043d\u0438\u0440\u0438\u043d\u0433\u043e\u043c, \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u0438\u0445 \u043d\u0435 \u0441\u043f\u0438\u0440\u0430\u0442\u044f\u0442.<\/p>\n<pre><code class=\"cpp\">void network::scan_tcp_table {     memset(local_port_buffer, 0, sizeof(local_port_buffer      for (iteration_index = 0 iteration_index &lt; 500 ++iteration_index)     {         \/\/ GET NECESSARY SIZE OF TCP TABLE         auto table_size = 0         GetExtendedTcpTable(0, &amp;table_size, false, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0          \/\/ ALLOCATE BUFFER OF PROPER SIZE FOR TCP TABLE         auto allocated_ip_table = (MIB_TCPTABLE_OWNER_MODULE*)malloc(table_size          if (GetExtendedTcpTable(allocated_ip_table, &amp;table_size, false, AF_INET, TCP_TABLE_OWNER_MODULE_ALL, 0) != NO_ERROR)             goto cleanup          for (entry_index = 0 entry_index &lt; allocated_ip_table-&gt;dwNumEntries ++entry_index)         {             const auto ip_address_match_1 =                  allocated_ip_table-&gt;table[entry_index].dwRemoteAddr == 0x656B1468 \/\/ 104.20.107.101              const auto ip_address_match_2 =                  allocated_ip_table-&gt;table[entry_index].dwRemoteAddr == 0x656C1468 \/\/ 104.20.108.101              const auto port_match =                  allocated_ip_table-&gt;table[entry_index].dwRemotePort == 20480              if ( (!ip_address_match_1 &amp;&amp; !ip_address_match_2) || !port_match)                 continue              for (port_index = 0                   port_index &lt; 10 &amp;&amp;                   allocated_ip_table-&gt;table[entry_index].dwLocalPort !=                      local_port_buffer[port_index                   ++port_index)             {                 if (local_port_buffer[port_index])                     continue                  tcp_table_report.unknown = 0                 tcp_table_report.report_id = 0x48                 tcp_table_report.module_id = 0x5B9                 tcp_table_report.data =                      BYTE1(allocated_ip_table-&gt;table[entry_index].dwLocalPort) |                      (LOBYTE(allocated_ip_table-&gt;table[entry_index.dwLocalPort) &lt;&lt; 8                  battleye::report(&amp;tcp_table_report, sizeof(tcp_table_report), 0                  local_port_buffer[port_index] = allocated_ip_table-&gt;table[entry_index].dwLocalPort                 break              }         }  cleanup:         \/\/ FREE TABLE AND SLEEP         free(allocated_ip_table         Sleep(10     } }<\/code><\/pre>\n<p>  <\/p>\n<h2>\u0422\u0438\u043f\u044b \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439<\/h2>\n<p>  \u041f\u0440\u0438\u0432\u0435\u0434\u0451\u043c \u0434\u043b\u044f \u0441\u043f\u0440\u0430\u0432\u043a\u0438 \u0432\u0441\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0439 \u0438\u0437 \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"cpp\">enum BATTLEYE_REPORT_ID {     MEMORY_GUARD            = 0x21,     MEMORY_SUSPICIOUS       = 0x2F,     WINDOW_TITLE            = 0x33,     MEMORY                  = 0x35,     PROCESS_ANOMALY         = 0x38,     DRIVER_BEEP_PRESENCE    = 0x3E,     DRIVER_NULL_PRESENCE    = 0x3F,     MISCELLANEOUS_ANOMALY   = 0x3B,     PROCESS_SUSPICIOUS      = 0x40,     LSASS_MEMORY            = 0x42,     SLEEP_ANOMALY           = 0x45,     MEMORY_MODULE_SPECIFIC  = 0x46,     GENERIC_ANOMALY         = 0x48,     MEMORY_MODULE_SPECIFIC2 = 0x5B, }<\/code><\/pre>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d() } } }t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>      <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\/483068\/\"> https:\/\/habr.com\/ru\/post\/483068\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/483068\/\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ps\/ae\/ij\/psaeijpcayldgrqiqeiq6l83nue.jpeg\"><\/div>\n<p>  BattlEye \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0435\u043c\u0435\u0446\u043a\u0438\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0439 \u0430\u043d\u0442\u0438\u0447\u0438\u0442, \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u044b\u0439 32-\u043b\u0435\u0442\u043d\u0438\u043c <em>\u0411\u0430\u0441\u0442\u0438\u0430\u043d\u043e\u043c \u0425\u0435\u0439\u043a\u043e \u0421\u0443\u0442\u0435\u0440\u043e\u043c<\/em>. \u041e\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 (\u0438\u043b\u0438 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c) \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u044f\u043c \u0438\u0433\u0440 \u043f\u0440\u043e\u0441\u0442\u0443\u044e \u0432 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0430\u043d\u0442\u0438\u0447\u0438\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0443\u044e \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u0431\u0449\u0435\u0439 \u0437\u0430\u0449\u0438\u0442\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0447\u0438\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0438\u0433\u0440 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430 \u0432\u0435\u0431-\u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430, \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043d\u0430 \u0432\u0435\u0440\u0448\u0438\u043d\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0439 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u0438\u043a\u0438 \u0437\u0430\u0449\u0438\u0442\u044b \u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f; \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u044d\u0442\u043e \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430: <code>QUALITY MADE IN GERMANY<\/code>. BattlEye \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0445 \u043d\u0430\u0434 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0447\u0438\u0442\u0435\u0440\u043e\u0432 \u0432 \u0438\u0433\u0440\u0430\u0445, \u043e\u043f\u043b\u0430\u0442\u0438\u0432\u0448\u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0427\u0435\u0442\u044b\u0440\u044c\u043c\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f:<\/p>\n<ul>\n<li>BEService\n<ul>\n<li>\u0421\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f \u0441\u043b\u0443\u0436\u0431\u0430 Windows, \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c BattlEye <em>BEServer<\/em>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0438\u0435\u043d\u0442-\u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438 \u0441 <em>BEDaisy<\/em> \u0438 <em>BEClient<\/em>.<\/li>\n<\/ul>\n<\/li>\n<li>BEDaisy\n<ul>\n<li>\u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u044f\u0434\u0440\u0430 Windows, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0435\u0432\u0435\u043d\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0438 \u043c\u0438\u043d\u0438-\u0444\u0438\u043b\u044c\u0442\u0440\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0442\u0435\u0440\u0430\u043c \u0432 \u043d\u0435\u0437\u0430\u043a\u043e\u043d\u043d\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u044b<\/li>\n<\/ul>\n<\/li>\n<li>BEClient\n<ul>\n<li>\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u0430\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 Windows, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0430\u044f \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0437\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041f\u043e\u0441\u043b\u0435 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u043d\u0430 \u043f\u0440\u0438\u0432\u044f\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0438\u0433\u0440\u044b.<\/li>\n<\/ul>\n<\/li>\n<li>BEServer\n<ul>\n<li>\u041f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u0431\u044d\u043a\u0435\u043d\u0434-\u0441\u0435\u0440\u0432\u0435\u0440, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0441\u0431\u043e\u0440 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043c\u0435\u0440 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0438\u0442\u0435\u0440\u043e\u0432.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<h1>\u0428\u0435\u043b\u043b-\u043a\u043e\u0434<\/h1>\n<p>  \u041d\u0435\u0434\u0430\u0432\u043d\u043e \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u0432\u0441\u043f\u043b\u044b\u043b \u0434\u0430\u043c\u043f \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 BattlEye, \u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0436\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0438\u0449\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f BattlEye. \u041c\u044b \u043d\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043b\u0438 BattlEye \u0446\u0435\u043b\u044b\u0445 \u0448\u0435\u0441\u0442\u044c \u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0448 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0434\u0430\u043c\u043f \u0448\u0435\u043b\u043b-\u043a\u043e\u0434\u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u043b. \u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u0434\u0430 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u0434\u0430\u043c\u043f\u0430, \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0432, \u0447\u0442\u043e \u0432 BattlEye \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0448\u0435\u043b\u043b-\u043a\u043e\u0434 \u0438 \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0435 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u044f.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-296888","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296888","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=296888"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/296888\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=296888"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=296888"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=296888"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}