Как обойти battleye unturned

Обновлено: 01.05.2024

Если вы получили в какой-либо игре бан, и в дальнейшем вас банит даже без использования какого-либо чита, то есть возможность сделать запрос на удаление вашего "железа" из базы того или иного античита.

Как это сделать напишем чуть ниже, на примере двух самых популярных античитов на данный момент, Easy Anti-Cheat и BattlEye:

2. Далее следует выбрать ту игру , где вы получили бан, затем выбрать "Моя учетная запись заблокирована или заморожена", потом "Контакты", и наконец "На свободную тему".

3. Далее следует заполнить все предложенные поля (обязательно на английском языке):

- Обязательно привяжите ваш аккаунт где был получен бан;
- Укажите ваше имя;
- Укажите ваш электронный адрес, на который в последствии придет ответ;
- Напишите письмо с просьбой о снятии бана по HWID.

4. В поле со своим обращением следует написать письмо, в котором вы будете делать запрос на снятие бана по HWID, основным моментом при обращении будет то, что вы действуете в рамках закона, и свой запрос вы делаете опираясь на закон о GDPR, и ему EAC обязан подчиняться.

"Здравствуйте. Однажды я получил бан в *УКАЗАТЬ НУЖНУЮ ВАМ ИГРУ*, и теперь если я покупаю копию игры на абсолютно новый аккаунт, то спустя некоторое время я получаю бан, хотя никаких читов я не использую. Отсюда я могу сделать вывод о том, что моё "железо", находится в вашем черном списке. Продолжать играть я хочу, но эти баны всё усложняют, в связи с чем я прошу вас удалить моё "железо" из вашей базы. Закон о GDPR позволяет мне это сделать. Надеюсь на ваше понимание. Спасибо."

2. Далее следует заполнить все предложенные поля (обязательно на английском языке):

- Выберите причину обращения (например "other requests");
- Укажите ваше имя;
- Укажите ваш электронный адрес, на который в последствии придет ответ;
- Напишите письмо с просьбой о снятии бана по HWID (в обращении обязательно укажите ссылку на профиль).

4. В поле со своим обращением следует написать письмо, в котором вы будете делать запрос на снятие бана по HWID, основным моментом при обращении будет то, что вы действуете в рамках закона, и свой запрос вы делаете опираясь на закон о GDPR, и ему BE обязан подчиняться.

"Здравствуйте. Однажды я получил бан в *УКАЗАТЬ НУЖНУЮ ВАМ ИГРУ*, и теперь если я покупаю копию игры на абсолютно новый аккаунт, то спустя некоторое время я получаю бан, хотя никаких читов я не использую. Отсюда я могу сделать вывод о том, что моё "железо", находится в вашем черном списке. Продолжать играть я хочу, но эти баны всё усложняют, в связи с чем я прошу вас удалить моё "железо" из вашей базы. Закон о GDPR позволяет мне это сделать. Ссылка на мой заблокированный профиль *УКАЗАТЬ ССЫЛКУ НА ЗАБЛОКИРОВАННЫЙ ПРОФИЛЬ*. Надеюсь на ваше понимание. Спасибо."

5. Далее жмете "submit" и ждете ответа на указанный вами электронный адрес.

====================================

ДАННЫЕ МЕТОД НЕ ДАЁТ 100 ПРОЦЕНТНЫХ ГАРАНТИЙ, ИМЕЙТЕ ЭТО ВВИДУ .

Обход по стеку BattlEye

Взлом игр — постоянная игра в кошки-мышки, поэтому слухи о новых приёмах распространяются как пожар. В этой части мы рассмотрим новые эвристические техники, которые недавно добавил в свой арсенал крупный поставщик античитов BattlEye. Чаще всего эти техники называют обходом по стеку (stack walking). Обычно они реализуются обработкой функции и проходом по стеку, чтобы выяснить, кто же конкретно вызвал эту функцию. Зачем это нужно делать? Как и любая другая программа, хаки видеоигр имеют набор хорошо известных функций, которые они используют для получения информации от клавиатуры, вывода в консоль или вычисления определённых математических выражений. Кроме того, хаки видеоигр любят скрывать своё существование, будь то в памяти или на диске, чтобы античитерское ПО их не нашло. Но что забывают читерские программы, так это то, что регулярно вызывают функции из других библиотек, и это можно использовать для эвристического обнаружения неизвестных читов. Реализовав движок обхода по стеку для таких функций, как std::print , мы сможем найти эти читы, даже если они маскируются.

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 является перебор модулей, и с момента прошлого анализа в список был добавлен ещё один модуль:


Вероятно, это обнаружение определённых прокси-dll, так как здесь проверяется размер таблицы переадресации.

Чёрный список временных меток

В последнем анализе 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 и способы их обхода


Время идёт, античиты меняются, и для повышения эффективности продукта в них появляются и исчезают функции. Год назад я подготовил подробное описание шелл-кода BattlEye в своём блоге [перевод на Хабре], и эта часть статьи станет простым отражением изменений, внесённых в шелл-код.

Распознавание гипервизора в BattlEye

Игра в кошки-мышки в области взлома игр продолжает оставаться источником новаций в эксплойтах и борьбе с читами. Использование технологии виртуализации во взломе игр начало активно развиваться после появления таких простых в применении гипервизоров, как DdiMon Сатоси Танда и hvpp Петра Бенеша. Эти два проекта используются большинством платных читов андерграундной хакерской сцены благодаря низкому порогу вхождения и подробной документации. Эти релизы с большой вероятностью ускорили гонку вооружений в области гипервизоров, которая сейчас начинает проявляться в сообществе хакеров игр. Вот что об этой ситуации говорит администратор одного из крупнейших сообществ взлома игр под ником wlan:

С появлением готовых к использованию систем гипервизоров для взлома игр стало неизбежным то, что античиты наподобие BattlEye сосредоточатся на обобщённом распознавании виртуализации.

Широкое распространение гипервизоров объясняется недавними усовершенствованиями в античитах, которые оставили хакерам очень мало возможностей для модификации игр традиционными способами. Популярность гипервизоров можно объяснить простотой избегания античита, потому что виртуализация упрощает сокрытие информации при помощи таких механизмов, как syscall hooks и MMU virtualization.

Недавно в BattlEye было реализовано распознавание распространённых гипервизоров наподобие упомянутых выше платформ (DdiMon, hvpp) при помощи обнаружения на основе времени. Это распознавание пытается обнаружить нестандартные значения времени инструкции CPUID. CPUID — это относительно малозатратная на реальном оборудовании инструкция, обычно требующая всего двух сотен циклов, а в виртуальном окружении её выполнение может занимать в десять раз больше времени из-за лишних операций, вызываемых движком интроспекции. Движок интроспекции непохож на реальное оборудование, которое просто выполняет операцию ожидаемым образом, поскольку он на основании произвольного критерия отслеживает и условно изменяет данные, возвращаемые гостю.

Забавный факт: CPUID активно используется в этих процедурах временнОго распознавания, потому что это инструкция с безусловным выходом, а также инструкция с непривилегированной сериализацией. Это значит, что CPUID используется в качестве барьера и гарантирует, что инструкции до и после неё будут выполнены; тайминги при этом становятся независимыми от обычного переупорядочивания инструкций. Можно также использовать инструкции наподобие XSETBV, тоже выполняющих безусловный выход, но для обеспечения независимого тайминга для этого потребуется какая-нибудь барьерная инструкция, чтобы до или после неё не произошло никакого переупорядочивания, влияющего на надёжность таймингов.

Распознавание

Ниже представлена процедура распознавания из модуля BattlEye «BEClient2»; я выполнил её реверс-инжиниринг и воссоздал код на псевдо-C, а потом опубликовал его в twitter. Спустя день после моего твита разработчики BattlEye неожиданно изменили обфускацию BEClient2, видимо надеясь, что это помешает мне анализировать модуль. Предыдущая обфускация не менялась больше года, но изменилась на следующий день после моего твита о ней — впечатляющая скорость.


Как я говорил выше, это самая распространённая техника распознавания с использованием безусловно перехватываемых инструкций. Однако она уязвима перед подделкой времени, и об этом мы подробно расскажем в следующем разделе.

Обход распознавания

Обойти распознавание в этом случае легко, и описанная техника подделки времени эффективно побеждает этот способ распознавания. Если разработчики 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 печально известен тем, что использует очень примитивные методы обнаружения, и одним из них является чёрный список названий образов. С каждым годом список забаненных названий образов становится всё длиннее, а за последние 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 с диска и сравнить перемещённые разделы друг с другом; если есть какие-то расхождения, то что-то не так. Серьёзно, ребята, выполнять проверки целостности не так сложно.

Как обойти battleye unturned

Эта публикация удалена, так как она нарушает рекомендации по поведению и контенту в Steam. Её можете видеть только вы. Если вы уверены, что публикацию удалили по ошибке, свяжитесь со службой поддержки Steam.

Этот предмет несовместим с Unturned. Пожалуйста, прочитайте справочную статью, почему этот предмет может не работать в Unturned.

Этот предмет виден только вам, администраторам и тем, кто будет отмечен как создатель.

В результатах поиска этот предмет сможете видеть только вы, ваши друзья и администраторы.


Recently a new update was added to Unturned adding BattlEye. Some people may not like it on their server, so here is a simple way to disable it.

Заголовки окон

В предыдущем анализе при помощи названий окон помечались флагами различные поставщики читов, но с тех пор шелл-код перестал проверять эти заголовки окон. Список заголовков окон был полностью заменён на:

Как обойти battleye unturned



Unturned

Тема закрыта 19 ноя. 2016 в 12:23 i mean, i want that my private server doesn't require battleye, becaus its affect so much the fps of my friends 19 ноя. 2016 в 12:25 Type +insecure instead of +internetserver or +lanserver 19 ноя. 2016 в 12:34 BattlEye is not the problem of your friends experiencing FPS issues that would be the Unity Engine that is causing the problem 19 ноя. 2016 в 12:35

Open config.json in the server folder.

The option should be somewhere at the top of the file.

19 ноя. 2016 в 12:40

Open config.json in the server folder.

The option should be somewhere at the top of the file.

19 ноя. 2016 в 12:44 I have a feeling that FPS isn't why Zed wants to turn off BattlEye, but more likely to use something that BattlEye is meant to detect, as an anti-cheat program doesn't affect FPS in the slightest bit. 19 ноя. 2016 в 12:45

It does. It requires more of of your processor and that slows down your render rate as well as other things.

Im a computer engineer

19 ноя. 2016 в 16:58

open json file and in top lines u see

"battleye secure": true

change true to false to set it off

19 ноя. 2016 в 17:32

It does. It requires more of of your processor and that slows down your render rate as well as other things.

Im a computer engineer

Your not wrong, BE runs a low level scanner service that constantly monitors processes/memory and disk contents/access.
On a slower PC with mechanical drives this will most defiantly effect FPS.
Add to that contention with anti-virus, anti-mal and firewalls and your overhead goes up dramatically on the client side.

Truly its server hosts choice as to what level security they want to run on their servers.
As long as a control system exits to "keep em separated" its not a issue.
The hack vs legit argument is a mute point, so time some of you got off your high horses on that.

19 ноя. 2016 в 17:54 19 ноя. 2016 в 18:17 On some computers the FPS is barely, if at all, affected, but on some slower computers it can be really detrimental. 19 ноя. 2016 в 18:21

It does. It requires more of of your processor and that slows down your render rate as well as other things.

Im a computer engineer

Most, if not all modern processors will not have any issues running BattlEye, so the difference is insignifcant unless you're running a computer that's at least 10 years old. If you are, consider chunking it into a shredder and getting a new one, because that's ridiculously outdated.

I'm using a 4th generation i3, there's literally no difference for my computer, and 4th gen i3s came out at least 2 years ago.

19 ноя. 2016 в 18:40

It does. It requires more of of your processor and that slows down your render rate as well as other things.

Im a computer engineer

Most, if not all modern processors will not have any issues running BattlEye, so the difference is insignifcant unless you're running a computer that's at least 10 years old. If you are, consider chunking it into a shredder and getting a new one, because that's ridiculously outdated.

I'm using a 4th generation i3, there's literally no difference for my computer, and 4th gen i3s came out at least 2 years ago.
Actually the biggest BE problem comes from disk storage if you have 24tb of data on analog drives its wants to test all of that in background and that a large overhead.
200gb on ssd and its over in a flash.

19 ноя. 2016 в 21:10

Most, if not all modern processors will not have any issues running BattlEye, so the difference is insignifcant unless you're running a computer that's at least 10 years old. If you are, consider chunking it into a shredder and getting a new one, because that's ridiculously outdated.

I'm using a 4th generation i3, there's literally no difference for my computer, and 4th gen i3s came out at least 2 years ago.


Actually the biggest BE problem comes from disk storage if you have 24tb of data on analog drives its wants to test all of that in background and that a large overhead.
200gb on ssd and its over in a flash.
Most people have 500

750 GB hdd space at most, so that's not even relevant.

19 ноя. 2016 в 21:28
Actually the biggest BE problem comes from disk storage if you have 24tb of data on analog drives its wants to test all of that in background and that a large overhead.
200gb on ssd and its over in a flash.

750 GB hdd space at most, so that's not even relevant.
Relevant is the fact that there are issues using BE at this point I'm just pointing out some of the potential factors involved.

Проверка сети

Перебор таблицы TCP по-прежнему работает, но после того, как я выпустил предыдущий анализ, критикующий разработчиков за пометку флагами IP-адресов Cloudflare, они всё-таки убрали эту проверку. Античит всё равно сообщает о порте, который использует для соединения xera.ph, но разработчики добавили новую проверку, чтобы определять, есть ли у процесса с соединением активная защита (предположительно, это выполняется при помощи обработчика).


Благодарю IChooseYou и abstract

Читайте также: