SteamDaddy is an advanced C++20 user-space dynamic instrumentation engine for the Valve Steam client. Loaded via Windows PE sideloading (version.dll or dwmapi.dll), SteamDaddy intercepts Steam client IPC protocols, packet structures, and memory interfaces to deliver transparent DLC and game unlocking, automated depot manifest resolution with failover, donor ticket generation, offline Denuvo/SteamStub authorization, third-party CDKey resolution, and cloud save redirection.
Tip
Better Together with SteamDaddy (Main Ecosystem):
This repository contains the standalone, low-level C++ binaries (SteamDaddy.dll, version.dll, dwmapi.dll).
For the complete end-user experience—including an intuitive GUI, 1-click game unlocking, ContraryCDN API integration, auto-patching online fixes, achievement syncing, and native Millennium UI integration directly inside your Steam client—we strongly recommend using this core alongside the primary SteamDaddy platform maintained at:
👉 Contrary7/SteamDaddy-Backup — The ultimate SteamTools alternative & manifest manager.
- Zero-Limit App & DLC Unlocking: Register an unlimited number of games and DLCs via Lua scripts in
<Steam>/config/stplug-in/. - Depot Decryption Key Injection: Automatically resolves and supplies depot decryption keys on demand from Lua definitions.
- Multi-Upstream Manifest Engine with Automatic Failover:
Queries upstream APIs in priority order with sequential failover and a 60-second cooldown per failed upstream:
20770407(https://20770407.xyz/manifest/{depotId}/{gid}) — DefaultSDM(https://steamapi.993499094.xyz/manifest/{depotId}/{gid})manifestdex(https://manifest.manifestdex.com/{gid})wudrm(http://gmrc.wudrm.com/manifest/{gid})steamrun(https://manifest.steam.run/api/manifest/{gid})opensteamtool(https://manifest.opensteamtool.com/{gid})
- Custom Lua Manifest Endpoints: Define
fetch_manifest_code(gid)orfetch_manifest_code_ex(app_id, depot_id, gid)inconfig/stplug-in/manifest.luausing built-inhttp_getandhttp_postfunctions. - Manifest Pinning & Locking (
setManifestid): Pin specific depot manifest versions to prevent unwanted game updates and preserve offline Denuvo activations. - Ownership-Aware Manifest Locking (
lock_owned_games): When set tofalse(default), genuinely owned games receive official updates normally, while unowned games remain locked. - Background Auto-Sync on Update (
auto_sync_on_update): Automatically updates local.luaconfigurations and manifest cache mirrors in the background as soon as Steam finishes downloading an update. - Automatic Depot Cache Mirroring: Downloaded
.manifestfiles are automatically mirrored directly into<Steam>/depotcache/.
- Legacy CDKey Protocol Emulation: Intercepts
MsgClientGetLegacyGameKeypackets for external publisher launchers (Ubisoft Connect, EA, Rockstar). - Synthetic Fallback: When no key is defined with
setlegacycdkey(appid, "KEY"), SteamDaddy generates a deterministic synthetic key locally so Steam completes the client-side registration step without hanging.
- SteamStub Compatibility: AppID spoofing via local ConfigStore tickets exploiting a SteamDRMP off-by-four ticket parsing vulnerability—no game process injection required.
- Platform Credential Store Integration: Explicit
AppTicketandETickethex strings configured viasetAppTicket(appid, "hex")andsetETicket(appid, "hex")are stored inHKCU\Software\Valve\Steam\Apps\<AppId>\AppTicket. - Scheme 2 Multi-Stage Adaptive Leasing (
-dauth2/dauth2(appid)): Dynamically extends ticket lease windows for titles with strict timeout windows. - Helper Launch Options:
-dauth2: Enable Scheme 2 adaptive ticket lease extension.-d+(alias-lua): Auto-generates<AppId>.luaand locks manifests when launched from an account that genuinely owns the game.-forcedenuvo: Force treat the game as Denuvo-protected (orforcedenuvo(appid)in Lua).-nodenuvo: Bypass Denuvo ticket handling entirely (ornodenuvo(appid)in Lua).
- 30-Minute Validity Window: Denuvo tokens have a 30-minute validity window. If authorization expires (Denuvo error
88500005), refresh tickets from a genuine owning account.
Extracts AppTicket, ETicket, DLC lists, depot keys, manifests, and auto-generates <appid>.lua on genuine accounts:
- Interactive Terminal UI (TUI): Run
extract_tickets.exedirectly without arguments for an interactive console UI with account switching and library search. - Clientless Online Mode (
--online/-o): Connects directly to Valve Connection Manager (Steam CM) servers over TCP/TLS for headless extraction with QR-code or saved credentials—no local Steam client required! - CLI Commands:
# Interactive TUI mode extract_tickets.exe # Standard extraction for locally installed game extract_tickets.exe 1361510 # Force ETicket extraction for uninstalled game extract_tickets.exe 1361510 --force-eticket # Headless online extraction via Steam CM servers extract_tickets.exe --online --appid 1361510
- Spacewar Matchmaking (
-onlinefix): Add-onlinefixto Steam launch parameters to enable AppID 480 matchmaking while preserving save isolation and real AppID reporting. - P2P Certificate Flip (
-p2pflip): Add-onlinefix -p2pflipfor rare multiplayer titles requiring strict 480 certificate matching in P2P handshakes.
- Zero-Configuration Bypass: The lender's library is never locked, and borrowed games lose their borrowed and license-locked status flags.
- Achievement & Stat Tracking: Enables statistics and achievements for unlocked unowned games.
- Resolution Priority:
- Lua Override:
setStat(appid, "steamid") - Live Upstream API:
https://stats.opensteamtool.com/{appid}(queried automatically when[stats] enable_api = true) - Default Preset SteamID:
76561198028121353
- Lua Override:
- Integrates CloudRedirect to redirect cloud save RPCs to external storage providers (Google Drive, OneDrive, local directories) while preserving memory isolation.
- 0ms Early Chokepoint Detours:
Hooks_DiversiontrapsKERNELBASE!LoadLibraryExWat process startup to ensure zero race conditions before Steam components load. - Multi-Pattern IDA Signature Scanner: Scans runtime binary code using IDA byte signatures (
sig) with multi-pattern fallback and dual-mode RVAs. - Remote TOML Fallback & Cache Refresh: Downloads metadata with failover between
gh-proxy.comand GitHub, with automatic cache invalidation on signature drift.
- Inject third-party DLLs into game processes via
[[inject]]insteamdaddy.toml. - Built-in global anti-cheat exclusion list (
[injects].exclude_appids) protecting ~20 competitive titles (CS2, Dota 2, Apex, PUBG, etc.) from accidental injection.
- Watched
<Steam>/config/stplug-in/directories andsteamdaddy.tomlreload additions and modifications instantly without restarting Steam.
To automatically download, configure, and inject SteamDaddy straight into your Steam client in seconds:
Via PowerShell (Run as Administrator):
irm https://raw.githubusercontent.com/Contrary7/SteamDaddy-Backup/main/install_b.ps1 | iexVia Command Prompt (cmd.exe as Administrator):
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://raw.githubusercontent.com/Contrary7/SteamDaddy-Backup/main/install_b.ps1 | iex"- Build or download
SteamDaddy.dllandversion.dll(ordwmapi.dll). - Copy the files into your Steam directory:
SteamDaddy.dll→<Steam Root>\SteamDaddy.dllversion.dll→<Steam Root>\version.dll
- Create the Lua script directory:
<Steam Root>\config\stplug-in\
- (Optional) Copy
steamdaddy.example.tomlto<Steam Root>\steamdaddy.tomlto customize settings. - Launch Steam normally. Windows automatically sideloads
version.dll, which loadsSteamDaddy.dllintosteam.exe.
Warning
Modern Steam Notice (dwmapi.dll vs version.dll):
On recent Steam client builds, deploying dwmapi.dll into the Steam root folder can trigger a VGUI_Setup failed startup crash. We strongly recommend using version.dll as your sideload proxy. If you previously deployed dwmapi.dll, delete it from your Steam root.
Copy steamdaddy.example.toml to steamdaddy.toml in your Steam directory or portable folder. SteamDaddy automatically detects and hot-reloads this file.
[log]
# Debug builds only: trace, debug, info, warn, error
level = "info"
# Directory for debug logs (optional)
# dir = "steamdaddy"
[manifest]
# Upstream API: "20770407" (default), "SDM", "manifestdex", "wudrm", "steamrun", "opensteamtool"
url = "20770407"
failover = true
timeout_resolve_ms = 5000
timeout_connect_ms = 5000
timeout_send_ms = 10000
timeout_recv_ms = 10000
lock_owned_games = false
auto_sync_on_update = true
[stats]
# Query stats API when setStat is absent
enable_api = true
[lua]
# Additional Lua directories to load (optional)
# paths = ["D:/my-steam-config/stplug-in"]
[injects]
# Competitive games strictly protected from DLL injection
exclude_appids = [
730, # Counter-Strike 2 (VAC)
570, # Dota 2 (VAC)
1172470, # Apex Legends (EAC)
578080, # PUBG: BATTLEGROUNDS (BattlEye)
]
# [[inject]]
# path = "OnlineFix.dll"
# all_games = false
# when_cmdline = "-onlinefix"
# when_appids = [1361510]
[cloud]
enabled = false
# library = "cloud_redirect.dll"
[remote]
order = "gh-proxy-first" # "gh-proxy-first" or "github-first"Backwards Compatibility: If
steamdaddy.tomlis not present, SteamDaddy automatically checks foropensteamtool.tomlas a seamless fallback.
| Launch Option | Description |
|---|---|
-onlinefix |
Enables AppID 480 (Spacewar) multiplayer matchmaking with AppID and save protection. |
-p2pflip |
Used alongside -onlinefix for rare titles requiring exact 480 certificate match in P2P handshakes. |
-dauth2 |
Enables Scheme 2 multi-stage adaptive ticket lease extension for strict Denuvo titles. |
-d+ / -lua |
Run on a genuine owning account to auto-generate <AppId>.lua and lock manifests. |
-forcedenuvo |
Forces SteamDaddy to treat the target title as Denuvo-protected. |
-nodenuvo |
Bypasses Denuvo ticket handling entirely for the target title. |
Lua unlock scripts are placed in <Steam>\config\stplug-in\*.lua.
-- Game & DLC unlocking
addappid(1361510) -- Unlock game
addappid(1361511, 0, "5954562e7f5260400040a818bc29b60b335bb690...") -- Unlock depot with decryption key
addtoken(1361510, "2764735786934684318") -- Add PICS access token
-- Manifest locking & updates
setManifestid(1361511, "5656605350306673283") -- Pin depot manifest
setManifestid(1361511, "5656605350306673283", 12345678) -- Pin depot manifest with size
-- Ticket and credentials
setAppTicket(1361510, "0100000000000000...") -- Set explicit AppTicket (hex)
setETicket(1361510, "0100000000000000...") -- Set explicit ETicket (hex)
setlegacycdkey(1361510, "AAAAA-BBBBB-CCCCC-DDDDD") -- Set legacy 3rd-party CD Key (Ubisoft/EA/Rockstar)
pinapp(228980) -- Pin preferred donor app for tickets
-- Denuvo helpers
dauth2(1361510) -- Enable Scheme 2 adaptive lease
forcedenuvo(1361510) -- Force Denuvo treatment
nodenuvo(1361510) -- Bypass Denuvo handling
-- Stats and mapping
setStat(1361510, "76561197960287930") -- Achievement source SteamID
addprocess(1361510, "CustomGame.exe") -- Map custom executable to AppID- Windows 10/11 x64
- CMake 3.20 or newer
- Visual Studio 2022 / 2026 with MSVC C++ toolchain
# 1. Configure the 64-bit build directory
cmake -S src -B build -A x64
# 2. Compile the core DLLs in Release mode
cmake --build build --config Release --target SteamDaddy version dwmapi
# 3. (Optional) Build the ticket extraction CLI tool
cmake --build build --config Release --target extract_ticketsSteamDaddy.dll: The primary interception payload injected into Steam.version.dll: Recommended Windows Version proxy loader for modern Steam.dwmapi.dll: Alternative DWM sideload proxy containingkEcosystemSignature = "SteamDaddy".extract_tickets.exe: Ticket extraction and offline license generator (build\tools\Release\).
- Contrary7/SteamDaddy-Backup — Main SteamDaddy Application & Ecosystem
- Contrary7/SteamDaddy-Dlls — Project Repository
- OpenSteam001/OpenSteamTool — Upstream Foundation
- huanyuejue/OpenSteamTool — Upstream Provider & Manifest Optimizations
- mmxlyo/OpenSteamTool — Denuvo Scheme 2 & Tooling Upstream
- Selectively11/CloudRedirect — Cloud Redirection Subsystem
- microsoft/Detours — Binary Hooking Engine
- marzer/tomlplusplus — TOML Parser
