aurain
技术文摘
posts - 137,  comments - 268,  trackbacks - 0

TrueCrypt是一款开源的虚拟加密磁盘工具,目前最新版本是7.0a,本文以该版本源代码为基础,介绍了如何在VC2008下进行编译。

 

环境配置

1. Microsoft Visual Studio 2008 SP1 (VC++ 2008) 

2. Microsoft Visual Studio VC++ 1.52

3. NASM version 2.07 compiled on Jul 19 2009

4. gzip 1.2.4 Win32 (02 Dec 97) 

5. PKCS11头文件

6. Windows Driver Develop Kit 7600.16385.1

7. TrueCrypt 7.0a Source.zip

 

准备步骤

1. Microsoft Visual Studio 2008 SP1 (VC++ 2008) ,这个是必需的了

2. 安装Microsoft Visual Studio VC++ 1.52,(这里为了方便管理编译TrueCrypt所需要的lib,我们可以在c盘建立一个目录,就命名为TrueCrypt)把MSVC++ 1.52安装在C:\TrueCrypt\MSVC\

3. 下载NASM,解压缩到C:\TrueCrypt\ NASM\

4. 下载gzip,解压缩到C:\TrueCrypt\ gzip\

5. 下载PKCS11头文件,解压缩到C:\TrueCrypt\PKCS11_INC\

6. 下载WDK7600.16385.1(这个是目前最新的,更新消息参考微软官网),安装到E:\WinDDK\7600.16385.1\(这个目录是我这边这么设置的,在下面环境变量设置需要注意)

7. 下载TrueCrypt 7.0a源代码(http://www.truecrypt.org/downloads2

 

环境变量设置

右键我的电脑——属性——高级——环境变量,添加下面几个系统变量:

1. 变量名MSVC16_ROOT,变量值C:\TrueCrypt\MSVC

2. 变量名PKCS11_INC,变量值C:\TrueCrypt\PKCS11_INC

3. 变量名WINDDK_ROOT,变量值E:\WinDDK\7600.16385.1

4. 修改系统Path,在末尾增加C:\TrueCrypt\NASM;C:\TrueCrypt\gzip

环境变量设置完毕后需要重启电脑

 

源代码修改

1. 修改C:\TrueCrypt\PKCS11_INC\ pkcs11.h,添加

#define CKR_NEW_PIN_MODE 0x000001B0

#define CKR_NEXT_OTP                    0x000001B1

可以直接添加在#define __PASTE(x,y)      x##y后面一行

2. 修改TrueCrypt 7.0a 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

后面一行即可。

 

到此为止,所有配置均设置完毕,打开TrueCrypt.sln解决方案,Build Solution就可以在Debug目录生成Setup Files目录,其下至少可以看到TrueCrypt.exetruecrypt.systruecrypt-x64.sys这个三个文件了。

我这边已经有配置好了的所需的lib和源代码,由于比较大,cppblog不能上传大附件,如有配置不成功的,可以Email我(zhangqiushui@qq.com)。

posted on 2010-11-01 19:12 阅读(6282) 评论(29)  编辑 收藏 引用 所属分类: windows驱动

FeedBack:
# re: 如何编译TrueCrypt 7.0a源码[未登录]
2010-11-03 09:51 | by
我以前弄过一个简化版的可以mount和unmount磁盘的库。
  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2010-11-30 00:08 | hi
"下载gzip,解压缩到C:\TrueCrypt\ NASM\ gzip\" should be: "下载gzip,解压缩到C:\TrueCrypt\ gzip\"  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2010-11-30 14:33 |
@hi
谢谢提醒~  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2010-12-30 11:06 | yunlei
我是菜鸟,刚开始学习TRUECRYPT,按照您的步骤一项一项的做了,可还是编译不了,是什么原因呢?还请指教,谢谢!  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2010-12-30 14:52 |
@yunlei
你需要把问题说一下吧,不然这样我不好怎么说了。。。  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-04-13 22:48 | cqcchw
请教一下,按照这个过程编译后,得到了TrueCrypt Format.exe,TrueCrypt.ext,TrueCrypt Setup.exe
却没有TrueCrypt.sys和truecrypt-x64.sys
这个是怎么回事呢
  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-04-14 14:09 | aurain
@cqcchw
那编译的时候有提示什么错误吗?你有安装WDK吧?  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-04-21 21:15 | yespgg
你下的VC 1.52在哪里下的啊?我的不对啊,一堆错误
-----------------------------------------------------------------
错误 1 fatal error L4051: E:\TrueCrypt7.0aDependent\Microsoft.lib : cannot find library Boot Boot
错误 2 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\link.exe”: 返回代码“0x2” NMAKE Boot
错误 3 fatal error L4051: E:\TrueCrypt7.0aDependent\Microsoft.lib : cannot find library Boot Boot
错误 4 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\link.exe”: 返回代码“0x2” NMAKE Boot
错误 5 fatal error L4051: E:\TrueCrypt7.0aDependent\Microsoft.lib : cannot find library Boot Boot
错误 6 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\link.exe”: 返回代码“0x2” NMAKE Boot
错误 7 fatal error L4051: E:\TrueCrypt7.0aDependent\Microsoft.lib : cannot find library Boot Boot
错误 8 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\link.exe”: 返回代码“0x2” NMAKE Boot
错误 9 fatal error L4051: E:\TrueCrypt7.0aDependent\Microsoft.lib : cannot find library Boot Boot
错误 10 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\link.exe”: 返回代码“0x2” NMAKE Boot
错误 11 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\cl.exe”: 返回代码“0x2” NMAKE Boot
错误 12 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\cl.exe”: 返回代码“0x2” NMAKE Boot
错误 13 fatal error U1077: “E:\TrueCrypt7.0aDependent\Microsoft+Visual+C++1.52\bin\cl.exe”: 返回代码“0x2” NMAKE Boot
错误 14 error PRJ0019: 某个工具从以下位置返回了错误代码: "正在执行生成文件项目操作" Boot Boot
  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-04-21 21:16 |
@yespgg
留联系方式,我发给你  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-04-21 21:19 | yespgg
@水
yespgg@163.com
谢谢啦  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-02 08:25 | VL
很麻烦啊,老大,直接把你编译好的,发来用用吧。
vanlin (AT) 139 dot com

谢谢  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-05 17:16 | def
你好 不知道能否发送给我已经编译好的文件
我主要是进行调试 尤其需要符号文件和SYS文件 谢谢
stecdeng(AT) 126 dot com
  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-05 23:27 | def
已经收到 非常感谢   回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-14 16:02 | def
你好 现在除了驱动文件 我决定自己尝试编译 用户层EXE 。
请问一下
4. 修改系统Path,在末尾增加C:\TrueCrypt\NASM;C:\TrueCrypt\gzip

环境变量设置完毕后需要重启电脑

这个系统PATH 是什么 ? 谢谢

  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-14 16:04 |
@def
在“我的电脑”右键,高级那边可以看到
path就是指系统的环境变量,一系列路径的集合。  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-15 11:16 | def
你好 按照你的配置 我成功的编译出EXE
但是驱动还是不行
生成信息如下
1>------ 已启动全部重新生成: 项目: Driver, 配置: Debug Win32 ------
1>正在执行生成文件项目操作
1>------ Rebuilding truecrypt.sys: Debug x86 ------
1>Usage: "setenv <directory> [fre|chk] [64|x64] [hal] [WLH|WXP|WNET|W2K] [bscmake]"
1> By default, setenv.bat will set the environment variable NO_BROWSER_FILE.
1> Using the "bscmake" option will cause setenv.bat to not define this variable.
1> Example: setenv d:\ddk chk set checked environment
1> Example: setenv d:\ddk set free environment for Windows Vista (default)
1> Example: setenv d:\ddk fre WLH set free environment for Windows Vista (default)
1> Example: setenv d:\ddk fre 64 sets IA-64 bit free environment
1> Example: setenv d:\ddk fre x64 sets x64 bit free environment
1> Example: setenv d:\ddk fre x32-64 sets x64 bit free environment
1> Example: setenv d:\ddk fre WXP sets free build environment for Windows XP
1> Example: setenv d:\ddk hal sets free hal environment
1> Example: setenv d:\ddk fre hal Same
1>'build' 不是内部或外部命令,也不是可运行的程序
1>或批处理文件。
1>------ Rebuilding truecrypt.sys: Debug x64 ------
1>Usage: "setenv <directory> [fre|chk] [64|x64] [hal] [WLH|WXP|WNET|W2K] [bscmake]"
1> By default, setenv.bat will set the environment variable NO_BROWSER_FILE.
1> Using the "bscmake" option will cause setenv.bat to not define this variable.
1> Example: setenv d:\ddk chk set checked environment
1> Example: setenv d:\ddk set free environment for Windows Vista (default)
1> Example: setenv d:\ddk fre WLH set free environment for Windows Vista (default)
1> Example: setenv d:\ddk fre 64 sets IA-64 bit free environment
1> Example: setenv d:\ddk fre x64 sets x64 bit free environment
1> Example: setenv d:\ddk fre x32-64 sets x64 bit free environment
1> Example: setenv d:\ddk fre WXP sets free build environment for Windows XP
1> Example: setenv d:\ddk hal sets free hal environment
1> Example: setenv d:\ddk fre hal Same
1>'build' 不是内部或外部命令,也不是可运行的程序
1>或批处理文件。
1>生成日志保存在“file://g:\TrueCrypt7.0aSource\Driver\Debug\BuildLog.htm”
1>Driver - 0 个错误,0 个警告
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-15 22:02 |
@def
这个不是已经生成成功了吗?
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========   回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-16 11:06 | def
但是我搜索整个电脑都没找到SYS文件
而且这里提到的1>'build' 不是内部或外部命令,也不是可运行的程序
觉得可能是问题所在啊
7.0a代码下面的DRIVER文件夹 只有BuildDriver.cmd 没有BUILD  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码[未登录]
2011-09-16 15:44 |
@def
代码下的是完整的吗?  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-17 08:21 | def
@水
csdn下载频道下载的 7.0a  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-17 08:33 | def
官方的7.1 和我手头的6.2A都试过 编译驱动都是一样的而错误  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-18 20:21 |
@def
建议还是去官方下载,现在的版本已经是7.1版本了,我试了下,是可以编译通过的,按我上面介绍的方法。如果你不能下载,可以联系我发给你。  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-19 09:26 | def
谢谢了 7.1 我是官方下载的
效果一样EXE可以出来 但是SETUP的EXE执行有错误
SYS不能编译 错误也是一样
7.0 7.1 6.2A一样
我再看看 再次感谢  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码[未登录]
2011-09-19 19:00 |
@def
不客气,是不是你的WDK版本不对?我用的是7600.16385.1  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-20 09:52 | def
果然是wdk问题 我是两个版本装一起的
现在搞定了。
阅读TRUECRYPT是为了学习它在费管理员用户下运行。
而我做的虚拟磁盘在非管理员权限下无法读取访问设备信息,无法使用DefineDosDevice.
这才起了看TRUECRYPT的心思。

参考TRUECRYPT
驱动下给MOUNTMGR发送
IOCTL_MOUNTMGR_VOLUME_ARRIVAL_NOTIFICATION
IOCTL_MOUNTMGR_CREATE_POINT

卷中也相应实现了
IOCTL_MOUNTDEV_QUERY_DEVICE_NAME
IOCTL_MOUNTDEV_QUERY_UNIQUE_ID
IOCTL_MOUNTDEV_QUERY_SUGGESTED_LINK_NAME
然后返回用户层广播设备信息
结果是
注册表已经显示诸如 \DosDevices\G: \??\MyVolume0等
但是始终无法显示盘符

不知道博主有无心得??  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-09-21 20:09 |
@def
可以进一步交流交流,呵呵  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-10-10 19:27 | Fiona
编译时总是出现RC2135错误。。。。555 楼主帮帮忙  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2011-10-26 01:06 | xuezhi
我试了好久都没成功 麻烦能把编译过的发一份给我吗.
xuezhi83@gmail.com
谢谢  回复  更多评论
  
# re: 如何编译TrueCrypt 7.0a源码
2015-04-16 18:10 | xiaoyaya103
您好,请问现在还可以找您发一下源码么?  回复  更多评论
  

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理



<2008年6月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

常用链接

留言簿(17)

随笔分类(138)

随笔档案(137)

网络开发

最新随笔

搜索

  •  

积分与排名

  • 积分 - 488759
  • 排名 - 36

最新随笔

最新评论

阅读排行榜

评论排行榜