server-re/third-party/README.md
2026-10-15 09:02:53 -04:00

146 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# third-party/ — upstream sources for shipped support DLLs
Source trees matched to the Support DLLs listed in `decomp/INVENTORY.md`.
Used as reference when decompiling (symbol recovery, struct layouts, FLIRT-style
matching). **Not** build inputs for anything in this repo.
"Matched" here means the upstream version equals the version embedded in the
DLL (VERSIONINFO + in-binary version strings). Compiled DLLs cannot be
byte-matched to source without the original toolchain/flags; the archives
themselves were verified against upstream checksums where available.
| DLL(s) | Embedded version (observed) | Directory | Upstream / integrity | Match |
|---|---|---|---|---|
| `libeay32.dll`, `ssleay32.dll` | FileVersion `1.0.0d`; strings `OpenSSL 1.0.0d 8 Feb 2011`; PDB `...\OpenLibrary\openssl-1.0.0d\out32dll\` | `openssl-1.0.0d/` | `openssl.org/source/old/1.0.0/openssl-1.0.0d.tar.gz`, SHA-1 `32ca934f380a547061ddab7221b1a34e4e07e8d5` (matches official `.sha1`); SHA-256 `92511d1f…6320db` | Exact release |
| `libcurl_x64.dll`, `libcurl_Win32.dll`, `libcurld_x64.dll`, `libcurld_Win32.dll` | FileVersion `7.21.4`; strings `libcurl/7.21.4` | `curl-7.21.4/` | git tag `curl-7_21_4` (commit `827f0a31…`) via GitHub archive, SHA-256 `1dd41d4b…eb3240`. Official release tarball no longer downloadable (404). | Exact tag; see note |
| `BugTrapU-x64.dll` | FileVersion `1.3.3466.24114`; PDB `...\OpenLibrary\BugTrap\Win32\Bin\BugTrap.pdb` | `BugTrap-1.3-57bd515/` | `github.com/bchavez/BugTrap` commit `57bd515` (earliest public import, `1.3.3718.38316`) | **Closest available, NOT exact** |
| `dbghelp.dll` | Microsoft, Debugging Tools for Windows `6.12.0002.633` | `mingw-w64-dbghelp-63ebe6c/` | `github.com/mingw-w64/mingw-w64` commit `63ebe6cd…` (master HEAD, retrieved 2026-10-14): `include/dbghelp.h`, `lib-common/dbghelp.def` (x64), `lib32/dbghelp.def`, licence files | **Header + export list only, not an implementation** |
Notes:
- **curl**: the git tag differs from a release tarball only by generated files
(configure, Makefiles) and `maketgz` version stamping. I applied the version
stamp only (`LIBCURL_VERSION` → `"7.21.4"` in `include/curl/curlver.h`,
`CURL_VERSION` in `src/version.h`); `LIBCURL_TIMESTAMP` left as `"DEV"`
because the real release timestamp is unknown.
- **BugTrap**: no public source for build 3466 found. Export comparison: the
shipped DLL's 83 `BT_*` exports (82 shared) equal `source/BugTrap.h` of 57bd515 except the
DLL exports `BT_GetErrorString` (not in header) and the header declares
`BT_SetTerminate` (not exported). Treat API/structs as approximate.
- The `debug` (`libcurld_*`) and Win32 variants share the same source version.
- **dbghelp (mingw-w64)**: clean-room, public-domain/ZPL headers, not
Microsoft's. All 205 named exports of the shipped `dbghelp.dll` appear in
`lib-common/dbghelp.def`. Header is a modern superset of the 6.12 API, so
struct versions/sizes may differ from 2010-era definitions. mingw-w64 has no
dbghelp implementation; an open implementation exists in Wine
(`dlls/dbghelp/`, LGPL-2.1).
## No public source (not included)
| DLL | Observed identity | Reason |
|---|---|---|
| `dbghelp.dll` | Microsoft, Debugging Tools for Windows `6.12.0002.633` | Proprietary implementation; clean-room header included (see table above). |
| `hasp_windows_x64_95595.dll` | SafeNet Sentinel LDK RuntimelessAPI `6.3.1.28566` | Proprietary; `hasp_api.h` ships only in the vendor-licensed Sentinel LDK SDK. Bundles trio and hamsterdb internally (observed strings). |
| `XTrap4Server.dll` / `20100731_521_XTrap4Server.dll` | no VERSIONINFO | Proprietary anti-cheat (WiseLogic XTrap); no public SDK. |
| `ApexProxy.dll`, `ApexProxyMain.dll` | no VERSIONINFO | Proprietary (Apex anti-cheat); no public SDK. |
| `XLSLogin.dll` | no VERSIONINFO | Unknown origin; no public source identified. |
## Statically linked: TinyXML
TinyXML is not a separate DLL; it is compiled into the server EXEs.
- **Identity (observed):**
- 9 `TiXml*` RTTI classes appear in 14 of the 16 server EXEs. The two
`SMMonitoring` EXEs have none.
- In `Agent_Release_x64.exe`, the 12 TinyXML error-table strings and
`Failed to open file` appear contiguously at file offset `0x11d570`.
- There is no version string in the binary.
- **Version (inference from the error table):**
- The binary contains `Memory allocation failed.`. TinyXML 2.6.x removed that
entry; 2.5.1–2.5.3 have it, and their error tables are identical.
- So it is 2.5.1–2.5.3, but which one is unresolved. `tinyxml.h` and
`tinyxmlparser.cpp` differ between those releases, and the code has not been
compared.
- 2.5.0 couldn't be fetched, and pre-2.5 releases were not checked.
- **Directory:** `tinyxml-2.5.3/` holds the latest 2.5.x release, unmodified.
- Source: `sourceforge.net/projects/tinyxml`, file `tinyxml_2_5_3.zip`.
- SHA-256: `143590aa5930c1326315fb9fe3c0aab316a43751a44582dedd69331004b2c6a1`.
- **Match:** closest available, not confirmed exact.
- **Licence:** zlib, so it's fine to commit.
- **Use:** class layouts and the parser source let you label TinyXML functions
in the decompiled output, via the class records' method tables and the error
strings above.
## Statically linked: ProudNet (Nettention) — local-only headers
ProudNet is not a separate DLL; it is linked into the server EXEs.
- **Identity (observed):** in `Agent_Release_x64.exe`, RTTI and assert
strings name `Proud::CNetServerImpl`, `Proud::CNetClientImpl`, RMI stubs
and proxies, and `GET /PNReport/ReportError.php`. There is no version string
in the binary. VS2010 build, so likely an early-2010s ProudNet (inference).
Other EXEs not yet checked.
- **Public material:** `github.com/Nettention/ProudNet` contains prebuilt libs
and headers only. There is no public implementation source.
- **Licence:** proprietary EULA. It forbids redistribution and
reverse-engineering (§1.2b), treats the software as confidential (§3), and
is governed by Korean law (§7–8). **Do not commit any ProudNet files.**
- **Local copy (gitignored):** `_local/proudnet-1.8.00001/`. It holds
`ProudNet/include/` (187 headers) plus `ProudNet-License-En.txt`, from tag
`ProudNetLibSetup-1.8.00001` (commit `c70f23f9…`, May 2023). Fetched at the
user's direction for local naming reference only.
- **Match:** not version-matched; 1.8 is about a decade newer than the build.
Only 18 of 63 `Proud::` RTTI classes in the Agent appear in these headers;
the rest are internal `*Impl` types. Verify any struct layout against the
decompiled code before relying on it.
- To re-fetch:
`git archive ProudNetLibSetup-1.8.00001 ProudNet/include ProudNet-License-En.txt`
from that repo into `_local/proudnet-1.8.00001/`.
- **`github.com/Nettention/ProudChatSDK` (checked 2026-10-15, `main` = tag
`1.1.0001`, commit `e0d9d6b8`).**
- **Contents:** bundles ProudNet **1.8.58849**: 185 headers, plus prebuilt
libraries for Windows (v110/v120/v140, dll), Android, iOS and
**x86_64 Linux** (`libProudNetServer.so/.a`, `libProudNetClient.so/.a`;
`__xstat` → old glibc).
- **Licence:** the repo's `LICENSE` (MIT) covers the chat SDK only;
`ProudNet/` keeps the same proprietary EULA (§1.2b). Nothing from it is
stored in this repo.
- **Headers:** identical to 1.8.00001 apart from the version banner and
translated doc comments in `ErrorType.h`. They add one error code and give
no new information beyond `_local/proudnet-1.8.00001`.
- **Compatibility with the 2013 ProudNet linked into DBCServer:**
| Aspect | Result | Type |
|---|---|---|
| PIDL proxy ABI | Matches: `IRmiProxy` keeps `m_signature` at +0x14, which the generated constructor checks against 1 (`MS:0x140008e20`). `RmiID` is still `uint16_t`. The `PIDL compiler is incompatible` and `CStartServerParameter::m_(fast)encryptedMessageKeyLength` strings appear in both | O |
| Internal implementation | 29 of DBCServer's 63 `Proud::` RTTI classes are absent from the 1.8.58849 Linux libraries' symbols, e.g. `CTcpLayer_C`, `CUdpSocket_S`, `CUpnp`, `ICompletionPortEventSink` | O |
| Internal net version | **2013 build: 196978 (0x30172)**, the global at `DBC:0x140344d40`. It is copied into the server object at +0x220 (`DBC:0x14018fa70`, instruction at `0x14019018d`) and into the client objects (`0x1401dd3e0`, `0x1401df000`). In the connect handshake (`DBC:0x1401a8110`, `NotifyServerConnectionRequestData`) the server reads a credential byte array, a 16-byte protocol GUID and a 4-byte int, and accepts only if the GUID **and** the int equal its own. The same value appears exactly once in `.data` of all 16 EXEs (O). **1.8.58849: 197144 (0x30218)** (`CNetConfig::InternalNetVersion`, rejected via `NotifyProtocolVersionMismatch`). The values differ by 166 | O |
| Licensing | 1.8 also contains license and activation checks (`CPNLic`, `NotifyLicenseMismatch`) | S |
- **Conclusion (I):**
- **Source-level:** usable as a header/ABI reference for PIDL-generated
stubs and proxies.
- **Wire-level:** **not** compatible with the original 2013 peers. The
internal net versions differ (196978 vs 197144), and the 2013 handshake
requires an exact match. This is O for the 2013 server side; I for the
1.8 side, which was not traced beyond the symbol name.
- **Linking:** linking `libProudNetServer.so` into `src/dbc_server`
would require accepting the EULA and a licence, and would give a
ProudNet 1.8 server that the original binaries likely cannot talk to.
Vendor attributions for XTrap (WiseLogic) and Apex are inferred from DLL
names, not corroborated by decompilation.
## Acquisition routes for the remaining libraries
| DLL | Route | Notes |
|---|---|---|
| `dbghelp.dll` | Windows SDK / WDK 7.1 "Debugging Tools for Windows" (official `dbghelp.h` + `.lib`); Microsoft public symbol server `msdl.microsoft.com/download/symbols` for the PDB | Public PDB gives Ghidra near-complete function names. Wine `dlls/dbghelp/` (LGPL-2.1) is an open reimplementation if implementation code is wanted. |
| `hasp_windows_x64_95595.dll` | Thales Sentinel LDK SDK (free evaluation after registration) for `hasp_api.h` | `95595` is the vendor ID; the runtimeless DLL is generated per vendor, so this exact build is obtainable only from the publisher. Modern `hasp_*` C API is largely backward-compatible with 6.3. |
| `XTrap4Server.dll` | Publisher-licensed SDK under NDA only; vendor appears inactive | Practical path: recover interface from the 22 KB DLL's exports + server call sites (REA/Ghidra). |
| `ApexProxy.dll`, `ApexProxyMain.dll` | Publisher-licensed SDK only | Same as XTrap; `ApexProxyMain` has a `Ver: %s Build: %s` string as a starting point. |
| `XLSLogin.dll` | Unknown | Identify first: exports/imports/PDB path/signer via `rea_inspect_with_objdump`. |
Policy: commit only redistributable material (upstream OSS, mingw-w64
headers). Vendor SDKs obtained under licence must stay out of git. Interfaces
reconstructed from binaries go in `decomp/<dll>/` with an `evidence.md`
ledger; they describe static interface only, not runtime behavior.