Как и многие пользователи NVIDIA GeForce NOW, я жду пока там добавят те игры, в которые действительно хотелось бы поиграть. Но бывало и наоборот, игры которые уже были добавлены, позже внезапно удаляли из GFN сервиса. В моем случае я хотел там пройти игры Mafia, и потом их все убрали.
Спустя время, их так и не вернули. И я решил попытаться разблокировать запретные игры NVIDIA GeForce NOW сервиса. Но нашел там то, что никак не ожидал увидеть.
Предыстория
Пол года назад, NVIDIA GeForce NOW сервис работал по другому. Можно было запустить Steam и дальше выбирать игру для запуска вручную. Множество игр не запускались и в ответ было сообщение, что игра официально не поддерживается. Тогда я методом тыка выяснил, что есть игры которые все же работают. Например Gas Guzzlers Extreme, но в списке официально поддерживаемых GFN их не было. Мне стало интересно достать полный список игр, чтобы можно выбирать из всех доступных. В результате поисков я выяснил, что старые версии GFN клиента скачивали из их серверов файл whitelist.json, в котором было несколько тысяч игр. К сожалению, так как старые клиенты больше не поддерживаются, я не смог выяснить как достать такой актуальный файл.
Спустя какое-то время, четыре месяца назад, я решил продолжить поиски, изучить клиентское приложение. Предположил что раз раньше клиентское приложение загружало файл whitelist.json, может и сейчас оно умеет загружать полный список игр. На это ушло больше времени чем хотелось бы, но я изложу все в упрощенном виде.
Исследования
Установив NVIDIA GeForce NOW я запустил его и подождал, когда загрузятся все данные. Потом начал изучать кэш и лог файлы. Самый интересный файл оказался console.log
![console.log console.log](https://habrastorage.org/getpro/habr/upload_files/2db/f0b/b1f/2dbf0bb1f490492120de788f0270744e.png)
В логи попала конфигурация приложения, которая используется для запросов к серверу. Вот самая интересная строчка:
![https://games.geforce.com/graphql https://games.geforce.com/graphql](https://habrastorage.org/getpro/habr/upload_files/9cf/6d2/6c0/9cf6d26c041118bede9ee7afbbe35f83.png)
Это ссылка на ключевой URL для запросов приложения https://games.geforce.com/graphql. Перейдя по которой открывается красивый GraphQL редактор.
![GraphQL редактор GraphQL редактор](https://habrastorage.org/getpro/habr/upload_files/9da/bbe/1e8/9dabbe1e8f88421e8db2c0cf6b36d497.png)
Это интерфейс для тестирования GraphQL запросов. Тут я начал экспериментировать с кодом и вводить разные структуры. Но все оказалось намного проще, чем я ожидал. Нажав Ctrl+Space я получил диалог для интеллектуального заполнения кода.
![Intelligent code completion Intelligent code completion](https://habrastorage.org/getpro/habr/upload_files/0f4/a68/1f1/0f4a681f1f4b0b030508eef3a5f857ff.png)
И началось самое интересное, подбор параметров чтобы получить результаты запросов. Спустя некоторое время я подобрал конфигурацию, по которой удалось получить валидный ответ.
![](https://habrastorage.org/getpro/habr/upload_files/f45/fcb/4a0/f45fcb4a04632fa8ac4962d5866faac6.png)
Как видим в ответ пришло 1200 результатов. С помощью подсказок я подобрал конфигурацию, которая показывала все поля данных о играх.
![](https://habrastorage.org/getpro/habr/upload_files/9ae/a78/2ab/9aea782abbd4362e86985e3d4435804c.png)
Дальше я начал искать способ, как получить больше 1000 результатов. И я угадал с параметром After, который указывает на то, сколько надо пропустить результатов. Это значение является числом, закодированным в Base64.
![](https://habrastorage.org/getpro/habr/upload_files/a5f/f97/10d/a5ff9710d404de6a2208bedced1aa4b8.png)
Таким образом мне удалось вытащить полный список игр из GFN сервиса. На мое удивление там их оказалось больше чем 18 тыс. В результате мне стало интересно, а что будет если эти данные подставить в официальное приложение? И я начал разработку специального прокси сервера, который в этом поможет.
18K+ игр в официальном приложении GeForce NOW
Спустя какое-то время я закончил работу над прокси сервером, и запустил его локально. Подключил и все сработало!
![18476 игр в GeForce NOW 18476 игр в GeForce NOW](https://habrastorage.org/getpro/habr/upload_files/455/a79/990/455a79990fd31456c24c5cdc2a0de8c0.png)
Сразу скажу, такое решение не позволяет запускать все игры, а только те, которые вы уже купили. Да и множество из них не работает. Но мне стало интересно изучать, в какие же игры возможно играют разработчики GFN, и я продолжил листать. Оказалось там есть не только игры а и множество приложений.
![807 приложений 807 приложений](https://habrastorage.org/getpro/habr/upload_files/3ec/06c/a07/3ec06ca0763d44f622f30c2368e53413.png)
Вероятно они используются разработчиками GFN в разных целях. Там я нашел все версии 3D Max, Maya, Adobe Photoshop, Microsoft Office и множество других. Так же там есть приложения для игровых платформ по отдельности.
![Client Platforms Client Platforms](https://habrastorage.org/getpro/habr/upload_files/db0/500/ff8/db0500ff8da6ec37b8cf07ef707b71a5.png)
Вероятно их используют для тестирования игр. Так же я нашел там игры, которые никогда не анонсировали в GeforceNOW, например Mafia: Definitive Edition.
![Mafia: Definitive Edition Mafia: Definitive Edition](https://habrastorage.org/getpro/habr/upload_files/f5b/3c4/b81/f5b3c4b819f01f305e6a164c4b5ac728.png)
Дальше я нашел игры, которых в принципе не должно быть в GeForce NOW. Например God of War.
![God of War God of War](https://habrastorage.org/getpro/habr/upload_files/238/4a1/a23/2384a1a2386990e39faafcd9f66cf047.png)
Эта игра является эксклюзивом PlayStation и вероятно не появится на других платформах в ближайшее время. Так а почему она здесь? И написано, что она находится в Steam Store, а там такой игры нет. Утечка о игре которая еще не вышла на Steam? Возможно, но то, что я дальше нашел, меня переубедило.
![Dolphin Emulator Dolphin Emulator](https://habrastorage.org/getpro/habr/upload_files/c0c/edb/9ad/c0cedb9add1fb6eb791eb48a328e1f63.png)
Да, это Dolphin Emulator, приложение созданное для запуска копий игр из других консолей. Зачем оно там? Nintendo говорит что легального способа копировать их игры нет. Даже те, которые вы лично купили и сдампили, тоже считаются нелегальными копиями - пруф. А может там есть эмуляторы и других платформ, и в God of War они играют через эмулятор? Я их не нашел, но возможно они уже в комплекте с каждой игрой. То что я нашел дальше, меня еще сильнее удивило.
![Super Mario Bros. Wii Super Mario Bros. Wii](https://habrastorage.org/getpro/habr/upload_files/afa/6f4/a4f/afa6f4a4f92ad3703e097886d5427acf.png)
Это информация о игре Super Mario Bros. для консоли Wii. И да, в нее можно играть с помощью Dolphin Emulator. Совпадение? Возможно :). Но если присмотреться, там еще есть надпись NVIDIA CONFIDENTIAL. Вероятно это означает, что Nvidia не хотят чтобы мы узнали об этом. Не хотят чтобы кто-либо узнал, что они играют в игры через эмуляторы на GFN серверах? Но не может же любой пользователь добавить свою игру в базу данных серверов GFN, да еще и с аккуратно подогнанным описанием и скриншотами? Я ответов не знаю, может вы найдете их в комментариях.
Послесловие
Я запустил этот прокси сервер и он доступен, в целях изучения, для всех. И инструкцию опубликовал тут http://gfn.uax.co.
Четыре месяца назад, до того как я сделал этот прокси, я пытался отправить информацию обо всем в NVIDIA, но мои сообщения и email проигнорировали. Я это посчитал признаком того, что им все равно и я могу опубликовать это в сеть. https://www.nvidia.com/en-us/geforce/forums/gfn-tech-support/46/452082/confidential
Ссылки
Я сохранил ссылки на все ресурсы, и на заполненные GraphQL скрипты. Вы можете сами изучить их данные.
Super Mario Bross. Wii + Dolphin Emulator (сохраненная копия на archive.org)
NVIDIA CONFIDENCIAL банер (сохраненная копия на archive.org)
UPD: мне пришел email от NVIDIA PSIRT в котором они сообщили, что "в списке вышедшие и/или спекулятивные игры. Они не подтверждают и не анонсируют будущие релизы". https://twitter.com/JulyIghor/status/1437925600946163714