How do I build TrueCrypt on Windows?

user34537 picture user34537 · Nov 14, 2012 · Viewed 11.8k times · Source

I'm trying to compile TrueCrypt. I am using the instructions from https://github.com/syglug/truecrypt.

I set the 3 environment variables (pkcs,ddk,MSVC16_ROOT) and opened the project in msvc2008. This wasn't in the instructions but I needed NASM to be installed so I installed it and put NASM in the PATH. Now when I build I get the below. It juts ends even though the IDE has the cancel build selectable the compiler isn't doing anything and the system idles.

Crypto.lib does exist after this step

1>------ Build started: Project: Crypto, Configuration: Release Win32 ------
2>------ Build started: Project: Boot, Configuration: Release Win32 ------
3>------ Build started: Project: Driver, Configuration: Release Win32 ------
2>Performing Makefile project actions
3>Performing Makefile project actions
1>Performing Custom Build Step
3>------ Building truecrypt.sys: Release x86 ------
1>Aes_hw_cpu.asm 
2>Microsoft (R) C/C++ Optimizing Compiler Version 8.00c    
2>Copyright (c) Microsoft Corp 1984-1993. All rights reserved.
3>The syntax of the command is incorrect.
3>Project : error PRJ0002 : Error result 255 returned from 'C:\Windows\SysWow64\cmd.exe'.
3>Build log was saved at "file://c:\unzipped\tc\Driver\Release\BuildLog.htm"
3>Driver - 1 error(s), 0 warning(s)
1>Performing Custom Build Step
1>Aes_x86.asm 
1>Compiling...
1>Whirlpool.c
1>Twofish.c
1>Sha2.c
1>Sha1.c
1>Serpent.c
1>Rmd160.c
1>Des.c
1>Cast.c
1>Blowfish.c
1>Aestab.c
1>Aeskey.c
1>Generating Code...
1>Creating library...
1>Build log was saved at "file://c:\unzipped\tc\Crypto\Release\BuildLog.htm"
1>Crypto - 0 error(s), 0 warning(s)

It just hangs. It isn't using any CPU the IDE doesn't seem to know it failed or stopped. When running again I get this

1>------ Build started: Project: Boot, Configuration: Release Win32 ------
2>------ Build started: Project: Driver, Configuration: Release Win32 ------
1>Performing Makefile project actions
2>Performing Makefile project actions
2>------ Building truecrypt.sys: Release x86 ------
1>Microsoft (R) C/C++ Optimizing Compiler Version 8.00c    
1>Copyright (c) Microsoft Corp 1984-1993. All rights reserved.
2>The syntax of the command is incorrect.

I have msvc2012 installed so I tried it as well. I get the same problems

1>------ Build started: Project: Crypto, Configuration: Release Win32 ------
2>------ Build started: Project: Boot, Configuration: Release Win32 ------
3>------ Build started: Project: Driver, Configuration: Release Win32 ------
1>  Performing Custom Build Tools
1>  Aes_hw_cpu.asm 
3>  ------ Building truecrypt.sys: Release x86 ------
2>  Microsoft (R) C/C++ Optimizing Compiler Version 8.00c    
2>  Copyright (c) Microsoft Corp 1984-1993. All rights reserved.
2>  
3>  The syntax of the command is incorrect.
3>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: The command "echo ------ Building truecrypt.sys: Release x86 ------
3>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: cmd.exe /c BuildDriver.cmd -build -release -x86 "C:\unzipped\tc\\Common" "C:\unzipped\tc\\Crypto" "C:\unzipped\tc\Driver\"
3>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: if errorlevel 1 exit %errorlevel%
3>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: echo.
3>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: echo ------ Building truecrypt.sys: Release x64 ------
3>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: BuildDriver.cmd -build -release -x64 "C:\unzipped\tc\\Common" "C:\unzipped\tc\\Crypto" "C:\unzipped\tc\Driver\"" exited with code 255.
1>  Performing Custom Build Tools
1>  Aes_x86.asm 
1>  Aeskey.c
1>  Aestab.c
1>  Blowfish.c
1>  Cast.c
1>  Des.c
1>  Rmd160.c
1>  Serpent.c
1>  Sha1.c
1>  Sha2.c
1>  Twofish.c
1>  Whirlpool.c
1>  Generating Code...
1>  Crypto.vcxproj -> C:\unzipped\tc\Crypto\Release\Crypto.lib

When I cancel/build again I get the below

1>------ Build started: Project: Boot, Configuration: Release Win32 ------
2>------ Build started: Project: Driver, Configuration: Release Win32 ------
2>  ------ Building truecrypt.sys: Release x86 ------
2>  The syntax of the command is incorrect.
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: The command "echo ------ Building truecrypt.sys: Release x86 ------
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: cmd.exe /c BuildDriver.cmd -build -release -x86 "C:\unzipped\tc\\Common" "C:\unzipped\tc\\Crypto" "C:\unzipped\tc\Driver\"
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: if errorlevel 1 exit %errorlevel%
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: echo.
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: echo ------ Building truecrypt.sys: Release x64 ------
2>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.MakeFile.Targets(38,5): error MSB3073: BuildDriver.cmd -build -release -x64 "C:\unzipped\tc\\Common" "C:\unzipped\tc\\Crypto" "C:\unzipped\tc\Driver\"" exited with code 255.
1>  Microsoft (R) C/C++ Optimizing Compiler Version 8.00c    
1>  Copyright (c) Microsoft Corp 1984-1993. All rights reserved.
1>  

What's wrong here? How do I build TrueCrypt? I'm running Windows 7 64bits

Answer

Oleg picture Oleg · Nov 16, 2012

I could successfully build all projects from https://github.com/syglug/truecrypt. I followed mostly the instructions from readme.txt. Because the instruction are not detailed enough I describe below all steps which I did. If you will have some additional questions to some steps I'll include additional details.

I used Visual Studio 2008 installed on Windows 7 X64. If needed I could reproduce the same with Visual Studio 2010 or 2012.

  1. I downloaded from MSDN (I have subscription) Visual C++ 1.52: en_vc152.exe. It's self extracted EXE file. To hold Paths mostly short and have no spaces in the directory names I extracted MSVC15 directly in C:\. So I had for example old binaries of 16-bit VC compiler in C:\MSVC15\BIN.
  2. I placed all files downloaded from ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20 in C:\PKCS-11 directory. The file C:\PKCS-11\pkcs11.h like all dependent files will be in the same directory C:\PKCS-11
  3. I downloaded the current version 2.10.05 of NASM from http://www.nasm.us/pub/nasm/releasebuilds/2.10.05/. I extracted nasm-2.10.05-win32.zip in C:\nasm-2.10.05 directory. So that nasm.exe could be found in C:\nasm-2.10.05.
  4. I downloaded Binaries of Gzip for Windows. I extracted gzip-1.3.12-1-bin.zip to C:\gzip-1.3.12-1-bin. So that C:\gzip-1.3.12-1-bin\bin contains gzip.exe.
  5. I had already installed Windows DDK in directory C:\WinDDK\7600.16385.1 before.
  6. I downloaded truecrypt-master.zip from https://github.com/syglug/truecrypt. I extracted it in C:\truecrypt-master directory. So that Crypto.vcproj can be found in C:\truecrypt-master\Crypto directory.

Because I don't like to modify the global environment variables I created the following batch file:

SET MSVC16_ROOT=C:\MSVC15
SET PKCS11_INC=C:\PKCS-11
PATH=C:\nasm-2.10.05;C:\gzip-1.3.12-1-bin\bin;%PATH%
"C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe"

In the last line of the batch file Visual Studio 2008 will be started (devenv.exe). It inherits all environment variables set in CMD.EXE (the parent process which started Visual Studio 2008).

The solution file 'TrueCrypt.sln' described in the readme is not included in the sources found on github. So I opened every Project file which I found in subdirectories of C:\truecrypt-master and compiled it. It was Crypto.vcproj (from C:\truecrypt-master\Crypto), Boot.vcproj (from C:\truecrypt-master\Boot\Windows), Driver.vcproj (from C:\truecrypt-master\Driver), Format.vcproj (from C:\truecrypt-master\Format) and Mount.vcproj (from C:\truecrypt-master\Mount).

I could successfully compile all the projects. The only small problems were during building of Format.vcproj and Mount.sln. The files Format.tlb and Mount.tlb exists in subdirectories. So I fixed the lines where TLB files are referenced in C:\truecrypt-master\Format\Format.rc and C:\truecrypt-master\Mount\Mount.rc to

IDR_FORMAT_TLB          TYPELIB                 ".\\Format\\Format.tlb"

and

IDR_MOUNT_TLB           TYPELIB                 ".\\Mount\\Mount.tlb"

I'll post later the corresponded fixes to https://github.com/syglug/truecrypt in form of Pull Request.

UPDATED: One have to change in the file BuildDriver.cmd the line

set TC_BUILD_ARCH=x64 WNET

to

set TC_BUILD_ARCH=x64

to be able to build Driver.

Additionally one should build lines uses correct pathes like "$(SolutionDir)..\Crypto" and "$(SolutionDir)..\Common" (see nmake options in Visual Studio). If one use TrueCrypt.sln from C:\TrueCrypt7.1a it's not needed.

UPDATED 2: After you compiled the project you will see in C:\TrueCrypt7.1a\Release\Setup Files or in C:\truecrypt-master\Release\Setup Files the files

enter image description here

The file TrueCrypt Setup.exe exists only in C:\TrueCrypt7.1a (downloaded from the link www.truecrypt.org which you posted in the comment later). As I mentioned in the comment before you need configure Visual Studio 2008 to use Windows SDK 7 instead of default 6.0a to be able successfully to compile Setup project.

The drivers which will be compiled are not digitaly signed with Microsoft signature. So the drivers will be not trusted by Windows 7 by default. So to verify that the driver work you have to press F8 during boot of the computer and disable driver signature:

enter image description here

After that you will be able to execute TrueCrypt.exe (from C:\TrueCrypt7.1a\Release\Setup Files directory for example). You will get warning

enter image description here

but the TrueCrypt.exe will do work and you will see

enter image description here