provigz/ZoneInternetGamesServer
GitHub: provigz/ZoneInternetGamesServer
该项目重建了已停服的 Windows XP/ME/7 内置 Internet Games 的服务端,使这些经典联机游戏重新可玩。
Stars: 138 | Forks: 5
# Zone Internet Games Server
本项目恢复了 Windows 7 和 XP/ME 中内置的 Internet Games 的功能,其官方服务器已于以下日期正式关闭:
* **Windows XP/ME**:2019 年 7 月 31 日
* **Windows 7**:2020 年 1 月 22 日
这些游戏包括:
* Internet Backgammon (XP/ME, 7)
* Internet Checkers (XP/ME, 7)
* Internet Spades (XP/ME, 7)
* Internet Hearts (XP/ME)
* Internet Reversi (XP/ME)
## 将 Internet Game 连接到托管的 Internet Games Server
### 在 Windows XP/7 上
1. 确保你能访问一个托管的 [Internet Games Server](#internet-games-server),可以在 `localhost`、你的本地网络或通过 Internet 访问。
2. 在[本项目的最新发布版本](https://github.com/Vankata453/ZoneInternetGamesServer/releases)中,找到“Assets”部分,下载与你的 Internet Games 架构(x64/64位 或 x86/32位)相匹配的“Release”包。
3. 解压下载的包,里面包含了 [Internet Games Server](#internet-games-server)、自定义的 client DLL 以及注入器。
4. 启动你选择的 Internet Game。
5. 运行 DLL Injector。完成后,会出现一个对话框,提示你输入 [Internet Games Server](#internet-games-server) 的主机和端口!
### 在 Windows ME 上
Windows ME 没有受支持的 DLL Injector 或 Client DLL。
我无法在 ME 上修改 `hosts` 文件使其生效。因此,作为替代方案,你可以直接修补游戏的可执行文件和 `CMNCLIM.DLL`(用于指定端口)。
请使用 Windows ME 专用的 VBScript 修补工具(`InternetGamesPatcher_ME.vbs`),它包含在本项目的所有构建包中。运行后,系统会分别在弹出的对话框中提示你输入目标主机和端口。你可以将任意一项留空或点击“取消”,表示不对该项进行修补。
要通过命令行运行修补工具(显示更详细的信息):`cscript //nologo InternetGamesPatcher_ME.vbs`
修补工具会为原始的游戏可执行文件和 `CMNCLIM.DLL` 创建 .bak 备份副本,这样如果出现任何问题,你都可以轻松地将它们恢复原状。
## 包含内容
本仓库包含以下内容:
### Internet Games Server

一个 Winsock server,通过充当 Zone 游戏服务器来让 Internet Games 恢复可玩状态。
它会在游戏大厅中根据正在进行的游戏以及玩家选择的技能水平来匹配玩家。
它可以同时管理任意一种游戏的多场比赛。
每款游戏都有特定的自定义消息,服务器全面支持这些消息以确保其正常运行。
#### Internet Backgammon (Windows 7)

#### Internet Checkers (Windows 7)

#### Internet Spades (Windows 7)

#### Internet Backgammon (Windows XP/ME)

#### Internet Checkers (Windows XP/ME)

#### Internet Spades (Windows XP/ME)

#### Internet Hearts (Windows XP/ME)

#### Internet Reversi (Windows XP/ME)

#### 命令行参数
* `-c` (`--config`):设置目标配置文件。对选项的任何更改都将写入此文件。*默认值:"InternetGamesServer.config"*
* `-p` (`--port`):用于托管服务器的端口。会自动写入配置文件。
### Internet Games Client DLL + DLL Injector
一个 DLL,旨在使用 DLL Injector 应用程序将其注入到任何一款游戏中。
Injector 会遍历你系统上所有正在运行的 Internet Games,并将相应的 client DLL 注入其中。
这两个应用程序都分别提供了针对 Windows 7 和 Windows XP 游戏的两个变体。其中针对 Windows XP 的变体仅在 x86 构建中提供。
Injector 和 Client DLL 均**不支持 Windows ME**。在 Windows ME 上请使用 [VBScript 修补工具](#on-windows-me) 来配置主机和端口。
#### 功能原理
Windows 7 的 Client DLL 会执行以下操作:
* 如果 `HKEY_CURRENT_USER\Software\Microsoft\zone.com\Zgmprxy` 注册表项不存在,则创建它。
* 在 `HKEY_CURRENT_USER\Software\Microsoft\zone.com\Zgmprxy` 下创建一个 `DisableTLS` DWORD 32 位注册表值,并将其设置为 1。
* 显示一个对话框,用户可以在其中输入位于某处的 [Internet Games Server](#internet-games-server) 的主机和端口以进行连接。
* 对 `ws2_32.dll` 中的 [`GetAddrInfoW`](https://learn.microsoft.com/en-us/windows/win32/api/ws2tcpip/nf-ws2tcpip-getaddrinfow) 函数放置 hook,设置适当的参数,以及在对话框中指定的主机和端口。
Windows XP 的 Client DLL 会执行以下操作:
* 显示一个对话框,用户可以在其中输入位于某处的 [Internet Games Server](#internet-games-server) 的主机和端口以进行连接。
* 对 `ws2_32.dll` 中的 [`inet_addr`](https://learn.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-inet_addr) 和 [`htons`](https://learn.microsoft.com/en-us/windows/win32/api/winsock/nf-winsock-htons) 函数放置 hook,设置在对话框中指定的主机和端口。
## 构建说明
要构建本项目,请在 Visual Studio 中打开解决方案文件 (.sln) 并从那里进行构建。
## 指南
* [运行同一 Internet Game(任意版本)的多个实例](docs/MultipleInstances.md)
* [在更新的 Windows 版本上运行 Windows XP/ME Internet Games](docs/LaterWindowsXPGamesSetup.md)
## 致谢
* [codereversing.com](https://www.codereversing.com/archives/138) 提供了一些日志以及关于逆向工程 Windows 7 Internet Games 的大量有用信息。
标签:DLL注入, Linux, UML, Windows游戏, 云资产清单, 流量审计, 游戏私服, 网络通信, 逆向工程