Смотрим на высыхание краски: Как я залил игру в Steam Store безо всякого одобрения со стороны Valve
Планировал ли я попасться? Конечно!
Если вы посещали домашнюю страницу Steam в воскресенье вечером, вы могли заметить новую игру: «Смотрим на высыхание краски». Это событие послужило причиной оживлённых дискуссий на форуме, где пользователи обсуждали потерю компанией Valve контроля качества в сервисе Steam Greenlight. Однако эта игра никогда не попадала в Greenlight. Я даже не платил $100, чтобы публиковать там игры.
Мне кажется, что Greenlight – хорошая платформа для независимых разработчиков, рекламирующих свои игры, и хочу извиниться перед всеми разработчиками, кого я мог оскорбить. Это был всего лишь розыгрыш, а также проверка моей теории, которую я пытался донести до Valve в течение нескольких месяцев – возможность разместить в Steam любую игру так, чтобы Valve даже не увидела её. Все уязвимости уже исправлены, и данное руководство имеет лишь историческую ценность. К слову, игра не имеет отношения к протесту по поводу цензуры в кино.
Получаем учётную запись Steamworks
Моё небольшое расследование всей этой истории началось с получения доступа к Steamworks. Не буду рассказывать как и почему у меня появился доступ, но я не использовал никакие уязвимости ни форумов, ни Greenlight, и не общался ни с кем из Valve. Раскрывать эти детали я не буду, и не просите.
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры You've been invited to the Steamworks Developer Program
i@steam powered, com >
Trouble viewing this message7 Clck here
STEAM'
You've been invited to the Steamworks Developer Program
Your application 'untitled app' has been invited to be distributed via Steam. To continue, you will need to](http://img0.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989260.png)
Опущу описание создания 45-секундного симулятора высыхания краски в RPG Maker, поскольку тут и гордиться нечем, да и неважно это.
Получаем одобрение Steam Trading Cards
Естественно, что это была бы за игра без карточек Steam? Я понаделал в фотошопе карточек для шуточного набора. Но разве Valve не должна просматривать карточки, эмотиконы и фоны перед выпуском?
На странице у статуса есть несколько первоначальных вариантов:
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры Release State:
Ready for Review ▼
I Not ready
Ready for Review
Not ready due to edits
Change Notes:,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры](http://img1.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989261.png)
А что там в исходниках?
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры form id="communityitem_edit_form method= POST enctype= multipart/form-data <input type="hidden" name="sessionid" value <input type="hidden" name="MAX_FILE_SIZE" value=M8388608"> cinput type="hidden" name=,,action" value="edit">
<input type="hidden" name="item[class]" value="l">
<input](http://img0.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989262.png)
Интересно, что отслеживается как сессия, так и ID учётной записи редактора. Попробуем поменять ID на какой-нибудь такой, который может принадлежать сотруднику Valve (допустим, на 1), изменим значение селекта на несуществующее и посмотрим, не получим ли мы в ответ другую форму.
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры There were errors saving changes:
Last editor .!...... (f
Steam Trading Cards - Series informati
Edit the settings here to configure the state of your tra you've changed in the changeNotes field
About Review and Release
When you are ready for your trading cards to be revie for review of your](http://img1.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989263.png)
Занятно – подменный «последний редактор» действительно оказался сотрудником. А если мы снова сохраним эту форму со значением «Released»?
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры Changes saved.
Return to Item list
Last editor . (Ruby)
Steam Trading Cards - Series informati
Edit the settings here to configure the state of your tra you've changed in the changeNotes field
About Review and Release
When you are ready for your trading cards to be revie for review of your](http://img0.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989264.png)
Что же произошло? Когда я отправил неправильный запрос, сервер вернул мне полный список вариантов с их значениями. Я увидел, что у Released значение равно 5. Тогда я обновил форму, чтобы вернуть свой editor_accountid, и поменял значение селекта на 5. И сервер принял команду, будто она исходит от разработчика, карточки которого уже одобрили. Сервер не проверил – одобрены ли уже карточки кем-то из Valve, и просто поменял их статус.
Процесс одобрения в Valve
У компании есть трёхэтапный процесс размещения чего-либо в Steam. Во-первых, вы отправляете свою страницу магазина на осмотр, затем – финальный билд игры, а затем вам предоставляют возможность её зарелизить.
Релиз игры
Сайт Steamworks в основном использует AJAX. JS-код не обфусцирован и виден всем (кто авторизован в Steamworks). Я нашёл интересную функцию “ReleaseGame(appid, data)”. Судя по всему, она делала типичный AJAX-запрос и делала релиз игры.
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры function ReleaseGame|(appid, data^
{
jQuery.ajax({
dataType: "json",
url: 'https: //partner. steamgames. com/| type: 'POST', data: data,
success: function(data)
{,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры](http://img1.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989265.png)
Вызов функции ReleaseGame с параметрами 445730 (мой appid) и пустыми данными выдал мне статус 403. Просмотрев другие функции, я увидел, что почти все они добавляют значение в JSON-запрос под названием sessionid – этот id мы видели раньше, когда релизили наши карточки.
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры function Updatel {
rgChanges
// ensure session ID is present
if ( !( 'sessionid' in rgChanges ) ) {
rgChanges[ 'sessionid' ] = g_sessionID;
>
$D.ajax({
url: 'https://partner.steamgames.com/i cache: false, type: "POST”, data: rgChanges,
),geek,Прикольные гаджеты. Научный, инженерный и](http://img0.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989266.png)
Итого, вызываем ReleaseGame(445730, { ‘sessionid’: ‘my_session_id’):
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры Release date:
Mar 27, 2016 @ 12:56pm (?)
App Release State:
Released (?),geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры](http://img1.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989267.png)
Идём в магазин Steam
![geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры Featured items
Games
Software ▼
Hardware ~
Videos
ЛИ Games Sports Games Watch paint dry
Watch paint dry
IN LBRARV
Watch paint dry is already in your Steam library
For You -
Community Hub
watch paint dry: the game
A puzzle-sports game where you watch paint dry.
ser revie.- Positive](http://img0.reactor.cc/pics/post/geek-geek-%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8-Valve-Steam-2989268.png)
Иехууу! Признаюсь, я вообще-то хотел, чтобы игра появилась в разделе «выходит 1 апреля», и не показывалась на сайте до пятницы – а она появилась сразу в разделе новинок. И конечно я хотел узнать, как далеко по пути релиза игры можно зайти – но решил, что лучше ей не появляться в списке игр, доступных для покупки.
Я связался с Valve, которые уже исправили эту уязвимость.
Из всего этого я вынес, что при работе с пользовательским контентом не нужно делать два разных статуса «готова к обзору» и «одобрена». Вместо этого можно выдавать некий тикет, обозначающий, что игра на одобрении, и не менять статус на «одобрена», пока существует тикет. Или просто не разрешать пользователям менять статус на «одобрена».
¯\_(ツ)_/¯
Источник: https://habrahabr.ru/post/280644/
Подробнее
STEAM* STORE COMMUNITY RUBY ABOUT SUPPORT Featured Items Games ▼ Software ▼ Hardware ▼ Videos ▼ News All Games Sports Games Watch paint dry Watch paint dry watch paint dry: the game Following Not Interested I N LIBRARY Watch paint dry is already in your Steam library 2.0 hrs last two weeks / 2.2 hrs on record Install Steam Play Now £ Instal Steam 59 35 freddysmod ▼ £0.00 admin ▼ WISH LIST (28) For YOU ▼ Community Hub I watch paint dry: the game A puzzle-sports game where you watch paint dry. User reviews Positive 11 reviews) Release Date: 1 Apr, 2016 Popular user-defined tags for this product: Simulation Casual Singleplayer Tags you've applied to this product: + Add your own tags View Your Queue О
You've been invited to the Steamworks Developer Program i@steam powered, com > Trouble viewing this message7 Clck here STEAM' You've been invited to the Steamworks Developer Program Your application 'untitled app' has been invited to be distributed via Steam. To continue, you will need to complete the necessary digital paperwork to sign up as a new Steamworks Partner or to add this application to your existing Steamworks Partner account. Before you get started, you may want to check out this page of frequently asked questions https-/'partnersteamoames com.'documentation/welr-ome You'll be asked to provide some information on the company or individual that will be signing the agreements, the associated payment and tax information as applicable and then to sign the necessary Distribution Agreement
Release State: Ready for Review ▼ I Not ready Ready for Review Not ready due to edits Change Notes:
form id="communityitem_edit_form method= POST enctype= multipart/form-data <input type="hidden" name="sessionid" value <input type="hidden" name="MAX_FILE_SIZE" value=M8388608"> cinput type="hidden" name=,,action" value="edit"> <input type="hidden" name="item[class]" value="l"> <input type="hidden" name="item[type]" value="l"> <input type="hidden" name="iteгтl[editoг_accountid],, value="594^We > ▼ <div class=''subsection'’> ▼ div class newformrow <div class="formlabel">Release State:</div> ▼ <div class="formdata"> ►<select name="item[item_release_state]" id="item[item_release_state]" c
There were errors saving changes: Last editor .!...... (f Steam Trading Cards - Series informati Edit the settings here to configure the state of your tra you've changed in the changeNotes field About Review and Release When you are ready for your trading cards to be revie for review of your trading cards to be completed. Once return to this page to set your cards live. Release State: Released
Changes saved. Return to Item list Last editor . (Ruby) Steam Trading Cards - Series informati Edit the settings here to configure the state of your tra you've changed in the changeNotes field About Review and Release When you are ready for your trading cards to be revie for review of your trading cards to be completed. Once return to this page to set your cards live. Release State: Released
function ReleaseGame|(appid, data^ { jQuery.ajax({ dataType: "json", url: 'https: //partner. steamgames. com/| type: 'POST', data: data, success: function(data) {
function Updatel { rgChanges // ensure session ID is present if ( !( 'sessionid' in rgChanges ) ) { rgChanges[ 'sessionid' ] = g_sessionID; > $D.ajax({ url: 'https://partner.steamgames.com/i cache: false, type: "POST”, data: rgChanges, )
Release date: Mar 27, 2016 @ 12:56pm (?) App Release State: Released (?)
Featured items Games Software ▼ Hardware ~ Videos ЛИ Games Sports Games Watch paint dry Watch paint dry IN LBRARV Watch paint dry is already in your Steam library For You - Community Hub watch paint dry: the game A puzzle-sports game where you watch paint dry. ser revie.- Positive reviews) Release Date 1 Apr, 2016 Popular user-defined tags for this product Psychological Horror Merries Simulation Nudity + Tags you've applied to this product: + Add your own tags View Your Queue «=0
geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,geek новости,Valve,Steam,Стим,Игры
"Смотреть на то как краска сохнет - и то веселее" ну или как то так.
"