The problem
GRAV (BitMonster, 2015 — abandoned ~2016) refuses to launch with the message “App Expired — This app has expired. Please get the latest update from steam.” for owners with a perfectly valid license and intact files. This started happening for everyone around 2025.
The cause: the developer’s final build (buildid 1763174, January 2016, never updated) contains its own hard-coded expiry check — a kill-switch in the game itself. When your system date passes the embedded expiry, the game shows the dialog and quits. It ran fine for about nine years, then the clock ran out.
This guide gets it running again — tested on Linux with Proton (full sessions verified), and the same patch script works on Windows too. Windows users can alternatively use the RunAsDate method described in the Steam Community thread; this is the cleaner, permanent equivalent.
Fix part 1: patch the executable
The engine reads the calendar year through four wrapper functions, all using the same 6-byte instruction to extract it. The patch replaces each with a same-length instruction that pins the year to 2024, so the kill-switch never triggers. All other timekeeping (durations, timers, file times) remains real.
Save the script at the end of this post as
|
1 |
patch_grav.py |
, then with the game closed:
|
1 2 3 |
python3 patch_grav.py # apply the patch (backs up the original first) python3 patch_grav.py --status # check whether the exe is patched python3 patch_grav.py --undo # restore the original executable |
It’s pure Python 3 with no dependencies, auto-finds the executable on Linux and Windows (or pass the path as an argument), aborts without changes if the file doesn’t exactly match the expected final build, writes atomically, and verifies its own work.
Fix part 2: block the dead publisher domains
During loading the game contacts the long-dead publisher servers. Their domains now resolve to advertising-parking IPs, and the game can sit on the loading screen for many minutes waiting for responses that never come. Add these lines to
|
1 |
/etc/hosts |
(Linux) or
|
1 |
C:\Windows\System32\drivers\etc\hosts |
(Windows) so the connections fail instantly:
|
1 2 3 4 5 6 7 8 |
0.0.0.0 bitmonstergames.com :: bitmonstergames.com 0.0.0.0 nuoj.com :: nuoj.com 0.0.0.0 oc3ent.com :: oc3ent.com 0.0.0.0 gravgame.com :: gravgame.com |
(After editing the hosts file, flush your DNS cache or reboot so old lookups don’t linger.)
Fix part 3 (Linux): use a Proton 9-era build
Force a Proton 9 lineage compatibility tool for GRAV in Steam (for example GE-Proton9). Current Proton Experimental launches the game, but loading proved unreliable there. If the loading screen ever hard-hangs even with the hosts block in place, rename
|
1 |
compatdata/332500/pfx/drive_c/users/steamuser/Documents/My Games/BitMonster-GRAV |
inside your Steam folder and let the game recreate the profile on next start.
Caveats
- Never run “Verify integrity of game files” for GRAV — it silently restores the unpatched executable and the kill-switch returns. Re-run the script if that happens.
- Official multiplayer is gone with the servers; this fix is for single-player.
- Cosmetic side effect: in-game calendar dates and log timestamps show the year 2024.
- The script has only been validated against the final build (buildid 1763174), which is the only build anyone has — it refuses to touch anything else.
The script
Download: patch_grav.py on GitHub Gist — full source below: