Что значит пропатчить игру в стиме. Визуально добавляем игру в стим, для игры в пиратку или с другом

Если вы заходили на главную страничку Steam ночью воскресенья, возможно, вы заметили довольно интересное новое предложение: «Watch paint dry». Это вызвало множество разногласий (а я успел повеселиться на форуме) в Steam, поскольку люди утверждали, что Valve/Steam полностью потеряли контроль над качеством игр в Greenlight, хотя эта игра никогда даже и не проходила Greenlight.

Я даже не платил $100 за Steam Greenlight Submission Fee , для того чтобы сократить себе время загрузки дистрибутива на сервер. Лично я считаю, что Greenlight - это прекрасная платформа, для того чтобы люди выставляли свои игры, и благодаря ей работа инди-разработчика уже стала и продолжит оставаться успешной профессией.

Я хотел бы заранее извиниться, если я чем-то оскорбил инди-разработчиков, которые испытывают какие-либо затруднения по публикации своих игр в Steam. Все это - не более чем проделка, совершенная ради теста, для того чтобы проверить то, что я пытался донести до Valve последние несколько месяцев - о возможности загрузить в Steam любую игру без возможности проверки сотрудниками Valve.

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

Получение аккаунта SteamWorks

Это начинает становиться техническим гайдом, но получение доступа к SteamWorks стало для меня началом исследования этой проблемы. Я не могу комментировать как/почему я получил доступ к SteamWorks, но я подтвержу, что у меня не было никаких лазеек ни при оформлении документов в интернете, ни в Greenlight, ни в самой Valve. Несмотря на то, что она больше не работает, я не собираюсь оглашать какие-либо детали, того, как это было сделано, поэтому не просите меня об этом. У меня есть на то причины.


Как бы то ни было, я получил доступ в SteamWorks (внутренняя платформа Valve для публикации в Steam, основа для создания достижений, DRM, мультиплеера и т.д.) и это подало мне идею поискать слабые места платформы. Я попробовал связаться насчет них с Valve, но не получил ответа. В конце концов, ближе к апрелю я решил использовать «безымянное приложение» в качестве первоапрельской шутки, дабы привлечь внимание Valve к этим проблемам.

«Я не буду рассказывать о том, как я создал симулятор сохнущей краски с геймплеем на 45 секунд в RPG Maker, поскольку я не слишком им доволен, да и вообще это неважно.»

Получение подтверждения коллекционных карточек Steam

Разве такая игра как «Симулятор сохнущей краски» обойдется без коллекционных карточек Steam?

За 10 минут Photoshop’а я создал веселья ради базовый шуточный набор. Однако Valve должны оценить карточки, смайлики и рубашки, перед тем как я выпущу их. Но оценили ли они?

С первого взгляда можно увидеть, что у статуса релиза есть несколько изначальных опций:


Интересно, что насчет источника этой формы:


Занимательно, что они отслеживают одновременно мою сессию и ID аккаунта редактора. Давайте попробуем изменить эти данные на данные работника Valve (т.е. 1). Например, изменить value в select на что-то несуществующее и посмотрим как это повлияет на форму.


Еще интереснее… Новая опция «Последний редактор» это кто-то из Valve. А что будет, если мы заново сохраним форму со статусом «Released»?


В итоге, когда я ввел неправильный запрос, он вернулся с целым списком опций и их значений. В данном случае я увидел, что статус «Released» имеет значение 5. Обновление формы вернуло мой «editor_accountid» назад, а изменение значения в выбранном окне “Ready for Review” с 3 на 5, сохранило все это на сервер, словно бы мои коллекционные карточки подтвердили. Сервер не делает проверку, если кто-то из Valve утвердил карточки и ставит статус «Released». А теперь перейдем к загрузке самой игры.

Процесс утверждения Valve

Небольшой инсайд для вас: Прежде чем Valve загружает что-либо в Steam, оно подвергается трехступенчатому процессу выпуска. Во-первых, вы должны поставить свою страничку в магазине в очередь для оценки, затем предоставить финальный или почти финальный билд вашей игры, и только потом вы сможете выпустить ее.

Главное событие: выпуск игры

Сайт Steamworks написан в основном на AJAX. Весь код функций Javascript, на котором базируется источник, весьма запутан, но доступен для чтения кому угодно (зарегистрированному в Steamworks). В коде много интересно, но так как эта игра была скорее доказательством идеи, я придерживался того, что было важно и нашел интересную функцию Javascript «ReleaseGame(appid, data) ». Похоже, что это создало типичный запрос в AJAX (хотя в нем не было никакой аутенфикации) к Steam и, как там говориться, приложение было выпущено.


Я попытался вызвать ReleaseGame со значением 445730 (мой appid) , не заполнив данные и получил ошибку 403 (доступ заблокирован). Интересно. Я просмотрел несколько других функций в файле и заметил, что большинство из них добавляли значения в JSON-запрос, названный “sessionid” с тем Session ID, который мы видели ранее, когда выпускали наши коллекционные карточки.


Итак, вызываем ReleaseGame(445730, { ‘sessionid’: ‘my_session_id’)


Переходим на страницу магазина Steam:


Тадам! Должен признать, что появление игры в разделе новых релизов было недосмотром с моей стороны. Изначально я хотел, чтобы она «выходила первого апреля» и не появлялась в Steam до пятницы. Хотя я и не ожидал, что она так долго продержится. Также признаю, что мне очень хотелось посмотреть, насколько далеко я могу зайти в процессе релиза игры. Но я думаю, то, что она не появилась в продаже - это к лучшему.

Позже я связался с Valve, которые исправили все вышеописанное.

Чему я действительно научился, так это тому, что когда работаешь с создаваемым юзерами контентом, который должен получить одобрение, не стоит выставлять в качестве значений для этого контента только «Review Ready» и «Reviewed». Вместо этого попробуйте подойти к этому иначе, создайте «билеты для рецензирования» каждого элемента контента или что-то в этом роде. Или просто не давайте пользователям возможности отправлять предмет в релиз.

НУЖЕН ДРУГ ИЛИ 2 АККАУНТ ДЛЯ ЭТОЙ ПРОГРАММЫ!!!
Cразу говорю, дочитайте сначала и только потом все повторяйте, чтоб не было вопросов!
Короче говоря, эта программа что-то подобное AppID_patch. Однако, как уже известно, ее фиксанули и больше нельзя добавить себе игры. Эта программа делает что-то подобное.
Представьте: у вас есть друг, и у него есть игра, к примеру, Garry"s mod. И вы захотели поиграть в нее с ним, но у вас ее нет, только пиратка. Программа SteamCrack для этого и служит, ну как я понял.

Что ж, как ей пользоваться?

  1. Мы скачали архив и разархивировали его куда хотели
  2. Запускаем от имени Админа SteamCrack.exe и тыкаем на все окошки «Yes»
  3. Новости закрываем, если предложит обновится, то так и делаем.
  4. В открывшемся окне мы тыкаем на три точки «packageinfo.vdf» и ищем его по пути /steam/appcache/
  5. Выбрали? Тогда нажимаем patch steam и нам выдает «Have you closed Steam?» вырубаем стим, и тыкаем «Yes»
  6. Он выдаст откуда скачать SteamPatched, качаете откуда вам будет удобно.
  7. Скачав SteamPatched.zip кидаете его в папку с этой программой(Саму программу можно не закрывать) и в программе еще раз нажимаете Patch Steam, он проверит файлы и если их будет не хватать тыкаем в открывшемся окне patch steam, ну и засейвтесь, на всякий.

И вот то самое!

Вот ссылка на видео об этой программе на английском, ну с текстом.

Это сам разработчик, а еще он из Франции вроде бы.

Об остальных функциях.

  1. В «Add games» есть кнопка «Manual Search» - нажав на нее открывается магазин стима и вы там тыкаете по игре если не наши ее в листе игр и нажимаете «add».
  2. Просто «Manual add» - нажав на него, нужно написать название игры и ее ID, после нажав «Add» и «Done!»
  3. «Remove from list» - удаляет игры, которые вы добавили.
  4. «Reset» - удаляет файл packageinfo.vdf, нет ваши игры не пропадут, удалятся только те игры, которые вы добавили через данную программу
  5. Посмотреть обновления вы можете во вкладке «SteamCrack».Там же новости
  6. Если при первом запуске вы выбрали не тот язык, поменять его можно по кнопке «Changer de launge»
  7. Полностью удалить ее можно во вкладке SteamCrack ---> Reset ---> All
  8. Так же можно добавлять доп.контент
ВАЖНО!!!
Если вы хотите несколько игр на аккаунт, то выбирайте сразу, иначе при следующем использовании программы все полученные ранее игры просто слетят с аккаунта!
Для программы нужно MSVC2015 x86 and x64.Его можно получить скачав Visual Studio по данной ссылке
Так же программу сюда из-за веса и кривых рук добавить не могу. Ее можно скачать от сюда . Заливал не я, а разработчик данной программы. Просто у него под видосом ссылка, которая у многих не работает. Пришлось юзать прокси, чтобы ее скачать.
Автор вроде говорил, что хочет возвратить AppID_Patch.Ждите.

Добрый час, %USERNAME% ! В моей предыдущей статье "Steam CEG от Valve и с чем его едят. Введение " было дано лишь абстрактное понимание и принципы работы технологии CEG. В этой статье будет по абсолютному минимуму теории и преобладающее большинство практики. Сегодня и сейчас мы рассмотрим, можно ли «отучить» от этой защиты заветный исполняемый файл.

Шаг I. Выбор «жертвы» и ее анализ
Наличие CEG, причем любой версии, можно легко обнаружить по наличию в заголовке файле секции .version и первых четырех байтов в ней же (78 56 34 12 ):

Заведомо зная эту информацию и немного порыскав в библиотеке Steam, мой выбор пал на HD переиздание легендарной Age of Mythology c приставкой "Extended Edition ". После успешного завершения загрузки, подождав пару секунд, пока CEG подпишет исполняемый файл, открываем его в нашем отладчике, в моем случае в x64dbg . Ах да, стоит отметить, что товарищ CEG использует некоторые средства анти-отладки, поэтому будем использовать плагин ScyllaHide со следующими настройками:

Итак, открыв исполняемый файл, видим что он не накрыт сторонними упаковщиками, поэтому можем смело переходить ко второму шагу.

Шаг II. Разбор полетов
Абсолютно в любой версии CEG существует одна функция, которая производит общий расчет нужных значений. Выглядит она следующим образом:

Зная это, ставим бряк либо на инструкции
mov eax, dword ptr ds:
,
либо на следующей:
mov dword ptr ds:,eax
:

Нажимаем "Run " (F9 ) и видим, что бряк сработал! «И что же это нам дало?» - спросите Вы, отвечаю: точное значение EAX в буфере. В этом можно убедиться, посмотрев в правую колонку напротив вкладки "CPU ":

Как видно из изображения, мы получили значение EDB88320 . Скопируем его в буфер обмена и пойдем дальше. Нажимаем "Step Over " (F8 ) два раза и оказываемся внутри одной из функций, используемой CEG. И вот на этом этапе стоит сказать пару слов о существующих видах таких функций. Собственно, всего их может быть три типа:

1 . Функции с константным значением (Constant ) - возвращают константное значение, которое всегда будет одинаковым. Патчатся как:
mov eax, <значение> ret
;
2 . Функции со случайным значением (Random ) - возвращают любое целое значение. Патчатся как:
mov eax, <значение> ret
(используются лишь на новейших версиях CEG );
3 . Защитные функции (Protect ) - являются указателем, которые ведут к истинной функции Патчатся как:
jmp <адрес>
.

Теперь давайте вернемся к нашей игре. Мы внутри желанной функции и у нас в буфере правильное значение. Теперь мы должны определить вид нашей функции. Прокрутив пару инструкций вниз, мы увидим, что используется инструкция
lea eax, dword ptr ds
:

И это может означать только одно - мы имеем дело с функцией, которая возвращает константное значение. Вообще, следует запомнить, что если в буфере EAX оказываются значения типа: EDB88320 , 60 , 11 , 5 , 3f и т.д., то сразу будет понятно, что функция, которая использует это значение - будет константной. Почему? Потому, что это «общеизвестные» константные значения CEG, они будут одинаковыми на любой версии CEG. Поэтому, двигаемся в самое начало функции и корректируем ее, меняя на
mov eax, EDB88320
ret
:

Итак, что же дальше? А дальше мы снова все повторяем (разумеется, имея все тот же бряк на функции, которая вычисляет значения) до тех пор, пока игра не запустится (Profit!), что означает, что мы прошли все проверки CEG. Все?! Ну давайте посмотрим. Сохраняем файл с проделанными патчами и пробуем запустить на другом ПК (на который уже заведомо была скачана игра). И тут… облом. Игра не хочет запускаться! Ах да, мы забыли про еще одну немаловажную деталь! Дело в том, что CEG, как говорилось в первой статье, использует так называемые файловые проверки. Снова открыв отладчик, мы сможем легко обнаружить эти проверки по наличию характерных функций замечательного WinAPI : GetFileInformationByHandle , CreateFileW , OpenFileById , StringFromGUID2 , RegOpenKeyExW , SystemFunction036 и lstrcmpiW . В нашей игре - присутствует только одна такая проверка, найти ее можно сразу вбив GetFileInformationByHandle в поиск "References ":

Идем в начало и ищем функцию, которая вызывает данную проверку (ПКМ -> Find references -> To Selected Address (es) , либо сочетанием клавиш CTRL+R ). Будет она выглядеть следующим образом:

Ну что же, давайте сделаем это! Хотя это можно сделать и более изощренным способом, но мы поступим проще, используя
mov eax, 1 ret


Сохраняем результат проделанной работы и тестируем второй раз и о Боги, игра запустилась на другом аккаунте Steam и на другом ПК!

Шаг III. Полная отвязка игры от Steam (Yarr! Edition)
Разумеется, после полученного удовольствия, захотелось больше экстрима. А что, если я хочу просто поиграть с другом по локалке без всякого там Steam как в бородатые времена? Ну не вопрос. Для этого я скачал отличный эмулятор Steam с частичной поддержкой оверлея (!) под названием SmartSteamEmu . Настроив его, я запустил игру без включенного Steam. И что же я вижу - создался файл *.STEAMSTART и игра повисла в процессах. Подумав около тридцати секунд, игра таки запустилась и работала исправно. Но почему? Мы же все вроде сделали, ведь так? Да, это так, но мы забыли об одном маленьком штрихе. Дело в том, что этот файл события создается, когда процесс Steam не запущен и по сути является последней микро-проверкой. Ну что же, открываем отладчик в третий раз и ищем все функции с CreateFileA . Не стесняясь, ставим бряки на все функции (в данном случае их всего две). При запуске игры бряк сработал:

STEAMSTART , мы видим Вас! Итак, для того, чтобы покончить с этим недоразумением, просто меняем верхний JE на JNZ или JMP:

Сохраняем патч, снова пробуем запустить игру без Steam скрестив пальцы. И вуаля - игра запустилась в считанные секунды! Мы сделали с тобой это, CEG , ты уж прости нас.

Собственно, вывод
Попавшийся CEG в игре Age of Mythology: Extended Edition был не сложным. В этой игре не было ни Protect , ни Random функций, лишь одни Constant , что значительно упростило задачу. Так же в этой игре не было минорных проверок, в виде старого доброго CRC или новейших проверок ID процессора либо серийного номера жесткого диска .
В будущем, надеюсь, я смогу осилить эти две новые проверки и написать новую статью, а пока - до скорых встреч!