Skip to content

OpenSteam001/OpenSteamTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenSteamTool

cpp CMake OnlyWindows

Ask DeepWiki

OpenSteamTool is a Windows DLL project built with CMake.

Feature

Core Unlocks

  • 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 / wudrm upstream APIs(default is wudrm), 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.

Hot Reload

  • Adding, modifying, deleting, or overwriting .lua files in any watched directory automatically triggers a reload. No restart, no offline/online toggle needed.

Family Sharing and Remote Play

  • Bypass Steam Family Sharing restrictions, allowing shared games to be played without limitations.

Compatible with games protected by Denuvo and SteamStub

  • For AppTicket and ETicket: in HKEY_CURRENT_USER\Software\Valve\Steam\Apps\{AppId}, both AppTicket and ETicket are REG_BINARY values.
  • Use setAppTicket(appid, "hex") and setETicket(appid, "hex") in Lua config to write these values to the registry automatically.
  • SteamID priority: read SteamID as REG_SZ (numeric-only) first; if missing, parse from AppTicket.

Stats and Achievements

  • Enable stats and achievements for unowned games.
  • Uses setStat(appid, "steamid") to configure which SteamID's achievement data to pull.
  • If no setStat is configured for an app, falls back to the hardcoded default SteamID 76561198028121353.

Online Fix

  • Add -onlinefix to 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.

Future

  • For games protected by Denuvo and SteamStub, find a safe timing to switch GetSteamID (see src/Hook/Hooks_IPC.cpp#Handler_IClientUser_GetSteamID TODO) 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.

Usage

  1. Run build.bat from the project root to build the project.
  2. Copy generated dwmapi.dll, xinput1_4.dll and OpenSteamTool.dll to the Steam root directory.
  3. Create Lua directory (for example C:\steam\config\lua) and place Lua scripts there. The DLL will automatically load and execute them.
  4. 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, size defaults to 0
setManifestid(1361511,"5656605350306673283", 12345678) -- same but with explicit size

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.).

Configuration (optional)

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 = []

Manifest via Lua

Two manifest code functions are supported:

fetch_manifest_code(gid)

Basic function that receives only the manifest GID.

fetch_manifest_code_ex(app_id, depot_id, gid) (recommended)

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 logging

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
package.log LOG_PACKAGE_* Package injection, FileWatcher events
onlinefix.log LOG_ONLINEFIX_* Online fix (480 AppId spoofing)

The log level is controlled by [log] level in opensteamtool.toml.

Build

Requirements

  • Windows 10/11
  • CMake 3.20+
  • Visual Studio 2022 with MSVC (x64 toolchain)

Quick build

build.bat

Output

  • 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

Disclaimer

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.

About

Open Source Steam Unlocker

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors