转载请标明是引用于 http://blog.csdn.net/chenyujing1234
欢迎大家拍砖!
编译过程中用到的工具下载地址: http://download.csdn.net/detail/chenyujing1234/4448383(资源内容:PKCS11.7 + gzip.exe + asm.zip + MsVSVC++1.52.7z)
一、TrueCrypt简介
TrueCrypt,是一款免费开源的加密软件,同时支持Windows Vista,7/XP, Mac OS X, Linux 等操作系统。TrueCrypt不需要生成任何文件即可在硬盘上建立虚拟磁盘,
用户可以按照盘符进行访问,所有虚拟磁盘上的文件都被自动加密,需要通过密码来进行访问。
TrueCrypt 提供多种加密算法,包括:AES-256, Blowfish (448-bit key), CAST5, Serpent, Triple DES, and Twofish,其他特性还有支持FAT32和NTFS分区、隐藏卷标、热键启动等。
主要特性:
(1)所有加密都是以分区为基础的。
(2) 真加密,所有加密数据都是经过AES等加密算法的运算后的结果,无法破解(穷举法除外)。
(3)能创建加密的“虚拟磁盘文件”(类似虚拟光驱,大小可以自定义)
(4)加密单个分区或整个硬盘。
(5)加密Windows系统所在的分区(启动Windows前需要密码)
(6)加密过程自动、实时、透明(使用加密文件或分区前输入密码,载入后就可以像使用一个普通分区一样使用加密分区。)
(7)提供两级方案,以应对被强迫说出密码的情况(如抢劫)。
7、1 隐藏分区(覆盖式密码术,steganography)、隐藏操作系统
7、2 无法探测到TrueCrypt 加密分区(加密数据会被认为是随机数据)
(8)加密算法:AES-256、Serpent、Twofish。为取得更好加密效果,可以同时使用两种或三种加密算法。操作模式:XTS。
二、TrueCrypt的编译
从trucCrypt官网中获得源码: http://www.truecrypt.org/ , 现在最新版本是
我们以这个版本为例来介绍在VS2008下的编译方法。
用VS2008打开后,得到如下:
1、首先编译Boot工程
1、1 提示报错:
1>------ 已启动生成: 项目: Boot, 配置: Release Win32 ------
1>正在执行生成文件项目操作
1>makefile(13) : fatal error U1050: Environment variable MSVC16_ROOT must point to the installation directory of MS Visual C++ 1.5
1>Stop.
1>makefile(13) : fatal error U1050: Environment variable MSVC16_ROOT must point to the installation directory of MS Visual C++ 1.5
1>Stop.
查看makefile文件,是因为没有安装Visual C++ 1.5的原因。
解决方法:下载安装Ms-VC++ 1.52c,如果我安装在C:\MSVC下,那么就在系统环境变量中新建如下的变量。
1、2 再次编译还是出错:
1>------ 已启动生成: 项目: Boot, 配置: Release Win32 ------
1>正在执行生成文件项目操作
1>Aes_hw_cpu.asm
1>'nasm.exe' 不是内部或外部命令,也不是可运行的程序
1>或批处理文件。
1>NMAKE : fatal error U1077: “nasm.exe”: 返回代码“0x1”
1>Stop.
解决方法:
从网上下载nasm.exe,并放到VS2008的安装路径下。
1、3 再次编译又是出错:
1>------ 已启动生成: 项目: Boot, 配置: Release Win32 ------
1>正在执行生成文件项目操作
1>Aes_hw_cpu.asm
1>AesSmall_x86.asm
1>..\..\..\crypto\aestab.c
1>Linking...
1>'gzip.exe' 不是内部或外部命令,也不是可运行的程序
1>或批处理文件。
1>NMAKE : fatal error U1077: “gzip.exe”: 返回代码“0x1”
1>Stop.
解决方法:从网上下载gzip.exe,并放到VS2008 的安装路径下。
1、4 再次编译,成功了。
我们得到了
2、编译Crypto工程
由于在编译Boot工程时,我们解决了那么多路径,这里编译Crypto相当顺利,成功后得到了Crypto.lib。
3、编译Driver工程
3、1 下载WDK7600.16385.1 并安装
(可参考我的文章: Window XP驱动开发(二) 环境搭建(VS2008+WDK+DDKWzard)及示例)
3、2 提示下面的错误:
1>------ 已启动生成: 项目: Driver, 配置: Debug Win32 ------
1>正在执行生成文件项目操作
1>------ Building truecrypt.sys: Debug x86 ------
1>BuildDriver.cmd: error: MS Build does not support building of projects stored in a path containing spaces.
1>------ Building truecrypt.sys: Debug x64 ------
1>BuildDriver.cmd: error: MS Build does not support building of projects stored in a path containing spaces.
解决方法,把工程在没有空格的路径中。
3、3 再次编译成功了。
我们得到了truecrypt.sys
4、编译Format工程
4、1 提示如下错误:
2>------ 已启动生成: 项目: Format, 配置: Debug Win32 ------
2>正在编译...
2>Dlgcode.c
2>d:\truecrypt7.1asource\common\securitytoken.h(34) : fatal error C1083: 无法打开包括文件:“pkcs11.h”: No such file or directory
解决方法:
下载PKCS 11头文件,并把它的路径添加到Format工程下的C++包含路径下。(默认在原有的C++包含路径下有 $(PKCS11_INC),
所以我们也可以在系统环境变量中定义PKCS11_INC的值为PKCS 11的路径)
4、2 再次编译成功了
我们得到了 TrueCryptFormat.exe
5、编译Mount工程
出现的提示与4、1是一样的,解决方法也与4、1一样。
再次编译成功了。
6、编译Setup 工程
6、1 提示下面的错误
2>Setup.c
2>d:\truecrypt7.1asource\setup\setup.c(135) : error C2065: “PKEY_AppUserModel_ID”: 未声明的标识符
解决方法:
修改TrueCrypt 7.1a Source其中的Setup项目中的Setup.h文件,添加
/*---region add by gc---*/
#include "wtypes.h"
const PROPERTYKEY PKEY_AppUserModel_ID = {
{
(unsigned long)2009,/*unsigned long Data1;*/
(unsigned short)12,/*unsigned short Data2;*/
(unsigned short)23,/*unsigned short Data3;*/
0x44,0x55,0x55,0x55,0x55,0x55,0x55,0x55
},/*GUID fmtid;*/
(DWORD)PID_FIRST_USABLE /*DWORD pid;*/
};
/*---endregion---*/
添加在文件的开始处,即
#ifdef __cplusplus
extern "C" {
#endif
后面一行即可。
6、2 再次编译,成功了
^-^ 花了两个小时,至此我们把整个解决方案中的工程都编译通过了,庆祝一下吧。
在Debug目录下我们可以看到目标文件:
三、查看运行效果
运行目标目录下的Truecrypt.exe,在让防火墙允许的情况下运行,看到主界面了: