Before You Run It: How to Check a Private Server Client Download
Most private server downloads are one of two very different things, and the difference decides how much trust you are being asked for.
In the common case, the project distributes nothing that executes and expects you to bring your own client. The emulator, the patch files and the database stay on the operator's side, and the only thing at risk is your account on their realm — which is why our 1.12.1 client checklist can be mostly about version numbers and provenance.
The other case is different in kind. If a project hands you a complete modified game client, then the untrusted part is no longer only the server. It is the archive you are about to extract and run.
Which model are you in?
| Model | What the project gives you | What is untrusted |
|---|---|---|
| Bring your own client | Setup instructions naming a specific build — for example the 3.3.5a realm we covered earlier, which asks for build 12340 and does not redistribute the client | The server side, and any patch files you choose to apply |
| Full client archive | A complete, already-patched client, often tens of gigabytes, hosted on a third-party file host | The archive itself — including its executable |
| Launcher-distributed | A small launcher that downloads and patches the client for you | The launcher binary, and whatever it fetches on your behalf |
| Launcher plus required addon | As above, plus a specific addon the server needs to function | Everything above, plus the addon, which is often hosted somewhere the project does not control |
The second and third rows are where the interesting failures live.
What a download page should publish
Six things. A project that publishes all six is telling you it expects to be checked.
- A hash for each archive — SHA-256 is the current baseline. No hash means the download is unverifiable by construction.
- A file manifest or at least the archive's contents, so you know what you are extracting before you extract it.
- A code signature on any executable the project ships, not just on the installer wrapper.
- The build number the archive corresponds to. VMaNGOS, for example, documents
5875as the final 1.12.1 client and states which earlier builds it also supports — that is the level of specificity worth expecting. - A versioned release or repository the download can be traced to. A pinned release tag is verifiable; a folder on a file-sharing site is not.
- A changelog for modified files. "We changed these files and here is why" is the difference between a patched client and an opaque one.
One tracked Wrath realm illustrates what the other end looks like. When it was added to a community directory, its download page offered complete clients at 17.6 GB and 27 GB, both pointing at the same folder on a third-party file host, with no SHA-256 hash, no manifest, no code signature, no published correspondence between its stated build and the archive contents, and no project-specific public source repository. The emulator underneath is a standard open-source core — that part is not the issue. The issue is that the executable payload itself was the unverified component, which is a materially worse position than an ordinary private server puts you in.
How to actually verify a hash
Computing a hash is one command.
# macOS / Linux
shasum -a 256 wow-client.zip
# Windows PowerShell
Get-FileHash .\wow-client.zip -Algorithm SHA256
:: Windows, no PowerShell
certutil -hashfile wow-client.zip SHA256
Then comes the part people skip. Compare it against a hash you got from somewhere other than the download page.
A hash printed next to its own download link proves one thing: your transfer completed without corruption. It does not protect you from a hostile or compromised distribution, because whoever controls the page controls both the link and the number. To get real assurance, the expected hash has to arrive through a second channel — a pinned message in the project's Discord that predates the download, an archived snapshot of the page from before your visit, a release note with a date, or an independent mirror published earlier.
If no hash exists in any channel, the honest conclusion is not "it is probably fine." It is "this cannot be verified," and the rest of this guide is about reducing what that costs you if you proceed anyway.
Run it like you do not trust it
- Leave your operating system's protections switched on. On macOS that means keeping the quarantine attribute intact rather than removing it to silence a Gatekeeper prompt; on Windows it means keeping SmartScreen and Defender active. "Temporarily disable your antivirus" is a request to lower your defences, and it should be treated as a cost, not a step.
- First launch inside a sandbox or a virtual machine. Windows Sandbox is built into Pro and Enterprise editions for exactly this; a throwaway VM works everywhere else. If the client behaves normally there, you have learned something without risking your main install.
- Never grant administrator rights to a launcher that does not explain why. Writing into its own game folder does not require elevation. Installing services or drivers does, and that is a different level of trust.
- Watch what it talks to on first run. A client that starts a session with its own realm's login server is behaving normally. Outbound traffic to unrelated hosts on first launch is worth investigating before you log in anywhere.
- Keep a clean copy of the original client — or at least of the archive — so a patched installation can be thrown away rather than repaired.
- Use unique credentials. A realm-specific username, a password you use nowhere else, and an email you are willing to have leaked. Never a Battle.net password.
Launcher behaviour: normal versus not
| Normal for a private server launcher | Not normal |
|---|---|
| Writes patch files into its own game directory | Writes outside its own directory without saying so |
| Downloads and applies updates from the project's own hosts | Downloads executables from a file host or a personal wiki with no pinned version |
| Launches the game executable | Asks for your Battle.net or other unrelated account credentials |
| Requires an account on the realm's own website | Requires that you disable antivirus, a firewall rule, or a kernel-level protection |
| Shows a version or build number | Updates itself silently with no published version and no hash anywhere |
The required-addon case is a mild version of the same problem. Some servers depend on one specific addon to drive a custom system — a multiplayer bot framework, for instance — and the documentation for it may point at the addon author's own wiki rather than a pinned release. That is a third party you did not choose, inside a game you are already trusting less than usual.
The ten-minute version
- Does the download page publish a hash? If not, stop and note that.
- Does it publish a manifest, a build number, and a changelog of modified files?
- Is there a source repository, or a pinned release, the download can be traced to?
- Compute the hash locally and compare it to a value obtained from a second channel.
- If you cannot obtain a second-channel hash, download it into a sandbox or VM, not your main machine.
- Do not strip OS protections to make it run; if it needs that, that is the finding.
- Do not grant elevation to anything that has not explained what the elevation is for.
- Do not reuse credentials, and assume anything you type into an unverified client is available to whoever built it.
- Keep your own clean client and your own backups.
- If a project cannot tell you which files it modifies, treat its client as non-standard — and treat every recommendation it makes about your machine the same way.
This is the same habit of mind as reading a directory entry and checking a population number: not cynicism, just deciding what a claim is worth before you act on it. For the steps that come after you decide to commit, see evaluating a community realm and the shutdown backup checklist.
Sources and further reading
External references used to verify or expand this article.