Як я завантажив гру в Steam в обхід Valve. Steam CEG від Valve та з чим його їдять. Все складне - просто Отримання підтвердження колекційних карток Steam

Добрий час, %USERNAME%! У моїй попередній статті Steam CEG від Valve та з чим його їдять. Вступбуло дано лише абстрактне розуміння і принципи роботи технології CEG. У цій статті буде за абсолютним мінімумом теорії і переважна більшість практики.

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

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

Отже, відкривши файл, що виконується, бачимо що він не накритий сторонніми пакувальниками, тому можемо сміливо переходити до другого кроку.

Крок ІІ. Розбір польотів
Абсолютно в будь-якій версії 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 та на іншому ПК!

Крок ІІІ. Повна відв'язка гри від 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 процесораабо серійного номера жорсткого диска.
У майбутньому, сподіваюся, я зможу подужати ці дві нові перевірки та написати нову статтю, а поки що – до швидких зустрічей!

Звичайно, кожному геймеру хотілося б, щоб комп'ютерна гра, яку він набуває, була повністю завершена і готова до використання. Однак, на жаль, такого результату вдається досягти далеко не всім компаніям, які займаються розробкою. Природно, вони не залишають все так, як є - вони постійно займаються. У цьому їм допомагають спеціальні патчі, які потім користувачі можуть скачати абсолютно безкоштовно. У цій статті ви дізнаєтеся про патч: що це таке, які вони бувають та як їх використовувати. Зрозуміло, що з часом все змінюється, відповідно, форма подачі патчів також не залишається незмінною, але при цьому суть залишається однаковою. І вам обов'язково варто знати про те, що ж є патч.

Розробка гри

Багато геймерів, коли грають у черговий великий проект, навіть не замислюються про те, через що він пройшов, перш ніж потрапив до них у руки. Якщо ви хочете дізнатися про патч, що це таке, як його використовувати, і навіщо він потрібен, вам потрібно розуміти, як створюються комп'ютерні ігри. Звичайно, тут не буде описано весь процес, тому що він неймовірно довгий і багатосторонній. Більше того, більшість його не є життєво важливою для цього питання. Найнеобхідніше, що вам варто знати – це стадія тестування. Коли розробка гри закінчується, то вже готовий та грабельний проект вирушає на альфа-тестування. Тут професійні тестувальники перевіряють працездатність гри, вказують на недоліки та проблеми, які виправляються ще до виходу гри у світ. Після цього починається бета-тестування, яке може бути відкритим чи закритим. Тут уже геймери самі тестують гру і повідомляють розробникам про те, що з нею не так - залежно від типу тестування, проект надається у відкритому доступі, або певній групі людей дається можливість перевірити його. І після цього проводяться фінальні доопрацювання та виправлення – і проект виходить у продаж. Однак навіть така уважна і прискіплива багаторівнева перевірка не завжди здатна виявити всі мінуси, тому існує таке поняття як патч. Що таке? У цій статті ви дізнаєтеся все про патчі.

Отже, тепер ви уявляєте собі, як відбувається тестування гри, але чому ж потрібен патч? Що таке? Як можуть легко зрозуміти знавці англійської мови, патч - це "латка" для гри, невелика програма, яка встановлюється в гру та виправляє в ній певні моменти. На жаль, навіть найбільш багаторівнева перевірка може не виявити всі помилки, які містяться у грі – вони спливають лише після релізу. Саме тут і набирає чинності патч - розробники збирають інформацію про те, які помилки все ще присутні у грі, розробляють для них латку та надають її для вільного скачування. Таким чином, гравцям не доводиться платити повторно на версію без помилок - вони можуть "пропатчити" гру, що вже є. Проте якими бувають патчі? Адже трапляються найрізноманітніші варіанти.

Стандартний патч

Якщо ви знаєте, що для гри, яку ви маєте на руках, існують певні патчі, які варто встановити, вам потрібно розуміти, якими можуть бути ці латки. Найпростіший патч - це архів, що містить у собі необхідні файли, які ви можете скопіювати в папку з грою відповідно до інструкцій, що містяться в тому ж архіві. Однак далеко не завжди розробники змушують геймерів робити все самостійно – іноді ви можете скористатися спеціальною програмою-патчером. Вам потрібно лише запустити її, вибрати ту гру, яку вам потрібно пропатчити, після цього вибрати той патч, який ви хочете встановити – і все. Fifa-патчі найчастіше випускаються саме в такому вигляді, тому що ця серія є дуже популярною і існує вже досить давно, тому програма-патчер не змінюється з часом, і геймери можуть спокійно патчити будь-яку версію кожної гри серії.

Кумулятивні патчі

Окремо варто поговорити про кумулятивні патчі. Наприклад, вони дуже часто можуть зустрітися для гри "Сталкер" - патчі подібного роду містять у собі відразу кілька латок, які виходили у світ раніше. Таким чином, замість того, щоб качати кожен патч окремо і встановлювати їх по одному, ви можете скачати кумулятивний патч, який міститиме в собі всі зміни попередніх латок, що неймовірно зручно.

Як пропатчити гру?

У більшості випадків геймери користуються спеціальними платформами для ігор, такими як Стім. Там ви можете налаштувати свій клієнт таким чином, щоб усі оновлення, що виходять для гри, встановлювалися автоматично. Це дуже корисна функція, але, на жаль, далеко не всі ігри є у "Стимі", тому вам доведеться вивчати патч-панель. Як було зазначено раніше, розібратися з цим процесом можна дуже просто. Тут є тільки два варіанти: або ви качаєте архів і переносите файли з нього в папку з грою, або ж ви відкриваєте патч-панель і вказуєте тільки шлях до гри та до патчу, а програма все робить за вас.

Якщо ви заходили на головну сторінку 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 АККАУНТ ДЛЯ ЦЕЙ ПРОГРАМИ!!!
Відразу кажу, дочитайте спочатку і потім усе повторюйте, щоб не було питань!
Коротше кажучи, ця програма щось подібне до 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. Чекайте.