Steam CEG от Valve и с чем его едят. Введение

    image

    Немного определений

    CEG (Custom Executable Generation, рус. Генерация Уникального Исполняемого Файла) — средство защиты от пиратства (как бы парадоксально это не звучало), разработанная великой и ужасной компанией Valve в 2009 году. Изначально планировалось, что новое средство защиты будет использоваться чуть ли не на каждой игре, выпущенной в Steam. Однако, пересмотрев свои приоритеты, компания Valve поняла, что если потенциальный разработчик захочет использовать такое 'счастье' в новоиспеченной игре, то желательно было бы платить и отнюдь не дешевую цену. Поэтому, исторически сложилось, что CEG используется лишь крупными компаниями, которые в состоянии себе это позволить.
    Сама суть этой защиты заключается в следующем: как только подходит к концу закачка игры из сервиса цифровой дистрибуции Steam, на персональный компьютер клиента загружается «голый», еще не подписанный исполняемый файл. Затем, на тот же клиентский компьютер, загружается цифровой сертификат и с помощью специальной библиотеки SteamServices.dll (загрузка которой, к слову, производится в TEMP) и специального ключа с AES шифрованием (данный ключ с идентификатором cegpublickey является уникальным на стороне серверов Valve, он создается при публикации игры в самом сервисе при помощи Steam CEG SDK, доступ к которому, к слову, имеет ограниченное количество лиц) подписывается выше упомянутый исполняемый файл.

    Собственно, быстрый смотр защиты

    «А какова же тогда практическая ценность такой 'защиты', если она только и делает, что просто подписывает исполняемый файл ?» — спросите Вы. И тут я отвечу — не все так просто как кажется на первый взгляд. Дело в том, что при нанесении цифровой подписи на файл, собирается информация о папках и файлах, которые присутствуют на клиентской системе, а так же некотором железе. В последствии, собранная информация, так же находит свое место в исполняемом файле. И эта информация будет действительно уникальной, так как учитываются следующие составляющие: временной штамп файлов и папок в стиле unix (дата создания, дата последнего изменения), уникальные ключи реестра (а так же проверка, установлен ли клиент Steam на ПК, посредством того же православного реестра), количество файлов в заданной директории, ID процессора, серийный номер жесткого диска. Следует отметить, что последние два — используются лишь в новейших версиях CEG (например, такие игры как: XCOM: Enemy Within, Grid Autosport, DiRT Rally).

    Подводные камни

    Итак, что же мы имеем — эдакую привязку 'уникального' исполняемого файла к железу и файлам клиентского ПК. Хорошо это или плохо? В общем и целом — хорошая идея и реализация. Минус в этом всем, если, допустим, Вы поехали на дачу к друзьям и прихватили с собой полный бэкап любимой игры с этим самым CEG, сбросив его на переносной носитель и надеясь, что сможете спокойно поиграть. Но тут случилось непредвиденное — у друга не работает Интернет! Зато на ноутбуке установлен Steam. Не беда, Вы делаете восстановление бэкапа вышей игры в оффлайновом режиме Steam, нажимаете кнопку «Играть», но ничего не происходит! А все потому, что железо и прочие составляющие, о которых писалось выше, не совпадают с железом Вашего друга. И без доступа в глобальную сеть, у Вас просто никак не получится запустить игру, так как по понятным причинам сгенерировать новый исполняемый файл невозможно. Или запустить исполняемый файл все таки возможно?
    В следующей части статьи пойдет речь о том, возможно ли полностью отучить от CEG исполняемый файл, имея под рукой отладчик.
    Интересно ли было Вам узнать о технологии CEG?

    Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 36
    • 0
      У меня ощущение, что «это» должно взламываться влет.
      Достаточно подкинуть стиму некоторую шаблонную информацию о системе вместо реальной и просто пиратскую копию поставлять вместе с шаблоном. То есть эмулировать окружение. И я не вижу ни одного способа противостоять этому со стороны стима.
      • +1
        Steam и правда пытается, изо всех сил. Valve выпускают все новые версии CEG, улучшают/оптимизируют защиту, но все тщетно, все равно происходит взлом игр за считанные часы, а иногда за минуты.
        • +1
          Кстати, я думаю, что CEG не стал общедоступным не потому, что Valve хочет на нем заработать, а потому что боится неконтролируемо раздавать SDK, т.к. полагают что это упростит взлом защищенных игр.
          • 0
            Это скоро может измениться, Just Cause 3 как первый звоночек.
      • +3
        на персональный компьютер клиента загружается «голый», еще не подписанный исполняемый файл.

        У меня одного после прочтения этой строчки сложилось мнение о CEG как о каком-то убожестве, наносящем вред исключительно легальным пользователям?
        • +1
          Не одного. После прочтения строчек «сначала скачивается неподписанный бинарник» я сразу заподозрил лажу.
        • +1
          На счет защиты в стиме, давно интересует вопрос, почему встраивают фактически неработающую защиту вместо такой схемы:
          1) В исполняемый файл на стороне сервера перед загрузкой встраиваем id клиента. Причем для каждой игры можно встраивать уникальный id и в уникальное место, чтобы было труднее вычислить, где его искать. Это не очень дорогая операция и сервера её потянут.
          2) Через некоторое время взломанную игру выкладывают в виде торрентов.
          3) Правообладатель качает игру и выясняет кто же её слил.
          4) Аккаунт слившего со всеми играми блокируется.
          На мой взгляд, со временем это сделает невозможным выкладку игр в самых популярных для этого местах, а в непопулярных по определению будет совсем немного народа. Плюс ко всему, если сравнивать с тем же гугл-плей, где можно купить левый аккаунт, чтобы на нем потом отработать потраченное, здесь с заработком сложнее и мотивации соответственно меньше.
          В общем, не то чтобы мне хотелось, чтобы такая схема начала работать, но мне очень интересно почему она уже не работает. Наверное о ней уже подумали и почему-то отказались?
          • +2
            — diff покажет куда смотреть.
            — будут воровать у обычных игроков exeшники и выкладывать их. страдать буду игроки.
            — совершенно не защищает от подхода: зарегал аккаунт, купил на него игру, выложил, аккаунт забанили, повторил с первого пункта

            Это все работает на сложных программных комплексах, которые стоят больших денег и продаются по контракту. С играми не прокатит.
            • –2
              — хорошо он показывает для IDA и ей подобных продуктов =)
              — это решаемо;
              — достаточно сделать фейс-контроль при регистрации аккаунта с привязкой к персональным данным.
              • +5
                Ну да, и регистрацию по паспорту.
                и сказать досвидания клиентам. Которые радостно сбегут в origin, uplay, и теперь еще Epic Games Laumcher.
                Вы еще предложите продавать игры с хардварным ключом, чтобы уж наверняка. Это я так намекаю, что защита не будет успешной, если она делается в ущерб удобству пользователю. Стим стал крут, потому что был дружелюбен к пользователям. Даже дружелюбнее чем торренты. Пара неверных движений и стима не будет, а торренты останутся.
                • –3
                  В Южной Корее и Китае как-то же играют люди во всякие подделки nexon, предоставляя свой физический id. А читеров бы как поубавилось :)
              • 0
                — Вообще конечно да, имея два купленных экземпляра можно найти примитивно встроенный id. Но уже это отсекает некоторое количество тех, кто не хочет всё покупать в двух экземплярах. Но как мне кажется, есть способы встраивания id такие, что дифы будут показывать всегда на часть функционального кода, без которого собственно программа работать не будет.
                — Как раз от подхода с новым аккаунтом по идее может защищать, т.к. речь идет о постоянной потере денег и на эту потерю должна быть мотивация. Кроме того можно вести какой-нибудь черный список кредиток, а их уже сложнее менять.
                — А вот с воровством чужих бинарников действительно сложнее. Опять же, ломать кого-то только ради игры кажется странным. Хотя всякое бывает и не хотелось бы в один момент обнаружить, что тебя заблокировали ни за что.
                • 0
                  1) То что внедряется в автоматическом режиме, также в автоматическом режиме и убирается.
                  2) Стим кроме кредиток имеет еще несколько способов оплаты. Не говоря уж о том, что завести новую кредитку стоит 300 рублей.

                  Вы так рассуждаете, как будто взлом игр и выкладывание их на торренты — это альтруизм. Это бизнес. И выгода от выложенный популярной игры(тем более эксклюзива) в разы перекрывает стоимость нескольких копий игры для анализа и заказ новой кредитки.
                  • 0
                    Вот если это бизнес, то мой способ точно не работает, т.к. потери ощутимы только для частного лица. Но в чем он может заключатся? Я вижу только внедрение каких-нибудь зловредов на клиентские компьютеры. Однако раздачи с популярными таблетками в таком не замечены. Поэтому мне не совсем понятно, что это может быть.
                    • 0
                      Банальное раскручивание трэкера, например. С продажей рекламы.
                    • 0
                      Есть виртуальные кредитки, они вообще 30 рублей в месяц стоят
                    • 0
                      Дело в том, что если даже удалить исполняемый файл с одной системы, посредством проверки кэша, сгенерируется новый исполняемый файл, который будет разительно отличаться, чуть менее, чем полностью. В следующей статье я покажу на примере простенькой игры, как в принципе можно обойти эту магию.
                      • 0
                        В подразумеваемом мной способе файлы у одного клиента получаются идентичными.
                        • 0
                          Я Вас понял, но с CEG такое не прокатит. Подобную вещь пробовал сделать около года назад, но увы — бинарники будут разными (при чем если сгенерировать несколько раз, очевидные различия будут в совершенно иных местах), даже если они сгенерированы с одного ПК и с того же аккаунта.
                          • 0
                            С CEG понятно, что не прокатит. Я тут просто отошел от темы поста и начал рассуждать о том, как можно было бы организовать альтернативную защиту.
                            А про CEG, конечно же пишите ещё. Оно хоть пока и не решает свою задачу, но я до этого вообще не знал, что в valve подобная «защита» есть.
                            • 0
                              Есть конечно, еще с 2009 года, и одной из первых «ласточек», стала как раз игра, детище самой Valve — Left 4 Dead 2. Хотя тот, древний CEG, был ну очень примитивным. Сделав пару патчей в client.dll, можно было полностью отвязать его от сей защиты.
                • +3
                  Можно поподробнее про саму технологию? Что в какой момент чем подписывается? Каким ключом? Ключом стима или разработчика игры? Короче, про саму систему ничего не понял — опишите протокол взаимодействия.
                  • 0
                    Спасибо за замечание, немного дополнил в подзаголовке "Немного определений". Вообще более детально о том, как работает сама защита на примере игры, я хотел написать в следующей статье, т.к. данная статья была, по сути, лишь абстрактным введением.
                  • 0
                    Отдал сразу 3 голоса!
                    • 0
                      Что-то я не очень понял, в чем именно заключается «защита»? Если закачивается голый бинарник, что мешает его не подписывать? Для чего вообще эта подпись нужна, кем она проверяться-то будет? Судя по окончанию статьи, стим позволяет играть без подключения к инету (что означает, что даже если подпись и проверяется, то как минимум, это не обязательно делается на сервере).
                      • 0
                        Не подписанный файл работать не будет, так как в нем не будет жизненно важных участков кода, которые и содержатся в этой самой цифровой подписи.
                        • +2
                          Что за бред. Подпись максимум будет данными, но никак не инструкциями (т.к. подпись фактически случайный набор байт и она не может быть преобразована в неслучайный набор инструкций). А если при добавлении подписи дописываются какие-то инструкции, то значит, бинарник не качается полностью.
                        • +1
                          На примере Dirt Rally: в неподписанный EXE надо еще добавить 2-3 участка кода, который будет отличаться в зависимости от используемого процессора на компьютере, с которого вы хотите играть.
                          • +1
                            А, нет, ошибся. Не подписанный отличается от обычного на несколько килобайт. То есть мало того что в нем не хватает некоторого кода, так еще и некоторые его уастки зависят от процессора и EXE просто не будет работать на другом компьютере.
                        • 0
                          Вы поехали на дачу к друзьям и прихватили с собой полный бэкап любимой игры с этим самым CEG, сбросив его на переносной носитель и надеясь, что сможете спокойно поиграть. Но тут случилось непредвиденное — у друга не работает Интернет! Зато на ноутбуке установлен Steam. Не беда, Вы делаете восстановление бэкапа вышей игры в оффлайновом режиме Steam, нажимаете кнопку «Играть», но ничего не происходит! А все потому, что железо и прочие составляющие, о которых писалось выше, не совпадают с железом Вашего друга. И без доступа в глобальную сеть, у Вас просто никак не получится запустить игру, так как по понятным причинам сгенерировать новый исполняемый файл невозможно.

                          Как это связано с CEG? Информация о железе хранилась (до недавнего времени) в ClientRegistry.blob, при запуске стима в оффлайне она проверяется на соответствие текущей. Запустить игру в оффлайне на другом компьютере и так не получится.
                          • 0
                            Вникните в статью, ведь я написал, что информация о железе в данном случае будет храниться в исполняемом файле и только. ClientRegistry.blob к этому не имеет никакого отношения.
                            • 0
                              Да, я в курсе, и поэтому и спрашиваю вас. Ладно, видимо придется переформулировать это в более простой форме.

                              У стима и стимовских игр была привязка к железу еще задолго до появления CEG. Что представляет собой CEG: замена оригинальному способу привязки или дополнение к уже существующему, усложняющее реверсинг бинарника? Как вообще цифровая подпись может защитить бинарник от реверсинга?

                              Более того быстрый гуглеж показал, что CEG делает привязку к аккаунту, а не к железу. К тому же, в других источниках утверждается, что CEG при запуске игры каждый раз докачивает части бинарника из интернета. Кому верить? Что у вас, что в других источниках, никакой информации о CEG нет, а та что есть — очень противоречива.
                              • 0
                                Я видел своими глазами, что из себя представляет из себя Steam CEG SDK, по сему, я имею представление о том, как это работает. Вообще, я решил сделать эту статью для базового понимания, что же такое CEG, так как в интернете, вы вряд ли найдете много информации по этой теме. Естественно, если описывать процесс еще более детальным образом, на это уйдет намного больше времени и статей. И насчет привязки к аккаунту, это чушь, привязка идет к железу, папкам и файлам.
                          • 0
                            Как цифровая подпись мешает запускать исполняемый файл?
                            • –1
                              ИМХО проблема, описанная в статье (с бекапом и рестором) явно надумана. При наличии Steam Family Sharing вообще не вижу смысла тягать игры на флэшке. Да и на даче отдыхают, а не у компа просиживают.

                              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.