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?

Проголосовало 672 человека. Воздержалось 160 человек.

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

Комментарии (35)


  1. AllexIn
    09.01.2016 18:03

    У меня ощущение, что «это» должно взламываться влет.
    Достаточно подкинуть стиму некоторую шаблонную информацию о системе вместо реальной и просто пиратскую копию поставлять вместе с шаблоном. То есть эмулировать окружение. И я не вижу ни одного способа противостоять этому со стороны стима.


    1. RESTORATiON
      09.01.2016 18:23
      +1

      Steam и правда пытается, изо всех сил. Valve выпускают все новые версии CEG, улучшают/оптимизируют защиту, но все тщетно, все равно происходит взлом игр за считанные часы, а иногда за минуты.


      1. AllexIn
        09.01.2016 18:36
        +1

        Кстати, я думаю, что CEG не стал общедоступным не потому, что Valve хочет на нем заработать, а потому что боится неконтролируемо раздавать SDK, т.к. полагают что это упростит взлом защищенных игр.


      1. NeoTheFox
        10.01.2016 03:45

        Это скоро может измениться, Just Cause 3 как первый звоночек.


        1. navion
          10.01.2016 10:21

          Это ерунда:
          lurkmore.to/SecuROM/DENUVO


  1. vit9696
    09.01.2016 21:35
    +3

    на персональный компьютер клиента загружается «голый», еще не подписанный исполняемый файл.

    У меня одного после прочтения этой строчки сложилось мнение о CEG как о каком-то убожестве, наносящем вред исключительно легальным пользователям?


    1. 6opoDuJIo
      10.01.2016 00:26
      +1

      Не одного. После прочтения строчек «сначала скачивается неподписанный бинарник» я сразу заподозрил лажу.


  1. cs0ip
    09.01.2016 21:38
    +1

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


    1. AllexIn
      09.01.2016 21:42
      +2

      — diff покажет куда смотреть.
      — будут воровать у обычных игроков exeшники и выкладывать их. страдать буду игроки.
      — совершенно не защищает от подхода: зарегал аккаунт, купил на него игру, выложил, аккаунт забанили, повторил с первого пункта

      Это все работает на сложных программных комплексах, которые стоят больших денег и продаются по контракту. С играми не прокатит.


      1. vit9696
        09.01.2016 21:53
        -2

        — хорошо он показывает для IDA и ей подобных продуктов =)
        — это решаемо;
        — достаточно сделать фейс-контроль при регистрации аккаунта с привязкой к персональным данным.


        1. AllexIn
          09.01.2016 22:02
          +5

          Ну да, и регистрацию по паспорту.
          и сказать досвидания клиентам. Которые радостно сбегут в origin, uplay, и теперь еще Epic Games Laumcher.
          Вы еще предложите продавать игры с хардварным ключом, чтобы уж наверняка. Это я так намекаю, что защита не будет успешной, если она делается в ущерб удобству пользователю. Стим стал крут, потому что был дружелюбен к пользователям. Даже дружелюбнее чем торренты. Пара неверных движений и стима не будет, а торренты останутся.


          1. SerDIDG
            10.01.2016 08:08
            -3

            В Южной Корее и Китае как-то же играют люди во всякие подделки nexon, предоставляя свой физический id. А читеров бы как поубавилось :)


      1. cs0ip
        09.01.2016 21:56

        — Вообще конечно да, имея два купленных экземпляра можно найти примитивно встроенный id. Но уже это отсекает некоторое количество тех, кто не хочет всё покупать в двух экземплярах. Но как мне кажется, есть способы встраивания id такие, что дифы будут показывать всегда на часть функционального кода, без которого собственно программа работать не будет.
        — Как раз от подхода с новым аккаунтом по идее может защищать, т.к. речь идет о постоянной потере денег и на эту потерю должна быть мотивация. Кроме того можно вести какой-нибудь черный список кредиток, а их уже сложнее менять.
        — А вот с воровством чужих бинарников действительно сложнее. Опять же, ломать кого-то только ради игры кажется странным. Хотя всякое бывает и не хотелось бы в один момент обнаружить, что тебя заблокировали ни за что.


        1. AllexIn
          09.01.2016 22:06

          1) То что внедряется в автоматическом режиме, также в автоматическом режиме и убирается.
          2) Стим кроме кредиток имеет еще несколько способов оплаты. Не говоря уж о том, что завести новую кредитку стоит 300 рублей.

          Вы так рассуждаете, как будто взлом игр и выкладывание их на торренты — это альтруизм. Это бизнес. И выгода от выложенный популярной игры(тем более эксклюзива) в разы перекрывает стоимость нескольких копий игры для анализа и заказ новой кредитки.


          1. cs0ip
            09.01.2016 22:14

            Вот если это бизнес, то мой способ точно не работает, т.к. потери ощутимы только для частного лица. Но в чем он может заключатся? Я вижу только внедрение каких-нибудь зловредов на клиентские компьютеры. Однако раздачи с популярными таблетками в таком не замечены. Поэтому мне не совсем понятно, что это может быть.


            1. AllexIn
              09.01.2016 22:22

              Банальное раскручивание трэкера, например. С продажей рекламы.


          1. Magnum72
            10.01.2016 14:10

            Есть виртуальные кредитки, они вообще 30 рублей в месяц стоят


        1. RESTORATiON
          09.01.2016 22:08

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


          1. cs0ip
            09.01.2016 22:11

            В подразумеваемом мной способе файлы у одного клиента получаются идентичными.


            1. RESTORATiON
              09.01.2016 22:17

              Я Вас понял, но с CEG такое не прокатит. Подобную вещь пробовал сделать около года назад, но увы — бинарники будут разными (при чем если сгенерировать несколько раз, очевидные различия будут в совершенно иных местах), даже если они сгенерированы с одного ПК и с того же аккаунта.


              1. cs0ip
                09.01.2016 22:25

                С CEG понятно, что не прокатит. Я тут просто отошел от темы поста и начал рассуждать о том, как можно было бы организовать альтернативную защиту.
                А про CEG, конечно же пишите ещё. Оно хоть пока и не решает свою задачу, но я до этого вообще не знал, что в valve подобная «защита» есть.


                1. RESTORATiON
                  09.01.2016 22:31

                  Есть конечно, еще с 2009 года, и одной из первых «ласточек», стала как раз игра, детище самой Valve — Left 4 Dead 2. Хотя тот, древний CEG, был ну очень примитивным. Сделав пару патчей в client.dll, можно было полностью отвязать его от сей защиты.


  1. icoz
    10.01.2016 01:41
    +3

    Можно поподробнее про саму технологию? Что в какой момент чем подписывается? Каким ключом? Ключом стима или разработчика игры? Короче, про саму систему ничего не понял — опишите протокол взаимодействия.


    1. RESTORATiON
      10.01.2016 11:43

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


  1. nikitasius
    10.01.2016 05:11

    Отдал сразу 3 голоса!


  1. Mingun
    10.01.2016 11:27

    Что-то я не очень понял, в чем именно заключается «защита»? Если закачивается голый бинарник, что мешает его не подписывать? Для чего вообще эта подпись нужна, кем она проверяться-то будет? Судя по окончанию статьи, стим позволяет играть без подключения к инету (что означает, что даже если подпись и проверяется, то как минимум, это не обязательно делается на сервере).


    1. RESTORATiON
      10.01.2016 11:46

      Не подписанный файл работать не будет, так как в нем не будет жизненно важных участков кода, которые и содержатся в этой самой цифровой подписи.


      1. Mingun
        10.01.2016 16:39
        +2

        Что за бред. Подпись максимум будет данными, но никак не инструкциями (т.к. подпись фактически случайный набор байт и она не может быть преобразована в неслучайный набор инструкций). А если при добавлении подписи дописываются какие-то инструкции, то значит, бинарник не качается полностью.


    1. Haoose
      10.01.2016 14:09
      +1

      На примере Dirt Rally: в неподписанный EXE надо еще добавить 2-3 участка кода, который будет отличаться в зависимости от используемого процессора на компьютере, с которого вы хотите играть.


      1. Haoose
        10.01.2016 14:15
        +1

        А, нет, ошибся. Не подписанный отличается от обычного на несколько килобайт. То есть мало того что в нем не хватает некоторого кода, так еще и некоторые его уастки зависят от процессора и EXE просто не будет работать на другом компьютере.


  1. dordzhiev
    10.01.2016 12:44

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

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


    1. RESTORATiON
      10.01.2016 13:36

      Вникните в статью, ведь я написал, что информация о железе в данном случае будет храниться в исполняемом файле и только. ClientRegistry.blob к этому не имеет никакого отношения.


      1. dordzhiev
        10.01.2016 22:25

        Да, я в курсе, и поэтому и спрашиваю вас. Ладно, видимо придется переформулировать это в более простой форме.

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

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


        1. RESTORATiON
          10.01.2016 22:34

          Я видел своими глазами, что из себя представляет из себя Steam CEG SDK, по сему, я имею представление о том, как это работает. Вообще, я решил сделать эту статью для базового понимания, что же такое CEG, так как в интернете, вы вряд ли найдете много информации по этой теме. Естественно, если описывать процесс еще более детальным образом, на это уйдет намного больше времени и статей. И насчет привязки к аккаунту, это чушь, привязка идет к железу, папкам и файлам.


  1. Finesse
    11.01.2016 03:21

    Как цифровая подпись мешает запускать исполняемый файл?