Как создать TrueCrypt в Windows? - программирование

Как создать TrueCrypt в Windows?

Я пытаюсь скомпилировать TrueCrypt. Я использую инструкции https://github.com/syglug/truecrypt.

Я установил три переменные окружения (pkcs, ddk, MSVC16_ROOT) и открыл проект в msvc2008. Это не было в инструкциях, но мне нужно было установить NASM, чтобы я установил его и поставил NASM в PATH. Теперь, когда я построю, я получу ниже. Он заканчивается, даже несмотря на то, что IDE имеет возможность отменить сборку, компилятор ничего не делает и система простаивает.

Crypto.lib существует после этого шага

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)

Это просто зависает. Он не использует какой-либо процессор, IDE, похоже, не знает, что он не прошел или остановился. При повторном запуске я получаю это

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.

У меня установлен msvc2012, поэтому я тоже попробовал. Я получаю те же проблемы

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

Когда я отменяю/строю снова, я получаю ниже

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>  

Что здесь не так? Как создать TrueCrypt? Я запускаю Windows 7 64bits

4b9b3361

Ответ 1

Я мог бы успешно построить все проекты из https://github.com/syglug/truecrypt. Я следовал главным образом инструкциям readme.txt. Поскольку инструкция недостаточно детальная, я описываю ниже все шаги, которые я сделал. Если у вас появятся дополнительные вопросы к некоторым шагам, я добавлю дополнительные сведения.

Я использовал Visual Studio 2008, установленную в Windows 7 X64. При необходимости я мог бы воспроизвести то же самое с Visual Studio 2010 или 2012.

  • Я загрузил из MSDN (у меня есть подписка) Visual С++ 1.52: en_vc152.exe. Он сам извлекает EXE файл. Чтобы удерживать Пути в основном короткие и не содержать пробелов в именах каталогов, я извлек MSVC15 непосредственно в C:\. Поэтому у меня были, например, старые двоичные файлы 16-битного компилятора VC в C:\MSVC15\BIN.
  • Я поместил все файлы, загруженные из ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-11/v2-20 в каталог C:\PKCS-11. Файл C:\PKCS-11\pkcs11.h, как и все зависимые файлы, будет находиться в одном каталоге C:\PKCS-11
  • Я загрузил текущую версию 2.10.05 NASM из http://www.nasm.us/pub/nasm/releasebuilds/2.10.05/. Я извлек nasm-2.10.05-win32.zip в директорию C:\nasm-2.10.05. Так что nasm.exe можно найти в C:\nasm-2.10.05.
  • Я загрузил Binaries Gzip для Windows, Я извлек gzip-1.3.12-1-bin.zip в C:\gzip-1.3.12-1-bin. Так что C:\gzip-1.3.12-1-bin\bin содержит gzip.exe.
  • Я уже установил Windows DDK в каталог C:\WinDDK\7600.16385.1 раньше.
  • Я загрузил truecrypt-master.zip из https://github.com/syglug/truecrypt. Я извлек его в директорию C:\truecrypt-master. Чтобы Crypto.vcproj можно было найти в каталоге C:\truecrypt-master\Crypto.

Поскольку мне не нравится изменять глобальные переменные среды, я создал следующий командный файл:

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"

В последней строке командного файла будет запущена Visual Studio 2008 (devenv.exe). Он наследует все переменные среды, установленные в CMD.EXE(родительский процесс, который запустил Visual Studio 2008).

Файл решения "TrueCrypt.sln", описанный в readme, не включен в источники, найденные в github. Поэтому я открыл каждый файл проекта, который я нашел в подкаталогах C:\truecrypt-master, и скомпилировал его. Это было Crypto.vcproj (от C:\truecrypt-master\Crypto), Boot.vcproj (от C:\truecrypt-master\Boot\Windows), Driver.vcproj (от C:\truecrypt-master\Driver), Format.vcproj (от C:\truecrypt-master\Format) и Mount.vcproj (от C:\truecrypt-master\Mount).

Я мог бы скомпилировать все проекты. Единственные небольшие проблемы были при построении Format.vcproj и Mount.sln. В подкаталогах существуют файлы Format.tlb и Mount.tlb. Поэтому я исправил строки, на которые ссылаются файлы TLB в C:\truecrypt-master\Format\Format.rc и C:\truecrypt-master\Mount\Mount.rc на

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

и

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

Я отправлю позже исправленные исправления в https://github.com/syglug/truecrypt в форме запроса Pull.

ОБНОВЛЕНО: нужно изменить в файле BuildDriver.cmd строку

set TC_BUILD_ARCH=x64 WNET

к

set TC_BUILD_ARCH=x64

чтобы иметь возможность создавать драйвер.

Кроме того, нужно строить строки, используя правильные шаблоны, такие как "$(SolutionDir)..\Crypto" и "$(SolutionDir)..\Common" (см. параметры nmake в Visual Studio). Если вы используете TrueCrypt.sln из C:\TrueCrypt7.1a, он не нужен.

ОБНОВЛЕНО 2. После компиляции проекта вы увидите в C:\TrueCrypt7.1a\Release\Setup Files или в C:\truecrypt-master\Release\Setup Files файлы

enter image description here

Файл TrueCrypt Setup.exe существует только в C:\TrueCrypt7.1a (скачан по ссылке www.truecrypt.org, который вы отправили в комментарии позже), Как я уже упоминал в комментарии, прежде чем вам нужно настроить Visual Studio 2008 на использование Windows SDK 7 вместо стандартного 6.0a, чтобы успешно скомпилировать проект установки.

Драйверы, которые будут скомпилированы, не подписываются с подписью Microsoft. Таким образом, драйверам не будет доверять Windows 7 по умолчанию. Чтобы убедиться, что драйвер работает, вы должны нажать F8 во время загрузки компьютера и отключить подпись драйвера:

enter image description here

После этого вы сможете выполнить TrueCrypt.exe (например, из C:\TrueCrypt7.1a\Release\Setup Files). Вы получите предупреждение

enter image description here

но TrueCrypt.exe будет работать, и вы увидите

enter image description here

Ответ 2

Похоже, вы изменили переменную среды PATH, а некоторые пути к папке содержат отметки кавычек ( "). Windows больше не нуждается в котировках, чтобы избежать путаницы с пробелами. Ошибка PRJ0002: Результат ошибки 255, возвращенный из" C:\Windows\SysWow64\cmd.exe", уходит после исправления.

Ответ 3

Для всех, кто застревает в этой проблеме PKEY_AppUserModel_ID: он работает, определяя следующее в Setup.c перед первой функцией():

EXTERN_C const PROPERTYKEY DECLSPEC_SELECTANY PKEY_AppUserModel_ID =
{ { 0x9F4C2855, 0x9F79, 0x4B39,
{ 0xA8, 0xD0, 0xE1, 0xD4, 0x2D, 0xE1, 0xD5, 0xF3, } }, 5 };

С уважением