本篇文章中的内容仅供教学目的使用
The content in this article is for educational purposes only

前言

在前段时间,作者写了一篇通过脚本续订构建Windows XP/ Server 2003的测试证书的文章,主要介绍了如何通过脚本生成构建XP/2003的测试证书,而本篇文章则着重记录作者构建Windows Server 2003 STD(Standard Edition)的过程。
本文以构建x86版本的Windows Server 2003 STD(Standard Edition)为例,记录整个编译过程和错误诊断,参考文章:Windows Server 2003 (NT 5.2.3790.0) build guide

构建环境的准备

本文构建环境:

  • VMware虚拟机,分配了4核CPU和4GB RAM
  • Windows Thin PC x86 英文版
  • 大于40GB的硬盘空间

Windows XP/Server(NT5)以上的系统均可进行构建,也有基于x64的Windows7/10/11进行编译且成功的案例,但为了避免额外的错误,最好选择x86的Windows环境进行构建。
需使用英语版本的Windows进行编译

所需构建文件(请自行搜索下载)

  • nt5src.7z
  • win2003_prepatched_v10a.zip
  • win2003_x86-missing-binaries_v2.7z 或是 Windows Server 2003 srv/sbs/ads/dtc/bla的安装iso文件(根据你想构建的sku决定)

建议软件:

  • Everything (X86 Version),用于快速搜索文件
  • Notepad ++或其他文本编辑器
  • 7zip
  • 虚拟机软件,例如Qemu Manager
  • UltraISO

提取nt5src.7z内的win2k3文件夹,双击X.cmd将文件提取到一个文件夹内,该文件夹必须被命名为srv03rtm,否则会导致预构建的DirectUI文件丢失。如丢失相应文件,需从原版的Win2k3安装盘的i386文件夹中提取所缺失的文件,并手动补全到由oscdimg.cmd生成的iso文件中。

证书问题

截止到本文发布时,原本包含在泄漏文件中的测试证书已经过期(证书有效期截止到2021年10月份),如果直接运行,则会提示“The signer's certificate is not valid for signing” ,需要手动设置系统的系统的时间或生成新的测试证书。
以下方法任意选其一:

方法一、修改系统时间

这是最简单的方法,也适合虚拟机环境。
确保虚拟机的BIOS和系统时间都设置为2020.10至2021.10之间,并确保没有像Vmware Tools的软件同步宿主机时间,再进行下一步的操作。

方法二、生成新的证书文件

请参考以下文章:

https://classsoft.net/archives/60.html

https://bbs.kanxue.com/thread-274551.htm

方法三、修改cmdline.c(未经测试)

修改位于base\ntsetup\syssetupcmdline.c文件,
注释掉与NT5.cat和NT5INF.cat有关的证书校验部分。
修改后的文件:
modified_cmdline.c
可用此文件替换位于base\ntsetup\syssetupcmdline.c

应用win2003_prepatched_v10a等其他补丁

在源码目录srv03rtm,包括子文件夹和文件(subfolders and files)上取消设置只读(Read-Only)
使用7zip等工具解压补丁文件,并确保根据需要覆盖现有的文件。

开始构建

好消息是,泄漏的文件中包含了完整的构建工具链,因此不需要其他额外工具。

对于Windows Vista以上的系统(使用UAC),以管理员权限(Run as Administrator)打开命令提示符(CMD),使用cd命令到到源码所在文件夹srv03rtm,执行:

tools\razzle.cmd free offline

如果一切没有问题,输出应该如下图所示:

如遇到与证书或者无法创建测试签名有关的问题,请回顾上文的证书问题部分。

运行以下命令进行编译:

build /cZP -M 4

其中4为虚拟机处理器的核心数,可根据需要设置,一般不建议设置为比4更大的数。
接下来请慢慢等待,视电脑配置不同,可能需要1小时~5小时的编译时间。
编译完成后的二进制文件会被保存至binaries.x86fre目录。
如果上面的操作没有问题,razzle不会出现错误信息
Windows Thin PC-2023-12-09-21-12-29.png

编译完成后

win2003_x86-missing-binaries_v2.7z中的binaries.x86fre目录内文件复制到系统中的binaries.x86fre,这会补全源码包中缺失的二进制文件,如提示覆盖文件夹,请选择"YES"。
然后执行postbuild.cmd:

tools\postbuild.cmd-sku:srv filechk
  • srv: Windows Server 2003 标准版
  • sbs: Windows Server 2003 小型企业版
  • ads: Windows Server 2003 企业版
  • dtc: Windows Server 2003 数据中心版
  • bla: Windows Server 2003 Web 版

如果前面的步骤操作正确,postbuild.cmd不会输出任何错误信息。
如果提示错误信息,从错误日志postbuild.err可以查到缺失的文件。

除了使用missing-binaries.7z包之外,也可以从原版的Windows server 2003安装盘中提取出缺少的二进制文件,方法如下:
先将iso文件挂载为G盘符,然后在razzle窗口内运行tools\missing.cmd,它会自动补全缺失的二进制文件。

创建可启动的ISO文件

运行命令如下

tools\oscdimg.cmd srv

各sku的代码请参考上文。
除非指定,否则iso文件将会被默认保存至binaries.x86fre目录所在的磁盘。

测试ISO文件

如果在上文中通过了“修改系统时间”的方式避免了证书过期的问题,则需要在用于测试的虚拟机中也同样将时间设置为2020.10至2021.10之间。安装完毕后改回时间
在QEMU中如遇到鼠标漂移的问题,可在启动命令中增加上-usb -usbdevice tablet

时间炸弹(Timebomb)

可以在\tools\postbuildscripts\timebomb.cmd(44行)按天数更改时间炸弹的日期,将DAYS设置为0即禁用时间炸弹
只有某些参数有效(0、5、15、30、60、90、120、150、180、240、360、444)
Screenshot 2024-07-14 215158.png

成功运行

安装时缺少文件

如安装程序再安装时提示缺少文件,可从相同SKU的Windows Server 2003安装盘的i386目录中复制相应的文件。
例如,安装程序提示缺少shell32.dll,则可以复制安装盘i386目录中的SHELL32.DL_