Тормоза, вылеты, зависания. За что ненавидят Denuvo

Тормоза, вылеты, зависания. За что ненавидят Denuvo?

За что ненавидят Denuvo?

Что за Denuvo?

Изначально Denuvo — технология защиты от взлома. Её применяют, чтобы хакеры не ломали игры и не выкладывали их на торренты. Теперь под этим именем работает и античит. Впервые о системе заговорили в 2014-м, когда китайская варез-команда целый месяц взламывала Dragon Age: Inquisition. Эта была почти сенсация, потому что антипиратские крепости обычно сдаются гораздо быстрее.

С тех пор издатели начали регулярно использовать Denuvo, надеясь поддержать релиз не взломанным хотя бы месяц. Иногда получается: к примеру, вышедшая год назад Anno 1800 до сих пор держит оборону. Почему тогда паблишеры не комплектуют этой защитой абсолютно все новинки? Есть один нюанс — Denuvo люто ненавидят игроки.

За что её не любят?

Список претензий к системе длинный. Главная проблема — пользователи уверяют, что Denuvo съедает порядка 10 fps, снижает производительность и приводит к зависаниям. Авторы антипиратки всё отрицают, к тому же прямое сравнение фреймрейта между защищённой версией и обычной в большинстве случаев не выявляет большой разницы. Но исключения бывают — например, создатель Tekken 7 напрямую обвинял защиту в том, что из-за неё тормозит ПК-релиз.

За что ненавидят Denuvo?

Самый известный скандал случился в декабре 2017-го, когда из-за проблем на серверах Denuvo геймеры не могли запустить честно купленные в Steam версии Batman: Arkham Knight, Middle-earth: Shadow of War и Mad Max. Наконец, Denuvo не любят пираты и сочувствующие: система регулярно обламывает посетителей торрент-трекеров.

Теперь, судя по всему, похожая репутация будет у античита. Владельцы DOOM Eternal жалуются, что Denuvo не только обрушила производительность боевика, но и конфликтует с антивирусами. В общем, опять сплошные сложности.

Но ведь надо бороться с пиратством и читерами?

Стоить понимать, что алгоритмы защиты никогда не были белыми и пушистыми. Кто хоть раз покупал игру, огороженную отечественным «Старфорсом», тот в цирке не смеётся. Denuvo по сравнению с разработками ранних нулевых — просто воплощение дружелюбия. Однако недовольных тоже можно понять: пользователь честно платит за блокбастер, а ответ рискует получить охапку проблем, которых нет в торрент-версии. Логично, что следующий раз он плюнет на все приличия и скачает пиратку. То же самое и с читами.

За что ненавидят Denuvo?

Бороться с нечестными игроками надо — но таким ли методом? Впрочем, не исключено, что нынешняя Denuvo — меньшее из зол, которое доступно издателям. В конце концов, никто не хочет терять свои деньги. Даже если это будет стоить лояльности некоторых пользователей.

А что думаете вы? Denuvo — необходимое зло, защищающее издателей от пиратства, а вас — от читеров? Или это лишняя переменная в отношениях между игроком и разработчиком, которая делает всё только хуже?

Хроники битвы при Denuvo. Как «непробиваемая» игровая защита EA Origin оказалась пробиваемой

Публикуется в память о Крисе Касперски и в поддержку Voksi.

Да, эту статью можно было написать и раньше, но в жизни много других важных вещей. Работа в лаборатории, перемещения, моя муза и ее красный Ford Focus II за окном. На его капоте мирно таял свежий снег, когда начинался 2019 год. Мне же в голову начали лезть мысли о корпорации Electronic Arts, магазине Origin, игрушках Unravel и Battlefield 4, реализации EA DRM, Denuvo, VMProtect, и… все завертелось.

Прямо здесь начинается первый секрет: для взлома Origin вовсе не обязательно копировать систему ответов-запросов «клиент-сервер» (чаще всего это около десяти уникальных ID сообщений)! Потребуется чуть-чуть пореверсить клиент и поближе познакомиться с таким термином, как EA handle (далее — EAH). Но обо всем по порядку.

За рекламирование всякой ерунды, непомерные требования к ресурсам и вытекающую отсюда слоупочность официальный пакет Origin не ругает только ленивый, но мы пойдем дальше и покажем его уязвимую суть. На момент написания статьи вышла версия 10.5.31, а разбирать мы будем клиент 9.10.1.7. Принципиальной разницы между ними нет — EAH и там и там одинаков.

Думаю, виной тому откровенная запутанность EAH: перегруженность критическими секциями и семафорами, а также фирменная рекурсия указателей на данные. В такой суматохе запросто можно забыть освободить выделенный блок памяти. Благо процедура уничтожения EAH срабатывает при выходе из игрушки (читай — вызове функции TerminateProcess ), что, по мнению буржуйских разработчиков, автоматом избавляет их от этой проблемы.

Вот теперь минутка лулзов, леди и джентльмены! Сказ о том, как Denuvo Software Solution навешивала anti-tamper уже на саму Origin SDK. Делали они это весьма неумело, так как не курили мануалов и не представляют, что именно требуется защитить от посягательства пиратов. Всю мякотку я вынес в отдельную часть статьи.

К сожалению, в отличие от SecuROM в код Denuvo Блаукович не вставлял анекдотов. Однако если следовать традиции, то здесь была бы уместна история про ковбоя, который на спор обмочил весь бар, но ни разу не попал в бутылку.

Вот что делает защита Origin SDK:

Зачем все это? Зачем ей все шелка, цветные облака… зачем?! У нас ведь есть EAH и целая функция инициализации Origin SDK, о которой Denuvo почему-то не знает.

Виталий Кличко устроился работать в Electronic Arts

Виталий Кличко устроился работать в Electronic Arts

Не отстают от Denuvo Software Solution и наши спортсмены-игроделы. Количество контекстов VMProtect достигло сорока для каноничной второй версии и десяти для третьей. Причем сначала они утрамбовали старую вторую, а сверху повесили третью для защиты целостности второй. Это примерно как если StarForce защищать при помощи SecuROM.

Признаться, в первый раз я несколько прифигел, когда автоматом накрыл все сорок контекстов VMP 2.x за один раз. Однако после проследования станции метро OEP (Original Entry Point), ближе к перегону загрузки kit-файлов игрушки Unravel (Unravel_dump_SCY_dump. exe) тулза Denuvo_Profiler собственной сборки начала сигнализировать о перезаписи патченных хендлов старого импорта каким-то сторонним кодом. For great justice — последние версии Denuvo так и защищали, что вывело новую породу гибридных протекторов.

Denuvo_Profiler: именно этими данными формируется Denuvo HWID для твоей машины, плюс расшифровка файла лицензии EA Origin и последующее извлечение секретной таблицы Denuvo

Denuvo_Profiler: именно этими данными формируется Denuvo HWID для твоей машины, плюс расшифровка файла лицензии EA Origin и последующее извлечение секретной таблицы Denuvo

EA DRM, OEP, dump

Первое, с чем придется столкнуться при взломе и отвязке игрушки от Origin, — это EA DRM. Опознать его легко по точке входа, которая катапультирует нас (jmp) в библиотеку Activation. dll или Activation64.dll — смотря какой разрядности винда. Вот как это выглядит у меня:

Исходники отреверсенных потрохов Origin SDK ищи на exelab. ru.

Лайфхак прост — сделать подмену библиотеки Activation(64).dll на свою с редиректом вызовов в оригинал. При подхвате управления выводим радостный MessageBox и ожидаем аттача. Прокачаться в этой теме можно в статье «Deleaker, не болей! Ломаем защиту в обход VMProtect и пишем proxy DLL».

EA Origin SDK: Give me the handle and I’ll crack this!

Общая стратегия взлома Origin SDK (который инклудится в игрушку) имеет два разных сценария в зависимости от того, что ты хочешь получить в итоге. Первый вариант сложный, очень палевный и приватный. Он требуется для сетевых игр и обеспечивает возможность играть на официальных серверах. Через цепочку OriginGetDefaultUser — OriginRequestAuthCode («имя сервера», ex: GOS-BlazeServer-BF4-PC ) нужно получить код авторизации, а затем постучать этим AuthCode на сервер. Короче, это тема для отдельной статьи.

Второй вариант гораздо проще. Он пригоден для прохождения одиночных кампаний на локальном компе и никак тебя не запалит в сети. Его мы и рассмотрим подробнее.

Для начала отыщем в коде игрушки процедуру инициализации Origin SDK. Она получает от Origin. exe (в доках он часто называется OriginCore) данные о версии сервера, пользователе и другую подобную инфу, необходимую для дальнейшего запуска игрушки. Если же во время инициализации произойдет ошибка, то процесс попросту завершится, что не входит в наши планы.

Самое главное — эта подпрограмма создает EAH, а всю присланную инфу OriginSDK сливает в эту структуру. Обнаружить код инициализации Origin SDK можно по следующим признакам:

К примеру, в последней на момент написания статьи версии Battlefield 4 (1.8.2.48475) вход в процедуру инициализации Origin SDK выглядел так:

В Unravel он выглядел так:

Во всех случаях бенефициантом является EAH, который при вызове этих процедур воплотится в куче (heap) как структура размером 968 байт ( mov ecx, 0x3C8 ).

Материализовавшись, EAH послужит тем Солсберийским шпилем, возле которого будет виться остальной OriginSDK. Нельзя пройти мимо сигнатурного обращения к ней — сначала OriginSDK интересуется: «А не ноль ли там?» Если нет, то только тогда тащит оттуда значение:

Внимание, фокус! Делаем заглушку на процедуре инициализации EAH ( mov eax, 1 & ret ), запускаем и видим, что логи отладчика заспамлены гневными сообщениями: «Origin Error: update fail The Origin SDK was not running». Это как раз происходит из-за того, что теперь EAH равен нулю и перестало выполняться ключевое условие — флаг готовности сетевого соединения в его дочерней структуре WSA_socket не взведен:

Кажется, у нас проблемы? Вовсе нет! Юмор в том, что это отнюдь не препятствие: после тщетных попыток связаться со своими из OriginCore хакнутая игрушка все равно соглашается запуститься. Занавес и выход на бис!

Продолжение доступно только участникам

Вариант 1. Присоединись к сообществу «Xakep. ru», чтобы читать все материалы на сайте

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

Источники:

https://4pda. to/2020/05/18/371462/

https://xakep. ru/2019/04/19/denuvo/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: