GameStick: First game installation since 6 years

The PlayJam GameStick was funded on Kickstarter in 2013, around the same time as the OUYA. It had the same fate as the OUYA as well: In 2016 the GameStick servers became unresponsive, and 2017 PlayJam announced the official death of the micro console.

After rescuing the OUYA by building a replacement server I needed a new hobby and bought a PlayJam GameStick.

Unlike the OUYA, the GameStick did not have a strong community that raced to backup everything when the server shutdown was announced, and that left me with .. not much. No GameStick game meta data, no game apks, no API documentation, and even the "gamestickers.net" forum had long been shut off in 2023.

What I had were two firmware update files, GameStick-Software-v2058.img and GameStick-Software-v2071.img.

So equipped with the venerable jadx-gui, mitmproxy and a lot of unix command line tools I began to look at the GameStick's core applications. Luckily the source code had not been obfuscated, which helped tremendously during reverse engineering.

OOBE

Update check

The first problem was the initial setup: After language selection, screen setup and WiFi connection the OOBE checked for firmware updates and failed. Without a proper response to the update request, it would not go any further and just hang.

mitmproxy told me that the GameStick made a HTTP POST request to http://update.gamestickservices.net/check.php, and by searching for that URL in the decompiled source code I found the place the response was parsed. I only had to write a text file that told the GameStick that no update was available:

{"available": false}

.. and the update check could be bypassed.

PlayJam GameStick OOBE Firmware Update Check

Registration

The last step in the initial setup was the registration: It told you to point your browser to the non-existing URL wwww.gamestick.tv/activate and follow the instructions. The GameStick would show a registration code that had to be entered in the browser, and in the end everything would be fine.

Some more debugging and guessing let me get around that by providing two files: A device information and a player profile file. Success!

PlayJam GameStick OOBE Registration

The GameStick user interface was open! I saw that I had a very early firmware 0.1.53 and updated it to the latest 0.9.2071. Unfortunately, the registration did not work anymore because the new firmware expected some different fields in the JSON server responses. After figuring that out, the GameStick UI stayed black.

Downgrading to 0.9.2058 and playing around with the JSON files finally brought the UI back.

Games?

In the GameStick Fans discord chat server @Toast gave me a copy of cache files that were stored on his GameStick, and from there I could extract the meta data of 31 games, and download the .apk of 11 games. Not the 180 that were once available, but a start.

It took another week of tinkering until I had the first game showing up on the "featured" screen. Details with video and screenshots worked, but it would not download.

The first game in the GameStick menu

Today, an evening later, I added a missing "version" property to the app's "download" object and the game installed. This is the first time in 6 years that a game had been downloaded and installed on a PlayJam GameStick.

Evac is downloading onto my GameStick Evac has been installed Evac help screen Evac gameplay

Next?

Now we need to get game data off a GameStick that was online in 2015 or later, so that all the games can be made available. Also, the rest of the API needs to be reverse engineered, documented and a proper community replacement server needs to be written. Fun times ahead!

Written by Christian Weiske.

Comments? Please send an e-mail.