SafeSteamTools is a modern, beautifully designed GUI frontend for OpenSteamTool, a Windows DLL project built with CMake.
- Modern Interface: A sleek, dark-mode glassmorphism interface built with React, Vite, and Electron.
- Smart Auto-Fetcher: Instantly search the official Steam API by game name (no AppID hunting required!) to download required
.luaconfigurations and manifests. - Dedicated Online-Fixes Tab: Automatically apply third-party online fixes (like Goldberg emulator). Select a target game from a dropdown and drop the
.zipor.rararchive into the zone; the GUI parses your Steam library and handles the extraction silently. - Dynamic Library Management: View your active SafeSteamTools
.luapatches, see depot/manifest counts, and easily remove them in one click. - Auto-Patching: 1-click Auto-Patch button compiles the C++ backend DLLs using CMake and smoothly injects them into your Steam installation.
- Unpatching: 1-click Unpatch button cleanly removes the sideloaded hook DLLs from the Steam directory, restoring Steam to its original state.
- Unlock an unlimited number of unowned games.
- Unlock all DLCs for unowned games.
- Support auto load depot decryption keys from Lua config.
- Support auto manifest download via
steamrun/wudrmupstream APIs(default iswudrm), or a custom Lua endpoint (see Manifest via Lua). - Support downloading protected games or DLCs that require an access token.
- Support binding manifest to prevent specific games from being updated.
- Adding, modifying, deleting, or overwriting
.luafiles in any watched directory automatically triggers a reload. No restart, no offline/online toggle needed.
- Bypass Steam Family Sharing restrictions, allowing shared games to be played without limitations.
- For AppTicket and ETicket: in
HKEY_CURRENT_USER\Software\Valve\Steam\Apps\{AppId}, bothAppTicketandETicketareREG_BINARYvalues. - Use
setAppTicket(appid, "hex")andsetETicket(appid, "hex")in Lua config to write these values to the registry automatically. - SteamID priority: read
SteamIDasREG_SZ(numeric-only) first; if missing, parse fromAppTicket.
- Enable stats and achievements for unowned games.
- Uses
setStat(appid, "steamid")to configure which SteamID's achievement data to pull. - If no
setStatis configured for an app, falls back to the hardcoded default SteamID76561198028121353.
- Add
-onlinefixto the Steam launch parameters to enable 480-based online play in games that use lobby matchmaking. The current limitation is that only one such game can run at a time.To revert, simply remove -onlinefix from the launch parameters — online play returns to normal on the next launch.
We have successfully aligned all memory signatures and paths for Steam build 1781041600 to resolve:
- Startup Crash: Resolved three signature collisions inside
steamclient64.dll(CUtlMemoryGrow,MarkLicenseAsChanged, andBBuildAndAsyncSendFrame) which previously caused memory corruption and crash/hang on startup. - Dynamic Path Resolution: Replaced static working directory path resolution with dynamic DLL location discovery via
GetModuleFileNameA(fixing crashes when Steam is launched from other contexts/launchers). - Invisible Game Bug: Fixed size tracking of injected App IDs in Steam vector memory hooks so newly added games immediately appear in the Steam library instead of remaining invisible.
If you get any errors (e.g. steam build don't work, crashes, or library issues):
- GitHub Issues: Open a new issue directly on this fork's Issues Page. We have templates ready to help diagnose errors quickly.
- Direct Contact: You can also contact the maintainer directly via Discord:
rev2ret. - Log Files: When reporting a crash, please locate and attach your Steam patch log file located at:
C:\Program Files (x86)\Steam\opensteamtool\main.log.
- For games protected by Denuvo and SteamStub, find a safe timing to switch
GetSteamID(seesrc/Hook/Hooks_IPC.cpp#Handler_IClientUser_GetSteamIDTODO) so save files are not affected.(Suggestions welcome — when is the earliest point after game initialization that we can safely switch the SteamID without affecting save file binding?) - Steam Cloud synchronization support.(This is a huge project)
- Add Auto Denuvo Authorization Sharing for Legitimate Accounts.
- Download
SafeSteamTools.exefrom the Releases tab. - Run the application.
- Your Steam path will automatically be detected. Use the Auto-Patch button at the bottom to build and install the DLLs.
- Use the Fetch tab to search for games, download configurations, and apply patches instantly.
- Run
build.batfrom the project root to build the project. - Copy generated
dwmapi.dll,xinput1_4.dllandOpenSteamTool.dllto the Steam root directory. - Create Lua directory (for example
C:\steam\config\lua) and place Lua scripts there. The DLL will automatically load and execute them. - Lua example:
addappid(1361510) -- unlock game with appid 1361510
addappid(1361511, 0,"5954562e7f5260400040a818bc29b60b335bb690066ff767e20d145a3b6b4af0") -- unlock game with appid 1361511 depotKey is "5954562e7f5260400040a818bc29b60b335bb690066ff767e20d145a3b6b4af0"
addtoken(1361510,"2764735786934684318") -- add access token ("2764735786934684318