├── README.md ├── adblock.txt └── adscript.js /README.md: -------------------------------------------------------------------------------- 1 | # Adblock решения для ВКонтакте 2 | 3 | **Блокировка аналитики, метрики, рекламы и рекомендаций для веб-версий vk.com/vk.ru и m.vk.com/m.vk.ru** 4 | 5 | Рекомендуется использовать Adguard для полноценной работы фильтра, а также Tampermonkey для скриптов, обеспечивающих совместимость с фильтром. 6 | 7 | Всегда последнюю версию фильтра можно найти [здесь](https://vtosters.app/adblock), а скрипта — [здесь](https://vtosters.app/adscript). 8 | 9 | [Установить фильтр](https://subscribe.adblockplus.org/?location=https://vtosters.app/adblock&title=VK_Adblock) 10 | [Установить скрипт](https://greasyfork.org/ru/scripts/499839-vk-ads-fixes) 11 | 12 | ## Прочая информация 13 | 14 | О найденных багах или проблемах с блокировкой сообщайте в [issues](https://github.com/vtosters/adblock/issues). 15 | 16 | Большое спасибо разработчикам из [VK Next](https://vknext.net) и, конечно же, [Adguard](https://adguard.com) за лучший адблок, а также Tampermonkey за удобную платформу для скриптов. 17 | -------------------------------------------------------------------------------- /adblock.txt: -------------------------------------------------------------------------------- 1 | ! 2 | ! Version: 3.19 3 | ! Title: Расширенный фильтр для ВКонтакте 4 | ! Homepage: https://vtosters.app 5 | ! Last modified: 13 October 2024 18:46 6 | ! Description: Фильтр рекламы и слежки на vk.com/vk.ru. Фильтр рассчитан и для m.vk.com/m.vk.ru 7 | ! Expires: 24 hours (update frequency) 8 | ! Issues: https://github.com/vtosters/adblock/issues 9 | ! Syntax: uBlock Origin 10 | ! 11 | ! Блокировка баннеров слева и частично в ленте 12 | vk.*##.ads300-thumb 13 | vk.*##.ads600x200 14 | vk.*##.ads_600x200 15 | vk.*##.adsbyyottos 16 | vk.*##.trg-b-banner-block 17 | vk.*###ads_left 18 | vk.*###ads_left 19 | vk.*##.audio_subscribe_promo__content 20 | vk.*###apps_ads_wrap 21 | vk.*###ads_special_promo_wrap 22 | vk.*###apps_ads_wrap 23 | vk.*##._ads_promoted_post_data_w 24 | vk.*##.ads_ads_news_wrap 25 | vk.*##div#left_ads 26 | vk.*##.ads_ads_box 27 | vk.*##.ads_ads_news_wrap 28 | ~vk.*##div[id^="vk_ads_"] 29 | vk.*#$##ads_left { position: absolute; top: -2500px; } 30 | 31 | ! Инициализация отключения рекламы в скрипты вк 32 | vk.*#%#//scriptlet("set-constant", "noAds", "true") 33 | vk.*#%#//scriptlet("set-constant", "noAdsAtAll", "true") 34 | vk.*#%#//scriptlet("set-constant", "no_left_ads", "true") 35 | vk.*#%#//scriptlet("set-constant", "no_ads", "true") 36 | vk.*#%#//scriptlet("set-constant", "isNoAdsForce", "true") 37 | vk.*#%#//scriptlet("set-constant", "hide_ad", "true") 38 | vk.*#%#//scriptlet("set-constant", "ya_direct", "false") 39 | vk.*#%#//scriptlet("set-constant", "yaDirectAdActive", "false") 40 | 41 | ! Общая реклама и метрика 42 | ||ad.mail.ru^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 43 | ||ad.mail.ru/static/admanhtml/rbadman-html5.min.js^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 44 | ||vk.*/al_video.php?act=ads_stat^$domain=important 45 | ||vk.*/js/cmodules/web/ads_light.$script 46 | ||vk.*/css/al/ads_light.$script 47 | ||vk.*/dist/web/ads_light.$script 48 | ||vk.*/dist/web/performance_observers.$script 49 | ||vk.*/dist/web/jobs_devtools_notification.$script 50 | ||ad.mail.ru/vp/*&duration=domain=vk.com|vk.ru|m.vk.com|m.vk.ru 51 | ||stats.vk-portal.net^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 52 | ||*.ms.vk.*^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 53 | ||tns-counter.ru^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 54 | ||mail.ru/k?$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 55 | ||top-fwz1.mail.ru^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 56 | ||mc.yandex.ru^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 57 | ||an.yandex.ru^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 58 | ||scorecardresearch.com^$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 59 | ||vk.*/ads_rotate^$domain=important 60 | ||https://vk.*/rtrg?$domain=vk.com|vk.ru|m.vk.com|m.vk.ru 61 | ||vk.*/al_video.php?act=ads_stat 62 | 63 | ! Блокировка баннеров слева и частично в ленте 64 | vk.*###ads_left 65 | vk.*##.audio_subscribe_promo__content 66 | vk.*###apps_ads_wrap 67 | vk.*###ads_special_promo_wrap 68 | vk.*###apps_ads_wrap 69 | vk.*##._ads_promoted_post_data_w 70 | vk.*##.ads_ads_news_wrap 71 | vk.*##div#left_ads 72 | vk.*##.ads_ads_box 73 | vk.*##.ads_ads_news_wrap 74 | ~vk.*##div[id^="vk_ads_"] 75 | vk.*#$##ads_left { position: absolute; top: -2500px; } 76 | 77 | ! Рекламные баннеры в ленте 78 | ||vk.*/al_feed.php?ads_section^ 79 | 80 | ! Костыли 81 | @@://vk.*/ads$document,~third-party 82 | @@://vk.*/exchange$document 83 | @@||oauth.vk.ru$document 84 | @@||login.vk.*/?act=openapi$domain=220vk.ru 85 | @@||vk.*/vkpay 86 | @@||oauth.vk.*/authorize? 87 | @@api_url=http://api.vk.*/api.php 88 | @@api_url=https://api.vk.*/api.php 89 | 90 | ! Отправка логов и ошибок 91 | ||vk.*/errors.php^ 92 | ||vk.*/upload_fails.php^ 93 | vk.*###system_msg 94 | 95 | ! Реклама групп с пометкой рекламы 96 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.wall_marked_as_ads) 97 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="wall_marked_as_ads"]'] 98 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='> div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.wall_marked_as_ads'] 99 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_marked_as_ads'] 100 | vk.*##.wall_wrap div[id^="post-"][-ext-has='div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.wall_marked_as_ads'] 101 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"]:has(div[class="wall_marked_as_ads"]) 102 | vk.*##div[class^="feed_row "] > div[id^="feed_repost-"]:has(.wall_marked_as_ads) 103 | vk.*##.wall_marked_as_ads 104 | vk.*###page_wall_posts > div.post_marked_as_ads 105 | vk.*###page_wall_posts > div.post[data-ad-block-uid] 106 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.ui_actions_menu_item[href*="ad_info.php"]) 107 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.ui_actions_menu_item[data-task-click="AdsLight/copy_marker_id"]) 108 | vk.*#?##feed_rows > div[class="feed_row "]:has(.ui_actions_menu_item[href*="ad_info.php"]) 109 | vk.*#?##feed_rows > div[class="feed_row "]:has(.ui_actions_menu_item[data-task-click="AdsLight/copy_marker_id"]) 110 | vk.*#?##feed_rows > div[id^="feed_row "]:-abp-has(.ui_actions_menu_item[data-task-click="AdsLight/copy_marker_id"]) 111 | vk.*###page_wall_posts > div[id^="post-"]:has(a[onclick*="ads_params"][onclick*="post_ad_data"]) 112 | vk.*#?##feed_rows > div[class="feed_row "]:has(a[onclick*="ads_params"][onclick*="post_ad_data"]) 113 | vk.*###page_wall_posts > div[id^="post-"]:has(a[onclick*="adsite_"]) 114 | vk.*#?##feed_rows > div[class="feed_row "]:has(a[onclick*="adsite_"]) 115 | vk.*###page_wall_posts > div[id^="post-"]:has(a[data-mt-video-hls*="mradx.net"]) 116 | vk.*#?##feed_rows > div[class="feed_row "]:has(a[data-mt-video-hls*="mradx.net"]) 117 | vk.*###page_wall_posts > div[id^="post-"]:has(img[src^="https://r0.mradx.net"]) 118 | vk.*#?##feed_rows > div[class="feed_row "]:has(img[src^="https://r0.mradx.net"]) 119 | vk.*###page_wall_posts > div[id^="post-"].post_marked_as_ads 120 | vk.*#?##feed_rows > div[class="feed_row "].post_marked_as_ads 121 | 122 | ! Реклама интересных авторов 123 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.wall_authors_rec) 124 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="wall_authors_rec"]'] 125 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='> div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.wall_authors_rec'] 126 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_authors_rec'] 127 | vk.*##.wall_wrap div[id^="post-"][-ext-has='div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.wall_authors_rec'] 128 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"]:has(div[class="wall_authors_rec"]) 129 | vk.*##div[class^="feed_row "] > div[id^="feed_repost-"]:has(.wall_authors_rec) 130 | vk.*##.wall_authors_rec 131 | 132 | ! Рекомендации лайв трансляций в ленте 133 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.wall_live_recommended) 134 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="wall_live_recommended"]'] 135 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='> div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.wall_live_recommended'] 136 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_live_recommended'] 137 | vk.*##.wall_wrap div[id^="post-"][-ext-has='div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.wall_live_recommended'] 138 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"]:has(div[class="wall_live_recommended"]) 139 | vk.*##div[class^="feed_row "] > div[id^="feed_repost-"]:has(.wall_live_recommended) 140 | vk.*##.wall_live_recommended 141 | 142 | ! Клипы в ленте 143 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.ShortVideoFeedBlock) 144 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="ShortVideoFeedBlock"]'] 145 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='> div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.ShortVideoFeedBlock'] 146 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='div._post_content > div.post_content > div.post_info > div.wall_text > div.ShortVideoFeedBlock'] 147 | vk.*##.wall_wrap div[id^="post-"][-ext-has='div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.ShortVideoFeedBlock'] 148 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"]:has(div[class="ShortVideoFeedBlock"]) 149 | vk.*##div[class^="feed_row "] > div[id^="feed_repost-"]:has(.ShortVideoFeedBlock) 150 | vk.*##.ShortVideoFeedBlock 151 | vk.*###page_block.ShortVideoFeedBlock 152 | 153 | ! Баннеры с приложениями вк в ленте 154 | vk.*##.apps_feedRightAppsBlock_new_apps.apps_feedRightAppsBlock.page_block 155 | vk.*##.apps_feedRightAppsBlock_single_app.apps_feedRightAppsBlock.page_block 156 | vk.*##.apps_feedRightAppsBlock_collaborative_recommend_apps.apps_feedRightAppsBlock.page_block 157 | vk.*##.apps_feedRightAppsBlock__row 158 | vk.*##.apps_feedRightAppsBlock 159 | vk.*##.apps_feedRightAppsBlock_new_apps 160 | vk.*##.NewMiniAppsRightBlock__root 161 | vk.*##.RecommendedNarrativesBlock 162 | vk.*##.RecommendedNarrativesBlockBase 163 | m.vk.*##.feedAssistancePromoButtonInstallApp 164 | vk.*###feed_mini_apps_recomm 165 | vk.*##.MarketItemsPortlet 166 | vk.*###achievement_game 167 | 168 | ! Рекомендации групп и друзей в ленте 169 | vk.*###groups_filters_wrap > .page_block 170 | vk.*###groups_filters_wrap 171 | vk.*###feed_recommends 172 | vk.*##.feed_groups_recomm 173 | vk.*##.feed_friends_recomm 174 | vk.*###profile_friends_recomm 175 | vk.*###friends_right_blocks_root 176 | vk.*###group_recom_wrap 177 | vk.*##.GroupsRecommendationsBlock 178 | vk.*##.FriendsSuggestionsBlock 179 | vk.*###friends_possible_block 180 | vk.*###feed_friends_recomm:not(.similar_groups_block) 181 | vk.*###block_aliexpress-recommendations-carousel 182 | vk.*###recommended_narratives 183 | vk.*###feed_right_blocks_root 184 | vk.*###groups_list_right_blocks_root 185 | 186 | ! Универсальные правила для блокировки рекламных баннеров для блокировки будущих рекламных баннеров 187 | vk.*##[class^="ads_ad_"] 188 | vk.*##[class^="ads"] 189 | vk.*##.ads_ads_news_wrap 190 | vk.*##._ads_promoted_post_data_w 191 | vk.*##div#left_ads 192 | vk.*##div[data-ad-view] 193 | vk.*##div[data-ad] 194 | vk.*##div[ads_left] 195 | vk.*##.post[data-ad] 196 | vk.*##.post[data-ad-view] 197 | vk.*##div[id^="postadsite_"] 198 | vk.*###_ads_block_data_w 199 | vk.*###mailru-visibility-check 200 | 201 | ! Баннер VK Pay в настройках 202 | vk.*###settings_ps_promo_big_banner_container 203 | vk.*##.settings_vkpay_promo_banner_link_a 204 | vk.*###settings_vkpay_promo_big_banner_container 205 | 206 | ! Промо реклама музыки 207 | ||vk.*/al_audio.php?act=need_show_promo^ 208 | vk.*##.CatalogBlock__subscription, .CatalogSection__rightColumn > .CatalogSection__stickyColumn .CatalogBlock__separator 209 | vk.*##div#content > div._audio_page_layout.audio_page_layout.audio_page_layout2 > div._audio_page_content_block_wrap.audio_page_content_block_wrap > div.page_block._audio_page_content_block > div.audio_page_sections._audio_page_sections.clear_fix > div.audio_section.audio_w_covers._audio_section._audio_section__all.audio_section__all > div.audio_page_section_layout._audio_page_section_layout.has_friends_block > div.audio_page_all_layout_columns.clear_fix > div.audio_friends_list_wrap._audio_friends_list_wrap > div.audio_friends_list_content._audio_friends_list_content > div.audio_subscribe_promo 210 | vk.*##.audio_promo 211 | vk.*###content > div._audio_page_layout.audio_page_layout.audio_page_layout2 > div._audio_page_content_block_wrap.audio_page_content_block_wrap:nth-child(3) > div.audio_page_sections._audio_page_sections.clear_fix:last-child > div.audio_section._audio_section._audio_section__all.audio_section__all.clear_fix.audio_w_covers:last-child > div.CatalogSection.CatalogSection--divided.CatalogSection__my > div.CatalogBlock.CatalogBlock--divided:last-child > div.CatalogSection__columns > div.CatalogSection__rightColumn:last-child > div.CatalogSection__stickyColumn > div.CatalogBlock:last-child 212 | 213 | ! Промо сторис 214 | vk.*##.stories_feed_preview_item.story_feed_new_item.story_feed_new_item_promo 215 | 216 | ! Popup с просьбой включить нотифаи для браузера 217 | vk.*##div#box_layer > div.popup_box_container.PushNotifierPopup__popup-box_type--suggest 218 | 219 | ! Бесполезный диалог на странице 220 | vk.*##.profile_rate_warning 221 | 222 | ! Скрытие рекомендаций для написания поста 223 | vk.*##.post_suggest._post_suggest 224 | 225 | ! Баннер с просьбой юзать мобильный вк в клипах 226 | vk.*##.ShortVideoStub 227 | vk.*###feed_blog_reminder 228 | 229 | ! Новая реклама в ленте 230 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.wall_text_name_explain_promoted_post) 231 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="wall_text_name_explain_promoted_post"]'] 232 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.MarketItemsFeedBlock) 233 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="MarketItemsFeedBlock"]'] 234 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.block_aliexpress-recommendations-carousel) 235 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="block_aliexpress-recommendations-carousel"]'] 236 | 237 | ! Фикс удаления стилей адг 238 | vk.*#%#//scriptlet('set-constant', 'window.Unauthorized2', 'undefined') 239 | vk.*#%#//scriptlet('set-constant', 'window.PageBottomBanners.initUnauthBanner', 'noopFunc') 240 | 241 | ! Удаление актуальных новостей в РФ 242 | vk.*##aside[aria-label="Актуальные новости"] 243 | 244 | ! Кукис варн 245 | vk.*###cookies_policy_wrap 246 | 247 | ! Ошибка старого браузера 248 | vk.*##.OldBrowser 249 | 250 | ! Рекомендательные технологии 251 | vk.*##.LegalRecommendationsLinkLeftMenuAuthorized 252 | vk.*##.WideSeparator--legalRecommendationsLink 253 | 254 | ! Новые рекомендации видео 255 | vk.*#?##page_wall_posts > div[id^="post-"]:-abp-has(.FeedVideosForYou) 256 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"][-ext-has='div[class="FeedVideosForYou"]'] 257 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='> div._post_content > div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.FeedVideosForYou'] 258 | vk.*###page_wall_posts > div[id^="post-"][-ext-has='div._post_content > div.post_content > div.post_info > div.wall_text > div.FeedVideosForYou'] 259 | vk.*##.wall_wrap div[id^="post-"][-ext-has='div.post_content > div.post_info > div.wall_text > div.wall_post_cont > div.FeedVideosForYou'] 260 | vk.*###feed_rows > div[class="feed_row "] > div[class^="feed_repost-"]:has(div[class="FeedVideosForYou"]) 261 | vk.*##div[class^="feed_row "] > div[id^="feed_repost-"]:has(.FeedVideosForYou) 262 | vk.*##.FeedVideosForYou 263 | vk.*###page_block.FeedVideosForYou 264 | 265 | ! Плашка донута под постами 266 | vk.*##.ReplyBoxDonut 267 | 268 | ! m.vk поддержка 269 | m.vk.*#?#.wall_item:has(> div.wi_body > div.ads_mark) 270 | m.vk.*##.wall_item[data-ad-view] 271 | m.vk.*##[class^="_ads_block_data_w"] 272 | m.vk.*##.wall_item.feedAssistance.GroupsRecommendedSlider 273 | m.vk.*##.wall_item.feedAssistance.friendsRecommendedSliderWrap 274 | m.vk.*##.wall_item.post_exploreBait 275 | m.vk.*##.wall_item.post_withExtraHeader 276 | m.vk.*##.vkuiModalRoot, .vkuiModalRoot--desktop 277 | m.vk.*##.vkuiPopoutRoot__modal 278 | 279 | ! Навязывание проверки номера 280 | vk.*###react_rootCheckValidationPhone 281 | vk.*##body:style(position:static!important) 282 | 283 | ! Монетизация в группах 284 | vk.*##.group_settings_advice 285 | -------------------------------------------------------------------------------- /adscript.js: -------------------------------------------------------------------------------- 1 | // ==UserScript== 2 | // @name VK Ads Fixes 3 | // @name:ru Правки рекламы ВКонтакте 4 | // @name:uk Правки реклами ВКонтакте 5 | // @namespace https://vtosters.app/ 6 | // @version 2.2 7 | // @description Script for blocking ads in VK (VKontakte), bypassing blocking detection, etc. 8 | // @description:ru Скрипт для блокировки рекламы в VK (ВКонтакте), обхода обнаружения блокировки и т.д. 9 | // @description:uk Скрипт для блокування реклами у VK (ВКонтакті), обходу виявлення блокування тощо. 10 | // @author gdlbo, Vologhat 11 | // @match https://vk.com/* 12 | // @match https://vk.ru/* 13 | // @grant none 14 | // @downloadURL https://update.greasyfork.org/scripts/518509/VK%20Ads%20Fixes.user.js 15 | // @updateURL https://update.greasyfork.org/scripts/518509/VK%20Ads%20Fixes.meta.js 16 | // ==/UserScript== 17 | 18 | (() => { 19 | "use strict" 20 | 21 | class VkPeProperties 22 | { 23 | static #KEYS=[ 24 | "send_user_info_stats", "force_send_user_info", "send_user_info_on_localhost", 25 | "send_navigation_stats_in_spa", "log_send_user_info_errors", "web_mytracker_collect_post_stats", 26 | "web_stats_device_id", "web_stats_reduce_debounce", "web_stats_send_beacon", 27 | "web_stats_send_on_events_limit", "web_stats_transport_story_view", "sentry_js_web_request_timeouts_feature", 28 | "sentry_js_web_request_timeouts_forwarding", "sentry_js_web_timeouts_forwarding", "sentry_js_web_verbose", 29 | "sentry_log_network_errors", "ads_app_form_link_redirect", "ads_autopromotion_web_geo", 30 | "ads_easy_promote_goods_new_create_api", "ads_light_methods_protection", "ads_market_autopromotion_bookmarks_stats", 31 | "ads_use_vk_community_video_portrait_4_5", "clips_web_my_tracker", "feed_post_track_code_client_web", 32 | "games_send_track_visitor_activity", "js_errors_no_write_uncaught_errors", "tgb_adblock_protection", 33 | "post_adblock_protection_promo", "eager_error_monitoring", "mini_apps_performance_close_app_empty_event", 34 | "mini_apps_performance_iframe_errors", "mini_apps_performance_web", "mini_apps_send_my_tracker_activity", 35 | "post_click_analytics_int_ext_link_click_web", "posting_track_event_count", "unique_adblock_users", 36 | "audio_my_tracker_web", "mini_apps_send_stat_arguments_bridge_events_sdk", "ajax_request_parse_html_error", 37 | "js_errors_no_write_uncaught_errors", "tns_track_sections", "tns_track_hosts", "geminus_counter", 38 | "ads_pixels_track_new_events_web_mvk", "web_navigation_handlers", "measure_module_navigation_stats", 39 | "group_join_track_event_count", "feed_content_events_open_post_event_web", "feed_posts_duration_stats_fix", 40 | "collect_unsupported_user_info_stats", "log_fetch_requests", "log_fetch_requests_get", 41 | "post_adguard_protection_promo", "extended_ajax_logging", "messenger_mediascope_stats_collect", 42 | "audio_player_stats_web" 43 | ]; 44 | 45 | static isValidProperty(key) 46 | { return key in this.#KEYS } 47 | } 48 | 49 | //hook vk 50 | let actualVk=window.vk 51 | const vkHooks=new Set(); 52 | Object.defineProperty(window,"vk", { 53 | get:() => actualVk, 54 | set:(value) => { 55 | actualVk=value 56 | if(actualVk)vkHooks.forEach( hook => hook(actualVk)) 57 | return true 58 | }, 59 | configurable:true 60 | }) 61 | 62 | //hook vk properties 63 | const createAndPerformVkPropHook=(key,hookfn) => { 64 | //hook when vk redefines 65 | vkHooks.add(vk => { 66 | if(vk&&vk[key])hookfn(vk[key]) 67 | 68 | //hook when property redefines 69 | let actualProp=vk[key] 70 | Object.defineProperty(vk,key, { 71 | get:() => actualProp, 72 | set:(value) => { 73 | actualProp=value 74 | hookfn(actualProp) 75 | return true 76 | }, 77 | configurable:true, 78 | enumerable:true 79 | }) 80 | }) 81 | } 82 | 83 | //remove properties from vk.pe hook 84 | createAndPerformVkPropHook("pe",pe => { 85 | console.log("patch pe") 86 | 87 | Object.keys(pe) 88 | .filter(key => VkPeProperties.isValidProperty(key)) 89 | .forEach(key => delete window.vk.pe[key]) 90 | }) 91 | 92 | //patch vk.AudioAdsConfig hook 93 | createAndPerformVkPropHook("audioAdsConfig",audioAdsConfig => { 94 | console.log("patch audioAdsConfig") 95 | 96 | Object.defineProperties(audioAdsConfig, { 97 | enabled: { 98 | value:false 99 | }, 100 | day_limit_reached: { 101 | value:false 102 | }, 103 | sections: { 104 | value:[] 105 | } 106 | }) 107 | }) 108 | 109 | //disable error monitor DSN hook 110 | createAndPerformVkPropHook("cfg",cfg => { 111 | console.log("disable error monitoring DSN") 112 | 113 | Object.defineProperty(cfg.error_monitoring_config,"dsn", { 114 | value:"http://127.0.0.1" 115 | }) 116 | }) 117 | 118 | //patch vk.adParams hook 119 | createAndPerformVkPropHook("adParams",adParams => { 120 | console.log("patch adParams") 121 | 122 | Object.defineProperties(adParams, { 123 | ads_can_show: { 124 | value:0 125 | }, 126 | leftads: { 127 | value:"" 128 | }, 129 | wsTransport: { 130 | value:"http://127.0.0.1" 131 | }, 132 | ads_rotate_interval: { 133 | vallue:Number.MAX_SAFE_INTEGER 134 | } 135 | }) 136 | }) 137 | 138 | //trigger vk and properties hooks 139 | window.vk=window.vk 140 | 141 | setInterval(() => { 142 | //replace "away.php" url to the redirect url 143 | document.querySelectorAll("a[href*='away.php']") 144 | .forEach(a => { 145 | const url=URL.parse(a.href) 146 | if(!url.pathname.endsWith("away.php"))return 147 | //find a search parameter with valid redirect url 148 | url.searchParams.forEach((value) => { 149 | if(URL.canParse(value)) 150 | { 151 | a.href=value 152 | return 153 | } 154 | }) 155 | }) 156 | 157 | //remove _ads_block_data_w blocks 158 | document.querySelectorAll("div._ads_block_data_w") 159 | .forEach(div => { 160 | console.log(`Remove block with id ${div.id}]`) 161 | div.remove() 162 | }) 163 | 164 | //remove ads_left block 165 | const adsLeft=document.getElementById("ads_left") 166 | if(adsLeft) 167 | { 168 | console.log("Remove block with id: ads_left") 169 | adsLeft.remove() 170 | } 171 | 172 | //clear all AdsLight functions 173 | if(window.AdsLight) 174 | Object.keys(window.AdsLight) 175 | .filter(key => typeof window.AdsLight[key]==="function") 176 | .forEach(key => Object.defineProperty(window.AdsLight,key, { 177 | value:() => {} 178 | })) 179 | 180 | //patch window ads properties 181 | Object.defineProperties(window, { 182 | noAds: { 183 | value:true, 184 | configurable:true 185 | }, 186 | noAdsAtAll: { 187 | value:true, 188 | configurable:true 189 | }, 190 | no_left_ads: { 191 | value:true, 192 | configurable:true 193 | }, 194 | no_ads: { 195 | value:true, 196 | configurable:true 197 | }, 198 | isNoAdsForce: { 199 | value:true, 200 | configurable:true 201 | }, 202 | hide_ad: { 203 | value:true, 204 | configurable:true 205 | }, 206 | ya_direct: { 207 | value:false, 208 | configurable:true 209 | }, 210 | yaDIrectAdActive: { 211 | value:false, 212 | configurable:true 213 | }, 214 | __adsSet: { 215 | value:() => {}, 216 | configurable:true 217 | }, 218 | __adsUpdate: { 219 | value:() => {}, 220 | configurable:true 221 | }, 222 | AdmanHTML: { 223 | value:false, 224 | configurable:true 225 | }, 226 | audioAdsConfig: { 227 | value:false, 228 | configurable:true 229 | }, 230 | __adsGetAjaxParams: { 231 | value:() => {}, 232 | configurable:true 233 | }, 234 | __adsLoader: { 235 | value:() => {}, 236 | configurable:true 237 | }, 238 | }) 239 | },30000/navigator.hardwareConcurrency) 240 | })(); 241 | --------------------------------------------------------------------------------