文档 技术细节 从源代码构建VeraCrypt Windows构建指南

本指南介绍了如何设置一个能够编译VeraCrypt的Windows系统。此外，还描述了如何编译VeraCrypt。
这里以Windows 10系统为例进行说明，但其他Windows系统的操作过程类似。
编译VeraCrypt需要以下组件：

1. Microsoft Visual Studio 2010（微软Visual Studio 2010）
2. Microsoft Visual Studio 2010 Service Pack 1（微软Visual Studio 2010服务包1）
3. NASM
4. YASM
5. Visual C++ 1.52
6. Windows SDK 7.1（Windows软件开发工具包7.1）
7. Windows Driver Kit 7.1（Windows驱动程序开发工具包7.1）
8. Windows 8.1 SDK（Windows 8.1软件开发工具包）
9. gzip
10. upx
11. 7zip
12. Wix3
13. Microsoft Visual Studio 2019（微软Visual Studio 2019）
14. Windows 10 SDK（Windows 10软件开发工具包）
15. Windows Driver Kit 1903（Windows驱动程序开发工具包1903）
16. Visual Studio构建工具

以下是操作步骤。点击任何链接可直接跳转到相关步骤：

- 安装Microsoft Visual Studio 2010
- 安装Microsoft Visual Studio 2010 Service Pack 1
- 安装NASM
- 安装YASM
- 安装Microsoft Visual C++ 1.52
- 安装Windows SDK 7.1
- 安装Windows Driver Kit 7.1
- 安装Windows 8.1 SDK
- 安装gzip
- 安装upx
- 安装7zip
- 安装Wix3
- 安装Microsoft Visual Studio 2019
- 安装Windows Driver Kit 2004
- 安装Visual Studio构建工具
- 下载VeraCrypt源代码文件
- 编译VeraCrypt的Win32/x64版本
- 编译VeraCrypt的ARM64版本
- 构建VeraCrypt可执行文件
- 导入证书
- 已知问题

安装Microsoft Visual Studio 2010

1. 访问以下微软网站，使用免费的微软账户登录：
   https://my.visualstudio.com/Downloads?q=Visual%20Studio%202010%20Professional&pgroup=
2. 请下载“Visual Studio Professional 2010”的（试用）版本
3. 双击下载的ISO文件进行挂载
4. 以管理员身份运行“autorun.exe”文件
5. 使用默认设置安装Microsoft Visual Studio 2010

Microsoft SQL Server 2008 Express Service Pack 1 (x64)的安装可能会失败，但这对于编译VeraCrypt不是必需的。
安装Microsoft Visual Studio 2010 Service Pack 1

注意：微软官方安装程序试图下载的内容已不再可用。因此，需要使用离线安装程序。

1. 访问互联网档案馆的网站，下载Microsoft Visual Studio 2010 Service Pack 1的ISO镜像：
   https://archive.org/details/vs-2010-sp-1dvd-1
2. 双击下载的ISO文件进行挂载
3. 以管理员身份运行“Setup.exe”文件
4. 使用默认设置安装Microsoft Visual Studio 2010 Service Pack 1

安装NASM

1. 在以下链接下载“nasm-2.08-installer.exe”：
   https://www.nasm.us/pub/nasm/releasebuilds/2.08/win32/
2. 以管理员身份运行该文件
3. 使用默认设置安装NASM
4. 将NASM添加到路径变量中。这将使该命令在命令行中全局可用。
   1. 打开文件资源管理器
   2. 在左侧文件树中，右键单击“此电脑”并选择“属性”
   3. 在右侧菜单中，点击“高级系统设置”
   4. 请点击“环境变量”
   5. 在系统变量区域内，请选择“Path”变量并点击“编辑...”
   6. 点击“新建”并添加以下值：

      C:\Program Files (x86)\nasm

   7. 点击“确定”关闭窗口
5. 要检查配置是否正常工作，请打开命令提示符并查看以下命令的输出：

   nasm

YASM的安装

1. 请创建以下文件夹：
   C:\Program Files\YASM
2. 请在以下链接下载“Win64 VS2010 .zip”文件：
   https://yasm.tortall.net/Download.html
3. 由于下载率较低或连接未加密，您的浏览器可能会提示该文件存在安全风险。不过，官方网站是该文件最可靠的来源，因此我们建议允许下载
4. 解压ZIP文件并将文件复制到“C:\Program Files\YASM”
5. 请在以下链接下载“Win64 .exe”文件：
   https://yasm.tortall.net/Download.html
6. 由于下载率较低或连接未加密，您的浏览器可能会提示该文件存在安全风险。不过，官方网站是该文件最可靠的来源，因此我们建议允许下载
7. 将文件重命名为“yasm.exe”并复制到“C:\Program Files\YASM”
8. 将YASM添加到路径变量中，并为YASM创建一个新的系统变量。这样可以使该命令在命令行中全局可用。
   1. 打开文件资源管理器
   2. 在左侧文件树中，右键单击“此电脑”并选择“属性”
   3. 在右侧菜单中，请点击“高级系统设置”
   4. 请点击“环境变量”
   5. 在系统变量区域内，请选择“Path”变量并点击“编辑...”
   6. 点击“新建”并添加以下值：

      C:\Program Files\YASM

   7. 点击“确定”关闭顶部窗口
   8. 在系统变量区域内，请点击“新建...”
   9. 使用以下值填写表单：

      变量名：YASMPATH
      变量值：C:\Program Files\YASM

   10. 点击“确定”关闭窗口
9. 要检查配置是否正常工作，请打开命令提示符并查看以下命令的输出：

   yasm

   以及

   vsyasm

Microsoft Visual C++ 1.52的安装

1. 可以通过付费的Microsoft MSDN订阅获取Visual C++ 1.52。如果您没有订阅，可以通过互联网档案馆下载ISO镜像：
   https://archive.org/details/ms-vc152
2. 创建文件夹“C:\MSVC15”
3. 挂载ISO文件并将“MSVC”文件夹的内容复制到“C:\MSVC15”
4. 为Microsoft Visual C++ 1.52创建一个系统变量
   1. 打开文件资源管理器
   2. 在左侧文件树中，右键单击“此电脑”并选择“属性”
   3. 在右侧菜单中，请点击“高级系统设置”
   4. 请点击“环境变量”
   5. 在系统变量区域内，请点击“新建...”
   6. 使用以下值填写表单：

      变量名：MSVC16_ROOT
      变量值：C:\MSVC15

   7. 点击“确定”关闭窗口

Windows SDK 7.1的安装

安装程序需要 .Net Framework 4（不是像 .Net Framework 4.8 这样的较新版本！）。由于Windows 10已经预装了较新版本，因此必须欺骗安装程序：

1. 点击开始按钮并搜索：“regedit.msc”。启动第一个搜索结果。
2. 导航到“HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\NET Framework Setup\NDP\v4\”
3. 更改“Client”文件夹的权限，以便您可以编辑键：
   1. 右键单击子文件夹“Client”并选择“权限...”
   2. 点击“高级”
   3. 将所有者更改为您的用户并点击“添加”
   4. 将主体设置为您的用户，选择“完全控制”并点击“确定”
   5. 在“Client”文件夹中记录“Version”条目的值
   6. 双击“Version”条目并将值更改为“4.0.30319”
4. 更改“Full”文件夹的权限，以便您可以编辑密钥：
   1. 右键单击子文件夹“Full”，然后选择“权限...”
   2. 点击“高级”
   3. 将所有者更改为您的用户，然后点击“添加”
   4. 将主体设置为您的用户，选择“完全控制”，然后点击“确定”
   5. 在“Full”文件夹中，记下“Version”条目的值。
   6. 双击“Version”条目，并将值更改为“4.0.30319”
5. 从以下链接下载 Windows SDK 7.1：
   https://www.microsoft.com/en-us/download/details.aspx?id=8279
6. 以管理员身份运行下载的文件，并使用默认设置安装应用程序。
7. 安装完成后，还原在注册表编辑器中所做的更改。
   注意： 可以通过搜索“NT Service\TrustedInstaller”来恢复所有者“TrustedInstaller”。

安装 Windows 驱动工具包 7.1

1. 请从以下链接下载 Windows 驱动工具包 7.1 的 ISO 文件：
   https://www.microsoft.com/en-us/download/details.aspx?id=11800
2. 双击下载的 ISO 文件进行挂载。
3. 以管理员身份运行“KitSetup.exe”文件。在安装过程中，选择安装所有功能。
   注意： 安装过程中可能会提示您安装 .NET Framework 3.5。在这种情况下，请点击“下载并安装此功能”。
4. 将驱动工具包安装到默认位置。

安装 Windows 8.1 SDK

1. 请从以下链接下载 Windows 8.1 SDK 的 ISO 文件：
   https://developer.microsoft.com/de-de/windows/downloads/sdk-archive/
2. 以管理员身份运行下载的文件，并使用默认设置安装 Windows 8.1 SDK。
3. 为 Windows 8.1 SDK 创建一个系统变量
   1. 打开文件资源管理器。
   2. 在左侧文件树中，右键单击“此电脑”，然后选择“属性”
   3. 在右侧菜单中，点击“高级系统设置”
   4. 点击“环境变量”
   5. 在系统变量区域，点击“新建...”
   6. 使用以下值填写表单：

      变量名：WSDK81
      变量值：C:\Program Files (x86)\Windows Kits\8.1\

   7. 点击“确定”关闭窗口。

安装 gzip

1. 请创建以下文件夹：
   C:\Program Files (x86)\gzip
2. 请从以下链接下载 gzip 版本：
   https://sourceforge.net/projects/gnuwin32/files/gzip/1.3.12-1/gzip-1.3.12-1-bin.zip/download?use-mirror=netix&download=
3. 将下载的 ZIP 文件内容复制到“C:\Program Files (x86)\gzip”。
4. 将 gzip 添加到路径变量中。这样可以使该命令在命令行中全局可用。
   1. 打开文件资源管理器。
   2. 在左侧文件树中，右键单击“此电脑”，然后选择“属性”
   3. 在右侧菜单中，点击“高级系统设置”
   4. 点击“环境变量”
   5. 在系统变量区域，选择“Path”变量，然后点击“编辑...”
   6. 点击“新建”，并添加以下值：

      C:\Program Files (x86)\gzip\bin

   7. 点击“确定”关闭窗口。
5. 要检查配置是否正常工作，请打开命令提示符，并查看以下命令的输出：

   gzip

安装 upx

1. 请创建以下文件夹：
   C:\Program Files (x86)\upx
2. 请从以下链接下载最新的 upx-X-XX-win64.zip 版本：
   https://github.com/upx/upx/releases/tag/v3.96
3. 将下载的 ZIP 文件内容复制到“C:\Program Files (x86)\upx”。
4. 将 gzip 添加到路径变量中。这样可以使该命令在命令行中全局可用。
   1. 打开文件资源管理器。
   2. 在左侧文件树中，右键单击“此电脑”，然后选择“属性”
   3. 在右侧菜单中，请点击“高级系统设置”
   4. 请点击“环境变量”
   5. 在系统变量区域内，请选择“Path”变量并点击“编辑...”
   6. 点击“新建”并添加以下值：

      C:\Program Files (x86)\upx

   7. 点击“确定”关闭窗口
5. 要检查配置是否正常工作，请打开命令提示符并查看以下命令的输出：

   upx

7-Zip 的安装

1. 请从以下链接下载最新版本的 7-Zip：
   https://www.7-zip.de/
2. 以管理员身份运行下载的文件，并使用默认设置安装 7-Zip

WiX 3 的安装

1. 请从以下链接下载 wix311.exe：
   https://github.com/wixtoolset/wix3/releases
2. 以管理员身份运行下载的文件，并使用默认设置安装 WiX 工具集

Microsoft Visual Studio 2019 的安装

1. 访问以下 Microsoft 网站，并用免费的 Microsoft 账户登录：
   https://my.visualstudio.com/Downloads?q=visual%20studio%202019%20Professional
2. 请下载最新的（试用版）“Visual Studio Professional 2019”
3. 以管理员身份运行下载的文件，并完成安装向导。
   选择以下工作负载进行安装：
   1. Desktop development with C++
   2. .NET desktop development
   选择以下单个组件进行安装：
   1. .NET
      1. .NET 6.0 Runtime
      2. .NET Core 3.1 Runtime (LTS)
      3. .NET Framework 4 targeting pack
      4. .NET Framework 4.5 targeting pack
      5. .NET Framework 4.5.1 targeting pack
      6. .NET Framework 4.5.2 targeting pack
      7. .NET Framework 4.6 targeting pack
      8. .NET Framework 4.6.1 targeting pack
      9. .NET Framework 4.7.2 targeting pack
      10. .NET Framework 4.8 SDK
      11. .NET Framework 4.8 targeting pack
      12. .NET SDK
      13. ML.NET Model Builder (Preview)
   2. 云、数据库和服务器
      1. CLR data types for SQL Server
      2. 连接和发布工具
   3. 代码工具
      1. NuGet package manager
      2. Text Template Transformation
   4. 编译器、构建工具和运行时
      1. .NET Compiler Platform SDK
      2. C# and Visual Basic Roslyn compilers
      3. C++ 2019 Redistributable Update
      4. C++ CMake tools for Windows
      5. C++/CLI support for v142 build tools (Latest)
      6. MSBuild
      7. MSVC v142 - VS 2019 C++ ARM64 build tools (Latest)
      8. MSVC v142 - VS 2019 C++ ARM64 Spectre-mitigated libs (Latest)
      9. MSVC v142 - VS 2019 C++ x64/x86 build tools (Latest)
      10. MSVC v142 - VS 2019 C++ x64/x86 Spectre-mitigated libs (Latest)
   5. 调试和测试
      1. .NET profiling tools
      2. C++ AddressSanatizer
      3. C++ profiling tools
      4. Just-In-Time debugger
      5. Test Adapter for Boost.Test
      6. Test Adapter for Google Test
   6. 开发活动
      1. C# and Visual Basic
      2. C++ core features
      3. F# language support
      4. 智能代码助手（IntelliCode）
      5. JavaScript 和 TypeScript 语言支持
      6. 实时共享（Live Share）
   7. 模拟器
      无
   8. 游戏与图形
      1. DirectX 图形调试器和 GPU 性能分析器
   9. 软件开发工具包（SDK）、库和框架
      1. C++ ATL for latest v142 build tools (ARM64)
      2. C++ ATL for latest v142 build tools (x86 & x64)
      3. C++ ATL for latest v142 build tools with Spectre Mitigations (ARM64)
      4. C++ ATL for latest v142 build tools with Spectre Mitigations (x86 & x64)
      5. C++ MFC for latest v142 build tools (ARM64)
      6. C++ MFC for latest v142 build tools (x86 & x64)
      7. C++ MFC for latest v142 build tools with Spectre Mitigations (ARM64)
      8. C++ MFC for latest v142 build tools with Spectre Mitigations (x86 & x64)
      9. Entity Framework 6 tools
      10. TypeScript 4.3 SDK
      11. Windows 10 SDK (10.0.19041.0)
      12. Windows Universal C Runtime

Windows 驱动程序工具包 2004 版本的安装

1. 请在以下链接下载 Windows 驱动程序工具包（WDK）2004 版本：
   https://docs.microsoft.com/en-us/windows-hardware/drivers/other-wdk-downloads
2. 以管理员身份运行下载的文件，并使用默认设置安装 WDK。
3. 安装结束时，系统会询问您是否要“安装 Windows 驱动程序工具包 Visual Studio 扩展”。
   请确保在关闭对话框之前选择此选项。
4. 另一个安装程序将自动启动，并会检测到 Visual Studio Professional 2019 作为该扩展的可能目标。
   请选择它并继续进行安装。

Visual Studio 构建工具的安装

1. 访问以下 Microsoft 网站，并用免费的 Microsoft 账户登录：
   https://my.visualstudio.com/Downloads?q=visual%20studio%202019%20build%20tools
2. 请下载最新版本的“Visual Studio 2019 构建工具”
3. 以管理员身份运行下载的文件，并通过向导进行安装。选择以下单个组件进行安装：
   1. .NET
      无
   2. 云、数据库和服务器
      无
   3. 代码工具
      无
   4. 编译器、构建工具和运行时
      1. C++/CLI support for v142 build tools (Latest)
      2. MSVC v142 - VS 2019 C++ ARM64 build tools (Latest)
      3. MSVC v142 - VS 2019 C++ ARM64 Spectre-mitigated libs (Latest)
      4. MSVC v142 - VS 2019 C++ x64/x86 build tools (Latest)
      5. MSVC v142 - VS 2019 C++ x64/x86 Spectre-mitigated libs (Latest)
   5. 调试和测试
      无
   6. 开发活动
      无
   7. 软件开发工具包（SDK）、库和框架
      1. C++ ATL for latest v142 build tools (ARM64)
      2. C++ ATL for latest v142 build tools (x86 & x64)
      3. C++ ATL for latest v142 build tools with Spectre Mitigations (ARM64)
      4. C++ ATL for latest v142 build tools with Spectre Mitigations (x86 & x64)

下载VeraCrypt源代码文件

1. 访问VeraCrypt的Github仓库：
   https://github.com/veracrypt/VeraCrypt
2. 点击绿色的“Code”按钮并下载代码。
   你可以将仓库下载为zip文件，但也可以考虑使用git协议以便跟踪更改。

编译VeraCrypt的Win32/x64版本

1. 在Visual Studio 2010中打开文件“src/VeraCrypt.sln”
2. 选择“All|Win32”作为活动配置
3. 点击“Build -> Build Solution”
4. 编译过程应仅出现警告，而无错误。部分项目可能会被跳过。
5. 选择“All|x64”作为活动配置
6. 点击“Build -> Build Solution”
7. 编译过程应仅出现警告，而无错误。部分项目可能会被跳过。
   编译完成后，请关闭Visual Studio 2010

编译VeraCrypt的ARM64版本

1. 在Visual Studio 2019中打开文件“src/VeraCrypt_vs2019.sln”
2. 选择“All|ARM64”作为活动配置
3. 点击“Build -> Build Solution”
4. 编译过程应仅出现警告，而无错误。有一个项目可能会被跳过。
   编译完成后，请关闭Visual Studio 2019

构建VeraCrypt可执行文件

1. 以管理员身份打开命令行
2. 进入“src/Signing/”文件夹
3. 运行脚本“sign_test.bat”
4. 你将在“src/Release/Setup Files”文件夹中找到生成的可执行文件

导入证书

使用sign_test.bat脚本，你刚刚对VeraCrypt可执行文件进行了签名。这是必要的，因为Windows仅接受由签名证书颁发机构信任的驱动程序。
由于你没有使用官方的VeraCrypt签名证书来签署代码，而是使用了公共开发版本，因此你需要导入并信任所使用的证书。

1. 打开“src/Signing”文件夹
2. 通过双击以下证书，将它们导入到本地计算机证书存储中：
   - GlobalSign_R3Cross.cer
   - GlobalSign_SHA256_EV_CodeSigning_CA.cer
   - TestCertificates/idrix_codeSign.pfx
   - TestCertificates/idrix_Sha256CodeSign.pfx
   - TestCertificates/idrix_SHA256TestRootCA.crt
   - TestCertificates/idrix_TestRootCA.crt
   注意：如果提示输入密码，.pfx证书的密码为 idrix。

已知问题

- 此分发包已损坏
  在Windows 10或更高版本上，你可能会收到上述错误消息。为避免此问题，你需要：
  - 仔细检查颁发测试代码签名证书的根证书是否已安装在“本地计算机受信任的根证书颁发机构”存储中。
  - 计算测试代码签名证书的SHA512指纹，并相应地更新“src/Common/Dlgcode.c”文件中的gpbSha512CodeSignCertFingerprint数组。
  有关详细信息，请参阅 https://sourceforge.net/p/veracrypt/discussion/technical/thread/83d5a2d6e8/#db12。
  另一种方法是在VeraCrypt代码中禁用签名验证。此操作仅应在测试环境中使用，切勿用于生产环境：
  1. 打开“src/Common/Dlgcode.c”文件
  2. 查找“VerifyModuleSignature”函数
  3. 替换以下代码行：
     查找：

     if (!IsOSAtLeast (WIN_10))
     return TRUE;

     替换为：

     return TRUE;

  4. 再次编译VeraCrypt代码
- 自定义构建的VeraCrypt安装过程中驱动程序安装失败
  Windows会验证每个要安装的驱动程序的签名。
  出于安全原因，Windows仅允许由Microsoft签名的驱动程序加载。
  因此，在使用自定义构建时：
  - 如果你未修改VeraCrypt驱动程序源代码，则可以使用VeraCrypt源代码中包含的由Microsoft签名的驱动程序（位于“src\Release\Setup Files”下）。
  - 如果你进行了修改，你需要将Windows启动到“测试模式”。此模式允许Windows加载未由Microsoft签名的驱动程序。但是，即使在“测试模式”下，签名也有特定要求，并且由于以下原因仍可能会失败。
  “测试模式”下安装失败的潜在原因：
  1. 用于签名的证书不受Windows信任
     你可以通过检查可执行文件的属性来验证是否受影响：
     1. 右键单击VeraCrypt安装可执行文件：“src/Release/Setup Files/VeraCrypt Setup 1.XX.exe”
     2. 点击“属性”
     3. 转到顶部菜单“数字签名”。在这里，你会在签名列表中找到两个签名
     通过双击勾选这两个签名。如果标题显示“无法验证签名中的证书”，则相应的签名证书未正确导入。
     点击“查看证书”，然后点击“安装证书...”，将证书导入到本地计算机证书存储区。对于根证书，你可能需要选择“将所有证书放入下列存储区”，并选择“受信任的根证书颁发机构”存储区。
  2. 驱动程序在签名过程之后被修改。
     在这种情况下，请使用脚本“src/Signing/sign_test.bat”，用测试证书再次对你的代码进行签名