Preamble

Many years ago, the peripheral company Finalmouse released a game to promote its new magnesium mice “Starlight”. Although Aim Gods was quickly disfavored by many due to its flipped assets and poor graphics, a group of players formed who saw incredible competitive potential in the game. Just for the sake of my love for this game I will share someone who captured his first experiences playing it in a video. A few months after this video was released, the game had already disappeared; its servers were shut down, and the fanbase, as well as I myself, was left upset. In this series of blogposts I will explain how I went from knowing barely anything about C++, let alone reverse engineering, to reverse engineering Aim Gods and writing my own private servers.

First Steps in 2022

My yearning to play this game again grew stronger and stronger over time, with no chance of fading any time soon. Thankfully one of my good friends still had the game files buried deep on his drive. After launching the game and trying to login I quickly got greeted by ,to no surprise, an error message and quickly assumed that the servers are completely shut down. Which I later realized, I was too quick to assume. Since my experience in C++ was basically non existent at this point of time, I was scouting the Internet for any work already done on Aim Gods. This quickly proved to be a good decision since I found a cheat for Aim Gods, published on Unknowncheats. This was the first time I was confronted with C++, thankfully the friend that also gave me the game files shared the same enthusiasm for Aim Gods and had experience with C++. Thanks to him I picked up the basics quite quickly and started messing around with the game. While still being confused about a lot, I understood that Unreal Engines reflection system allows for some neat automatic SDK generation. Since the cheat already had a working SDK I did not bother generating a new one which turned out to be a mistake since the game shipped with both a shipping version and a development version which wasn’t stripped of important server functions and also had a pdb shipped with.

Not fully shut down?

I quickly hit a dead end messing with the games functions. So I went to take a look at why the login is failing. After installing Fiddler and inspecting the traffic I noticed that the endpoints are still up and that only their ssl certificate was expired. Thanks to fiddlers SSL decryption which works by replacing the certificate with their own root certificate (ig, im not too sure tbh?). I was able to login and see that all api endpoints are still up and that they used a mix of aws gamelift and fleet servers. The gamelift matchmaking system was still up, however no actual gameservers were available anymore. Now I had a concrete Project to work on, to somehow make the game behave as a server. In the end this approach worked out and how exactly I managed to do that will be explained in the next blogpost.