如何編譯TrueCrypt源碼
相關配置
- 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”錯誤。
下載鏈接
參考鏈接
- 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
posted on 2009-12-23 23:47 volnet 閱讀(5911) 評論(10) 編輯 收藏 引用 所屬分類: 知識庫(KnowledgeLibrary) 、C/C++