Переводчик
0,0
рейтинг
9 января в 17:00

Разработка → 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?

Проголосовало 685 человек. Воздержался 161 человек.

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

Алексей @RESTORATiON
карма
18,0
рейтинг 0,0
Переводчик
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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 вообще не вижу смысла тягать игры на флэшке. Да и на даче отдыхают, а не у компа просиживают.

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