Without battleye anti cheat что это
Изменения в популярном античите BattlEye и способы их обхода
Основные обновления шелл-кода BattlEye
Время идёт, античиты меняются, и для повышения эффективности продукта в них появляются и исчезают функции. Год назад я подготовил подробное описание шелл-кода BattlEye в своём блоге [перевод на Хабре], и эта часть статьи станет простым отражением изменений, внесённых в шелл-код.
Чёрный список временных меток
В последнем анализе BattlEye, в списке теневого бана было всего две метки дат времени компиляции, и похоже, что разработчики решили добавить гораздо больше:
0x5B12C900 (action_x64.dll)
0x5A180C35 (TerSafe.dll, Epic Games)
0xFC9B9325 (?)
0x456CED13 (d3dx9_32.dll)
0x46495AD9 (d3dx9_34.dll)
0x47CDEE2B (d3dx9_32.dll)
0x469FF22E (d3dx9_35.dll)
0x48EC3AD7 (D3DCompiler_40.dll)
0x5A8E6020 (?)
0x55C85371 (d3dx9_32.dll)
0x456CED13 (?)
0x46495AD9 (D3DCompiler_40.dll)
0x47CDEE2B (D3DX9_37.dll)
0x469FF22E (?)
0x48EC3AD7 (?)
0xFC9B9325 (?)
0x5A8E6020 (?)
0x55C85371 (?)
Мне не удалось идентифицировать оставшиеся временные метки, а два 0xF******* — это хеши, созданные детерминированными сборками Visual Studio. Благодарю @mottikraus и T0B1 за идентификацию некоторых временных меток.
Проверки модулей
Как показал основной анализ, ключевой особенностью BattlEye является перебор модулей, и с момента прошлого анализа в список был добавлен ещё один модуль:
Вероятно, это обнаружение определённых прокси-dll, так как здесь проверяется размер таблицы переадресации.
Заголовки окон
В предыдущем анализе при помощи названий окон помечались флагами различные поставщики читов, но с тех пор шелл-код перестал проверять эти заголовки окон. Список заголовков окон был полностью заменён на:
Названия образов
BattlEye печально известен тем, что использует очень примитивные методы обнаружения, и одним из них является чёрный список названий образов. С каждым годом список забаненных названий образов становится всё длиннее, а за последние 11 месяцев были добавлены пять новых:
frAQBc8W.dll
C:\\Windows\\mscorlib.ni.dll
DxtoryMM_x64.dll
Project1.dll
OWClient.dll
Стоит заметить, что присутствие модуля с названием, соответствующим любому из пунктов списка, не будет означать, что вас сразу же забанят. Механизм создания отчётов также передаёт базовую информацию о модуле, которая скорее всего используется для того, чтобы отличить читы от коллизий на сервере BattlEye.
7-Zip широко использовался и продолжает использоваться участниками чит-сцены как заполнитель памяти для пустот кода (code-caves). BattlEye пытается бороться с этим, выполняя очень плохую проверку целостности, которую со времени моей предыдущей статьи изменили:
Похоже, разработчики BattlEye догадались, что моя предыдущая статья привела к тому, что многие пользователи обходят эту проверку, просто копируя нужные байты в место, проверяемое BattlEye. Как же они исправили ситуацию? Сместили проверку на восемь байтов и продолжили использовать тот же плохой способ проверки целостности. Исполняемый раздел read-only, и всё, что вам нужно сделать — загрузить 7-Zip с диска и сравнить перемещённые разделы друг с другом; если есть какие-то расхождения, то что-то не так. Серьёзно, ребята, выполнять проверки целостности не так сложно.
Проверка сети
Перебор таблицы TCP по-прежнему работает, но после того, как я выпустил предыдущий анализ, критикующий разработчиков за пометку флагами IP-адресов Cloudflare, они всё-таки убрали эту проверку. Античит всё равно сообщает о порте, который использует для соединения xera.ph, но разработчики добавили новую проверку, чтобы определять, есть ли у процесса с соединением активная защита (предположительно, это выполняется при помощи обработчика).
Благодарю IChooseYou и abstract
Обход по стеку BattlEye
BattlEye реализовал «обход по стеку», несмотря на то, что публично об этом не заявлялось и на момент выпуска статьи оставалось только слухами. Обратите внимание на кавычки — то, что вы здесь увидите, на самом деле не настоящий обход по стеку, а просто сочетание проверки обратного адреса и дампа вызывающей программы. Настоящая реализация обхода по стеку проходила бы по стеку и генерировала настоящий стек вызовов.
Как я объяснял в предыдущей статье про BattlEye, система античита динамически выполняет потоковую передачу шелл-кода в процесс игры, когда она запущена. Эти шелл-коды имеют разные размеры и задачи, и не передаются одновременно. Замечательное свойство подобной системы заключается в том, что исследователям требуется динаические анализировать античит, в процессе мультиплеерного матча, что усложняет определение характеристик этого античита. Также это позволяет античиту применять к разным пользователям различные меры, например, передавать более глубоко инвазивный модуль только тому человеку, который имеет необычно высокое соотношение убийств и смертей, и тому подобное.
Один из таких шелл-кодов BattlEye отвечает за выполнение этого анализа стека; мы будем называет его shellcode8kb, потому что он немного меньше по сравнению с shellcodemain, который я задокументировал здесь. Этот небольшой шелл-код при помощи функции AddVectoredExceptionHandler подготавливает векторизированный обработчик исключений, а затем устанавливает ловушки прерываний на следующих функциях:
GetAsyncKeyState
GetCursorPos
IsBadReadPtr
NtUserGetAsyncKeyState
GetForegroundWindow
CallWindowProcW
NtUserPeekMessage
NtSetEvent
sqrtf
__stdio_common_vsprintf_s
CDXGIFactory::TakeLock
TppTimerpExecuteCallback
Для этого он просто итеративно обходит список стандартно используемых функций, присваивая первую инструкцию соответствующей функции значение int3, которое используется как точка останова. После установки точки останова все вызовы соответствующей функции проходят через обработчик исключений, имеющий полный доступ к регистрам и стеку. Имея этот доступ, обработчик исключений создаёт дамп адреса вызывающей программы из вершины стека, и в случае выполнения одного из эвристических условий 32 байта вызывающей функции дампятся и отправляются на сервера BattlEye с идентификатором отчёта 0x31:
Как мы видим, обработчик исключений выполняет дамп всех вызывающих функций в случае бесцеремонного изменения страницы памяти или когда функция не принадлежит к известному модулю процесса (тип страницы памяти MEM_IMAGE не задан manualmapper-ами). Также он выполняет дамп вызывающих функций, когда не удаётся вызвать NtQueryVirtualMemory, чтобы читы не привязывались к этому системному вызову и не скрывали свой модуль от дампера стека. Последнее условие на самом деле довольно интересное, оно помечает все вызывающие функции, использующие гаджет jmp qword ptr [rbx] — способ, применяемый для «спуфинга обратного адреса». Он выпущен моим коллегой-участником тайного клуба с ником namazso. Похоже, разработчики BattlEye увидели, что люди пользуются этим способом спуфинга в их играх и решили нацелиться непосредственно на него. Здесь стоит упомянуть, что описанный namazsos способ работает хорошо, достаточно просто использовать другой гаджет, или полностью отличающийся, или просто другой регистр — это не важно.
Совет разработчикам BattlEye: используемый вами для поиска CDXGIFactory::TakeLock в памяти неверен, потому что вы (случайно или намеренно) включили CC padding, который сильно отличается при каждой компиляции. Для максимальной совместимости нужно убрать padding (первый байт в сигнатуре) и так вы скорее всего поймаете больше читеров 🙂
Полная структура, отправляемая серверу BattlEye, выглядит так:
Распознавание гипервизора в BattlEye
Игра в кошки-мышки в области взлома игр продолжает оставаться источником новаций в эксплойтах и борьбе с читами. Использование технологии виртуализации во взломе игр начало активно развиваться после появления таких простых в применении гипервизоров, как DdiMon Сатоси Танда и hvpp Петра Бенеша. Эти два проекта используются большинством платных читов андерграундной хакерской сцены благодаря низкому порогу вхождения и подробной документации. Эти релизы с большой вероятностью ускорили гонку вооружений в области гипервизоров, которая сейчас начинает проявляться в сообществе хакеров игр. Вот что об этой ситуации говорит администратор одного из крупнейших сообществ взлома игр под ником wlan:
С появлением готовых к использованию систем гипервизоров для взлома игр стало неизбежным то, что античиты наподобие BattlEye сосредоточатся на обобщённом распознавании виртуализации.
Широкое распространение гипервизоров объясняется недавними усовершенствованиями в античитах, которые оставили хакерам очень мало возможностей для модификации игр традиционными способами. Популярность гипервизоров можно объяснить простотой избегания античита, потому что виртуализация упрощает сокрытие информации при помощи таких механизмов, как syscall hooks и MMU virtualization.
Недавно в BattlEye было реализовано распознавание распространённых гипервизоров наподобие упомянутых выше платформ (DdiMon, hvpp) при помощи обнаружения на основе времени. Это распознавание пытается обнаружить нестандартные значения времени инструкции CPUID. CPUID — это относительно малозатратная на реальном оборудовании инструкция, обычно требующая всего двух сотен циклов, а в виртуальном окружении её выполнение может занимать в десять раз больше времени из-за лишних операций, вызываемых движком интроспекции. Движок интроспекции непохож на реальное оборудование, которое просто выполняет операцию ожидаемым образом, поскольку он на основании произвольного критерия отслеживает и условно изменяет данные, возвращаемые гостю.
Забавный факт: CPUID активно используется в этих процедурах временнОго распознавания, потому что это инструкция с безусловным выходом, а также инструкция с непривилегированной сериализацией. Это значит, что CPUID используется в качестве барьера и гарантирует, что инструкции до и после неё будут выполнены; тайминги при этом становятся независимыми от обычного переупорядочивания инструкций. Можно также использовать инструкции наподобие XSETBV, тоже выполняющих безусловный выход, но для обеспечения независимого тайминга для этого потребуется какая-нибудь барьерная инструкция, чтобы до или после неё не произошло никакого переупорядочивания, влияющего на надёжность таймингов.
Распознавание
Ниже представлена процедура распознавания из модуля BattlEye «BEClient2»; я выполнил её реверс-инжиниринг и воссоздал код на псевдо-C, а потом опубликовал его в twitter. Спустя день после моего твита разработчики BattlEye неожиданно изменили обфускацию BEClient2, видимо надеясь, что это помешает мне анализировать модуль. Предыдущая обфускация не менялась больше года, но изменилась на следующий день после моего твита о ней — впечатляющая скорость.
Как я говорил выше, это самая распространённая техника распознавания с использованием безусловно перехватываемых инструкций. Однако она уязвима перед подделкой времени, и об этом мы подробно расскажем в следующем разделе.
Обход распознавания
У такого способа распознавания есть проблемы. Во-первых, он подвержен подделке времени, которая обычно выполняется двумя способами: смещением TSC в VMCS или уменьшением TSC при каждом выполнении CPUID. Существует много других способов справиться с атаками на основе времени, но последний гораздо проще в реализации, потому что можно гарантировать, что время выполнения инструкции будет находиться в пределах одного-двух тактов синхронизации выполнения на реальном оборудовании. Сложность обнаружения этой техники подделки времени зависит от опыта разработчика. В следующем разделе мы рассмотрим распознавание подделки времени и улучшение реализации, созданной в BattlEye. Второй причиной изъяна этого способа распознавания является то, что задержка CPUID (время выполнения) в разных процессорах сильно отличается и в зависимости от значения листа. На выполнение может потребоваться время в пределах 70-300 тактов. Третья проблема этой процедуры распознавания заключается в использовании SetThreadPriority. Эта функция Windows используется для задания значения приоритета заданного дескриптора потока, однако ОС не всегда слушает запрос. Эта функция является просто предложением повышения приоритета потока, и нет гарантии, что оно произойдёт. Таким образом, появляется возможность того, что этот способ будет подвержен воздействию прерываний или других процессов.
Обойти распознавание в этом случае легко, и описанная техника подделки времени эффективно побеждает этот способ распознавания. Если разработчики BattlEye захотят улучшить этот способ, то в следующем разделе приведены некоторые рекомендации.
Усовершенствование
Эту функцию можно улучшить множеством способов. Во-первых, можно намеренно отключить прерывания и принудительно задать приоритет потока, изменив CR8 на самый высокий уровень IRQL. Также было бы идеально изолировать эту проверку в одном ядре ЦП. Ещё одно улучшение: следует использовать разные таймеры, однако многие из них не так точны, как TSC, но существует один такой таймер под названием таймер APERF, или Actual Performance Clock. Я рекомендую этот таймер, потому что с ним сложнее жульничать и он только накапливает счётчик, когда логический процессор находится в состоянии питания C0. Это великолепная альтернатива использованию TSC. Также можно использовать таймер ACPI, HPET, PIT, таймер GPU, таймер NTP или таймер PPERF, который похож на APERF, но считает такты, которые воспринимаются как выполнение инструкций. Недостаток этого заключается в том, что необходимо включение HWP, который может быть отключен промежуточным оператором, а потому оказывается бесполезным.
Ниже представлена улучшенная версия процедуры распознавания, которая должна выполняться в ядре:
Примечание: IET означает Instruction Execution Time (время выполнения инструкции).
Тем не менее, процедура всё равно может быть очень ненадёжной в обнаружении распространённых гипервизоров, поскольку время выполнения CPUID может очень сильно варьироваться. Лучше было бы сравнивать IET двух инструкций. Одна из них должна иметь большую задержку выполнения, чем CPUID. Например, это может быть FYL2XP1 — арифметическая инструкция, выполнение которой занимает чуть больше времени, чем среднее IET инструкции CPUID. Кроме того, она не вызывает никаких ловушек в гипервизоре и её время можно надёжно замерить. При помощи этих двух функций функция профилирования могла бы создавать массив для хранения IET инструкций CPUID и FYL2XP1. При помощи таймера APERF можно было бы получать начальный такт арифметической инструкции, выполнять инструкцию и вычислять для неё дельту тактов. Результаты можно было бы сохранять в массив IET в течение N циклов профилирования, получая среднее значение, и повторять процесс для CPUID. Если время выполнения инструкции CPUID больше, чем у арифметической инструкции, то это надёжный признак того, что система виртуальна, потому что арифметическая инструкция ни при каких условиях не могла бы тратить больше времени, чем выполнение CPUID для получения информации о производителе или версии. Такая процедура распознавания также сможет обнаруживать тех, кто использует смещение/масштабирование TSC.
Повторюсь, разработчикам нужно было бы принудительно включить привязку к вычислительному ядру для выполнения этой проверки на одном ядре, отключить прерывания и принудительно задать IRQL максимальное значение, чтобы гарантировать согласующиеся и надёжные данные. Было бы удивительно, если бы разработчики BattlEye решили реализовать это, потому что для этого требуется гораздо больше усилий. В драйвере ядра BattlEye ест две другие процедуры распознавания виртуальных машин, но это тема для другой статьи.
Удаление, установка, переустановка BattlEye вручную. Запуск игры.
Вопрос
-[SF]- DevastaTOR 448
Данный гайд посвящён установке и удалению Battleye, а также запуску игры без античита.
Решения проблем с падением FPS у пользователей W8 вы можете найти по ссылкам в конце гайда!
Установка:
1. Устанавливаем BE через установщик STEAM\SteamApps\common\arma 2 operation arrowhead\BEsetup\Setup_BattlEyeARMA2OA.exe;
2. Качаем с сайта BE три файла: раз, два, три (если ваша OC 32-bit, третий файл качать ЭТОТ) ВНИМАНИЕ! ВОЗМОЖНО ПАДЕНИЕ FPS У ПОЛЬЗОВАТЕЛЕЙ WINDOWS X64 БЕЗ СКАЧКИ BESERVICE.EXE ДЛЯ 32BIT СИСТЕМ! КАЧАЙТЕ ВСЕ 4 ФАЙЛА.
3. Кидаем 3 файла в папку STEAM\SteamApps\common\arma 2 operation arrowhead\Expansion\BattlEye с заменой;
4. Запускаем игру с BE (см. инструкцию ниже);
5. Смотрим в консольку. Консолька ошибок выдовать не должна. Установка может занять пару минут;
6. Заходим на сервер с BE. Игра может закрыться при заходе в игру, и открыться консоль для доустановки недостающих файлов, это нормально!
Не забывайте про защитник Windows и ваши антивирусы! Убедитесь, что права администратора прописаны для исполняемых файлов BattlEye и его установщиков!
Удаление:
1. Удаляем BE через программу STEAM\SteamApps\common\arma 2 operation arrowhead\Expansion\BattlEye\UnInstallBE.exe;
2. Чистим папку C:\Program Files (x86)\Common Files\BattlEye;
3. Чистим папку C:\Users\*username*\AppData\Local\ArmA 2 OA\BattlEye.
4. Желательна перезагрузка.
Проверить удаление BattlEye можно в диспетчере задач. BEservice должен отсутствовать во вкладке «службы». Если ничего не получилось, попытайтесь избавиться от BEservice другими способами (спасибо killer0K и KpacTu), например консольной командой sc delete BEService *** (для вызова консоли нажмите на рабочем столе кнопку «Пуск»+R и введите в открывшееся окно команду cmd ). Впрочем, у некоторых проблемы с BE решаются без убивания службы.
ВНИМАНИЕ! ИНСТРУКЦИИ ПО ЗАПУСКУ ПРИВЕДЕНЫ ДЛЯ ВАНИЛЬНОЙ АРМЫ!
Запуск игры без BE, при установленном античите:
Через стим
При запуске игры выбираем «Launch without BattlEye»;
Ручками:
Запускаем через экзешник STEAM\SteamApps\common\arma 2 operation arrowhead\Arma2OA.exe; *
Запуск игры С BE:
Через стим
Просто запускаем игру;
Ручками:
Запускаем через батник STEAM\SteamApps\common\arma 2 operation arrowhead\Arma2OA.bat
Without battleye anti cheat что это
1. Тыкаем на Arma 3 ПКМ (правая кнопка мыши) в самом низу находим «Свойства» нажимаем.
2. Переходим в «Локальные файлы»
3. Нажимаем «Просмотреть локальные файлы» и вот мы в папке с армой.
4. Находим папку «BattlEye» заходим в неё
5. Находим «Uninstall_BattlEye.bat» нажимаем
6. Вылезет такое вот, нажимаем да. Нечего не случится с ПК это лишь удалит быдло ай
7. Нажимаем «Install_BattlEye.bat»
После немного подождем и пытаемся запустить арму т.е вылезет небольшое окно нажимаем ОК, ибо это соглашение на то что быдло ай будет работать и т.д.
Если и тогда не работает арма.
1. Так же переходим в папку с армой и ищем файл «arma3battleye.exe» запускаем.
2. Видим такое вот окошко
Если у вас как на данном скрине написано «Windows Kernel modification detected. Please repair or reinstall your system.
Failed to launch game.»
Это значит то что у вас паленая винда поздравляю вы обладатель пиратской винды, и так что пишет быдло ай вам
«У вас обнаружено модифицированное ядро, Пожалуйста почините или переустановите вашу систему»
Если у вас другая ошибка то можете юзать инет (барузер) я лишь опишу самую частую проблему с быдло ай.
Переходим к устранению «Windows Kernel modification detected. Please repair or reinstall your system.»
1. Можно снести активатор к х*рам
Делаем так как написано ниже
DEL «%windir%\system32\drivers\oem-drv64.sys»
DEL «%windir%\system32\xNtKrnl.exe»
DEL «%windir%\system32\xOsLoad.exe»
DEL «%windir%\System32\ru-RU\xOsLoad.exe.mui»
DEL «%windir%\System32\en-US\xOsLoad.exe.mui»
%windir%\System32\BCDEDIT.exe /set
%windir%\System32\BCDEDIT.exe /deletevalue
%windir%\System32\BCDEDIT.exe /deletevalue
%windir%\System32\BCDEDIT.exe /deletevalue
REG DELETE HKLM\SYSTEM\CurrentControlSet\services\oem-drv64 /va /f
ЭТО СНОСИТ ВАШ АКТИВАТОР Я НЕ ДАЮ ГАРАНТИЙ ЧТО ВИНДА МОЖЕТ ПОТОМ РАБОТАТЬ НОРМАЛЬНО ТУТ 1 НА 100000000 И ВАША ВИНДА СТАНОВИТСЯ ПРОБНОЙ НА 30 ДНЕЙ ПОСЛЕ НУЖНО АКТИВИРОВАТЬ ЕЁ ЛИБО КЛЮЧОМ ЛИБО АКТИВАТОРОМ
2. Можно купить лицензию (но если твоя пиратская жадность не дает это сделать)
То ставим новый активатор дам два названия это «KMS» и «windows loader by daz»
3. Можно поставит чистую винду новую либо Windows 10 (как известно на 10 даже на пиратках вроде как нету этой проблемы но это не 100%)
4. Что бы наш активатор не слетел нужно удалить и скрыть обновление «KB971033»
1) Заходим в «Панель управления»
2) Находим «Центр обновления Windows»
3) Заходим в «Установленные обновления» (оно в самом низу) там ищем «KB971033» что бы было проще можно ввести в «Поиск»
4) Нажимаем по «KB971033» ПКМ (правая кнопка мыши) и нажимаем «Удалить»
5) Потом переходим обратно к «Центр обновления Windows» нажимаем «Поиск обновлений» после этого появится Доступные обновления, нажимаем «Важных обновлений: (их сколько там) доступно. Находим «KB971033» нажимаем ПКМ по «KB971033» и «Скрыть обновления»
И да по желанию можно отключить обновления вообще
1) Заходим в «Настройка параметров» там будет под «Важные обновления» выбираем из 4 перечисленных вариантов «Не проверять наличие обновлений»
2) Отключаем все галки чуть ниже.
3) Нажимаем ОК
P.S Это на ваше усмотрение от того что винда будет обновляться с активатором не должно ни чего случиться именно «KB971033» это проблема из за чего может слететь активатор
P.S.S Сорян что нету скринов просто стим не хочет их загружать /:
Там вы уже должны разобраться мои юные пираты 😉
Я опишу только основу.
И так разрабы шиндовс и быдло ай решили совместно бороться с пиратством таким вот образом (да это жестка)
Вроде как с 29 июня, я честно не знаю на*ера вот таким вот образом но как мы видим это работает и не в пользу нас обычных пиратов. это пи*дец как обидно..
Вообщем как это работает и в чем проблема быдло ай (античит) работает по такой схеме что если он находит измененные файлы шиндовс т.е тот же активатор тобиш «модифицированное ядро» а из за чего это же спросишь ты меня, это из за того что ху*вый активатор сделанный дядей петей под градусом изменяет это самое «ядро» и делает ваш шиндовс пиратской т.е это «НЕ ЛЕГАЛЬНО» так думают разрабы шиндовс, но мы не ищем легких путей)
Ну и вообще когда быдло ай находит так сказать «модифицированное ядро» он попросту не запускает либо запускается и сразу же вырубается. К примеру у меня, в самом лаунчере запускается все нормально как и должно быть, но на сервера с быдло ай не пускает и пишет вот так вот.
Это значит что быдло ай не работает т.е не запущен, вообще он должен запускаться с игрой и висеть в диспетчере и работать по закрытию игры.
Вы даже можете посмотреть это в диспетчере, должен быть процесс «BEService.exe» если его нет, то как не странно он не работает.
Я вас не заставляю удалять ваш активатор, я лишь даю решение данной проблемы просто ибо нету другого решения. Можете конечно посидеть позалипать во что-то другое и мб выйдет фикс или какие либо ребята умельцы рукадельцы найдут другое более оптимальное для вас решение данной проблемы.
И да это решение так же действует на другие игры с быдло ай