相关配置
- Intel x86 Core 2 Duo
- Windows 7 Ultimate x86 version
- Windows Driver Develop Kit 7600.16385.0
- TrueCrypt 6.3a Source.zip
- Microsoft Visual Studio 2008 SP1 (VC++ 2008)
- Microsoft Visual Studio VC++ 1.52
- NASM version 2.07 compiled on Jul 19 2009
- gzip 1.2.4 Win32 (02 Dec 97)
- ......
配置TrueCrypt
- 下载MSVC++ 1.52,安装在C盘下:C:\MSVC
- 下载NASM,也安装在C盘下:C:\NASM
http://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/ - 下载GZIP,也安装在C盘下:C:\gzip
- 下载并安装WINDDK,http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx
我将它们安装在D盘,路径:D:\WinDDK - 设置系统变量((WIN7)控制面板\所有控制面板项\系统\高级系统设置\环境变量):系统变量中,新增:
变量1:MSVC16_ROOT 值:C:\MSVC
变量2:WINDDK_ROOT 值:D:\WinDDK\7600.16385.0
其中7600.16385.0为WinDDK的第二级目录名,同时也是版本号,7600是Windows7的发行版本号。
双击变量:PATH,在其值的末尾补上:C:\NASM;C:\gzip
目的是为了让我们可以直接在命令行实用nasm以及gzip作为命令行。 - 下载PKCS11,三个文件,右键另存为即可。
http://svn.openvpn.net/projects/openvpn/test/time/openvpn/pkcs11-headers/
将三个文件(pkcs11.h、pkcs11f.h、pkcs11t.h)拷贝到源码下的Common文件夹下,我的源码放在D盘根目录,三个源码我就放在“D:\TrueCrypt\Common”文件夹中。 - 编译,会发现有两个错误。
CKR_NEW_PIN_MODE和CKR_NEXT_OTP未定义,补充定义一下即可。
在d:\TrueCrypt\Common\pkcs11t.h文件里(请根据您自己的路径进行复制)
这里将它们设置为:
#define CKR_NEW_PIN_MODE 0x000001B0我的方法是找到实用它的语句附近的同类语句,找到相同的定义,在其下方添加。
#define CKR_NEXT_OTP 0x000001B1
比如:
TC_TOKEN_ERR (CKR_MUTEX_NOT_LOCKED)这三句话放在一起,后两句有问题,但第一句正常,则查找CKR_MUTEX_NOT_LOCKED的存放位置,在其下方添加如上两句,其中定义的值参考
TC_TOKEN_ERR (CKR_NEW_PIN_MODE)
TC_TOKEN_ERR (CKR_NEXT_OTP)
http://www.cryptsoft.com/pkcs11doc/STANDARD/include/v220/otp-pkcs11.h,这里的值只不过是一种错误码,只要它不重复,就可以了。 - 再编译,可能会遇到一些警告:
- nasm.exe正在停止,而因为没有正确执行,又导致“fatal error LNK1136: invalid or corrupt file”错误。
遇到这个可能是因为你的nasm正在试图编译ase_amdX64.asm文件,而nasm对64位的asm编译对你可能意义不大,起码对我而言是这样的,于是,我就将它转成编译x86体系架构的,也许是因为参数配置的问题,你可以尝试别的方案,如果有更好的话,请告诉我。
这里我搜索:x64、asm等关键字,修改d:\TrueCrypt\Crypto\Makefile.inc文件为下面这样即可:
行1 !if "$(TC_ARCH)" == "x86"其中,为了减少变化量,也利于以后恢复,第4-7行为注释,第8、9行我将非x86的情况也定义成x86的情况,这样无论如何下面第13行的语句都将执行以x86体系为结构的设置,而这样的设置通常是正确的。
行2 TC_OBJ_FORMAT = win32
行3 !else
行4 #TC_OBJ_FORMAT = win64
行5 #edit by gocool, if the x64 system need the nasm.exe use the x64 format parameters for executing.
行6 #abort the x64 system here for building.
行7 #2009/12/23
行8 TC_OBJ_FORMAT = win32
行9 TC_ARCH = x86
行10 !endif
行11
行12 "$(OBJ_PATH)\$(O)\Aes_$(TC_ARCH).obj": Aes_$(TC_ARCH).asm
行13 nasm.exe -Xvc -f $(TC_OBJ_FORMAT) -Ox -D DLL_EXPORT -o "$@" -l "$(OBJ_PATH)\$(O)\Aes_$(TC_ARCH).lst" Aes_$(TC_ARCH).asm - fatal error LNK1000: Internal error during IncrBuildImage
据说是Microsoft Visual Studio 2008的一个BUG。http://blog.csdn.net/just_one_two/archive/2009/10/05/4634391.aspx
听说有两种方法,一种是方法1,需要下载补丁,我没有尝试。第二种通过修改配置的方法我成功了,步骤如下:
方法:项目->属性->链接器->常规 下面的“启用增量链接”,将“是(/INCREMENTAL)”改为“否(/INCREMENTAL:NO)”。
不过这又引入了另外一个警告:3>FormatCom.obj : warning LNK4075: 忽略“/EDITANDCONTINUE”(由于“/INCREMENTAL:NO”规范)
选择项目,属性->配置属性->C/C++,修改“调试信息格式”为“程序数据库(/Zi)”即可。 - 警告:未找到下列环境变量
4>项目 : warning PRJ0018 : 未找到下列环境变量:由于项目属性里设置有附加包含目录“$(PKCS11_INC)”,因此编译的时候会在系统变量里寻找PKCS11_INC项目,如果找不到,则给出警告,因此,我们需要手动补充这个项。方法同步骤5,增加一个变量为PKCS11_INC,值:D:\TrueCrypt\Common,其中,值就是之前我们拷贝三个文件(pkcs11.h、pkcs11f.h、pkcs11t.h)的目录。
4>$(PKCS11_INC) - 如果不出意外的话,你可能还会得到一个使用了PKEY_AppUserModel_ID未定义的声明符的错误。这个是用于标识用户态应用程序的唯一标识。你可以在Setup.h文件中定义:
/*---region add by gc---*/其中,这个结构体是由GUID和PID共同组成的。
#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---*/
- nasm.exe正在停止,而因为没有正确执行,又导致“fatal error LNK1136: invalid or corrupt file”错误。
下载链接
TrueCrypt下载:http://www.sfr-fresh.com/windows/misc/TrueCrypt-6.2a-Source.zip:a/Boot/Windows/Makefile WinDDK下载:http://www.microsoft.com/whdc/DevTools/WDK/WDKpkg.mspx PKCS11下载:http://svn.openvpn.net/projects/openvpn/test/time/openvpn/pkcs11-headers/ GZip下载:http://www.gzip.org/ 或者 http://www.gzip.org/gz124src.zip Nasm下载:http://www.nasm.us/pub/nasm/releasebuilds/2.07/win32/ MSVC1.52下载:http://download.csdn.net/source/620960 (15.02MB)(似乎网上很多人都在找1.52(最后一个可以编译16bit程序的VC编译器),但官方网站上没有公开下载的链接,实在非常郁闷,我从MSDN订阅下载(收费的噢,杯具)则有67.6MB),如果大家实在找不到下载或者15.02MB的不可用,可以联系我。参考链接
- http://blog.csdn.net/skyremember/archive/2009/09/17/4562090.aspx
- http://blog.sina.com.cn/s/blog_4758691d0100d8mc.html
- http://lll332.blog.163.com/blog/static/1553692220093404635752/
- http://msdn.microsoft.com/en-us/library/aa373931%28VS.85%29.aspx
- http://hi.baidu.com/hhacker/blog/item/2fc5b3fb0b24132a4f4aea1d.html
- http://blog.csdn.net/just_one_two/archive/2009/10/05/4634391.aspx
- http://blog.csdn.net/liufei_learning/archive/2009/12/21/5047632.aspx
- http://msdn.microsoft.com/zh-cn/library/958x11bc%28VS.80%29.aspx
- http://bbs.xiakexing.com/cgi-bin/topic.cgi?forum=22&topic=498