OpenSteamTool is a Windows DLL project built with CMake.
- Unlock an unlimited number of unowned games.
- Unlock all DLCs for unowned games.
- Support auto load depot decryption keys from Lua config, no need to manually input them in
config.vdfanymore. - Support auto manifest download via
steamrun/wudrmupstream APIs, 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, it will be writen to
appinfo.vdfso if you don't want to bind anymore, just delete the corresponding entry inappinfo.vdfand delete this bind from Lua.
- 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.
- 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. - Steam Cloud synchronization support.(This is a huge project)
- Using the 480 AppID for network spoof.
- 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") for game with appid 1361510
-- No Longer Supported:
--pinApp(1361510) -- pin game with appid 1361510 to prevent it from being updated
setManifestid(1361511,"5656605350306673283") -- pin depotid:1361511 manifest_gid:5656605350306673283 ,manifest_size:0(we don't need to specify it)
setAppTicket(1361510,"0100000000000000...") -- write AppTicket (REG_BINARY) to HKCU\Software\Valve\Steam\Apps\1361510\AppTicket
setETicket(1361510,"0100000000000000...") -- write ETicket (REG_BINARY) to HKCU\Software\Valve\Steam\Apps\1361510\ETicket
setStat(1361510, "76561197960287930") -- use the specified SteamID's achievement data for appid 1361510
-- If not configured, default SteamID 76561198028121353 is used.All function names are case-insensitive. setAppTicket, setappticket, SetAppticket, SETAPPTICKET etc. are all equivalent. The same applies to every registered function (addAppId, AddToken, SETManifestid, etc.).
Rename opensteamtool.example.toml to opensteamtool.toml and place it in the Steam root directory (next to steam.exe).
If no config file is found, built-in defaults are used — no auto-creation.
[log]
# Debug build only. Level: trace, debug, info, warn, error
level = "info"
[manifest]
# Upstream API for depot manifest request codes. Options: "steamrun", "wudrm"
url = "steamrun"
# HTTP timeouts for manifest requests (milliseconds)
timeout_resolve_ms = 5000
timeout_connect_ms = 5000
timeout_send_ms = 10000
timeout_recv_ms = 10000
# Additional Lua config directories (optional).
# Files are loaded after the default <Steam>/config/lua folder.
# The default folder is always loaded last so user files take priority.
[lua]
paths = []Lua scripts can be reloaded without restarting Steam via the IPC pipe \\.\pipe\OpenSteamTool_Trigger:
- FullReload — clears all maps, reloads all lua paths, refreshes Package0, triggers Steam UI offline/online
- AppIdReload — clears specified appIds from maps, reloads all lua paths, refreshes Package0, triggers Steam UI offline/online
The file watcher also auto-triggers a FullReload when any .lua file in the watched directories changes.
Two manifest code functions are supported:
Basic function that receives only the manifest GID.
Extended function that receives app_id, depot_id, and gid. Allows constructing API endpoints that require app identification.
The C++ runtime provides two Lua helpers:
| Function | Signature | Returns |
|---|---|---|
http_get |
http_get(url [, headers]) |
body, status_code |
http_post |
http_post(url, body [, headers]) |
body, status_code |
headers is an optional table: {["Key"]="Value", ...}.
Debug builds write per-module log files under <Steam>/opensteamtool/:
| File | Source | Content |
|---|---|---|
main.log |
General | Init, config loading, Lua parsing,Utils |
ipc.log |
LOG_IPC_* |
IPC commands, InterfaceCall dispatch, spoofing |
netpacket.log |
LOG_NETPACKET_* |
Network packet send/recv, eMsg dispatch |
manifest.log |
LOG_MANIFEST_* |
Manifest download, fetch_manifest_code,manifest binding |
decryptionkey.log |
LOG_DECRYPTIONKEY_* |
Depot decryption key injection |
keyvalue.log |
LOG_KEYVALUE_* |
KeyValues patching (manifest binding) |
misc.log |
LOG_MISC_* |
Engine pointer capture, AppId hints |
winhttp.log |
LOG_WINHTTP_* |
HTTP requests |
achievement.log |
LOG_ACHIEVEMENT_* |
UserStats requests/responses, steamid spoofing |
pics.log |
LOG_PICS_* |
PICS access token injection |
The log level is controlled by [log] level in opensteamtool.toml.
- Windows 10/11
- CMake 3.20+
- Visual Studio 2022 with MSVC (x64 toolchain)
build.bat- Debug:
build/Debug/OpenSteamTool.dll,build/Debug/dwmapi.dll,build/Debug/xinput1_4.dll - Release:
build/Release/OpenSteamTool.dll,build/Release/dwmapi.dll,build/Release/xinput1_4.dll
This project is provided for research and educational purposes only. You are responsible for complying with local laws, platform terms of service, and software licenses.