linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
阅读:5658回复:21

TrueCrypt 开源软件安装程序及源码, 欢迎下载研究

楼主#
更多 发布于:2007-06-22 15:05
源码工程组织的非常不错,  有很多值得借鉴的地方.
附件名称/大小 下载次数 最后更新
truecrypt-4.3a.zip (1531KB)  675 2007-06-22 15:05

最新喜欢:

yeaipingyeaipi... hetaooshetaoo...
在孤独和无助中缓慢前行...
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-06-22 15:09
怎么感觉每次只能上传一个附件
附件名称/大小 下载次数 最后更新
truecrypt-4.3a-source-code.zip (1154KB)  540 2007-06-22 15:09
在孤独和无助中缓慢前行...
cyliu
论坛版主
论坛版主
  • 注册日期2003-06-13
  • 最后登录2014-04-11
  • 粉丝5
  • 关注0
  • 积分1238分
  • 威望2531点
  • 贡献值0点
  • 好评度577点
  • 原创分14分
  • 专家分10分
板凳#
发布于:2007-06-22 16:30
可能都研究透了。不过新版和以前的实现有了相对大的改动。
走走看看开源好 Solaris vs Linux
ceabie
驱动牛犊
驱动牛犊
  • 注册日期2006-08-23
  • 最后登录2010-07-21
  • 粉丝0
  • 关注0
  • 积分599分
  • 威望140点
  • 贡献值0点
  • 好评度59点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-06-22 17:16
先取取经
XeChini
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2007-06-22 17:31
这里的读写方法非常值得借鉴,可以实现加密标志置于文件头和文件尾。
在孤独和无助中缓慢前行...
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
5楼#
发布于:2007-06-23 16:14
不错,看看
lsxredrain
驱动中牛
驱动中牛
  • 注册日期2006-08-31
  • 最后登录2008-10-18
  • 粉丝1
  • 关注0
  • 积分540分
  • 威望421点
  • 贡献值1点
  • 好评度420点
  • 原创分4分
  • 专家分0分
6楼#
发布于:2007-06-23 16:23
NTSTATUS
TCReadWrite (PDEVICE_OBJECT DeviceObject, PEXTENSION Extension, PIRP Irp)
{
    PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation (Irp);
    PUCHAR currentAddress;
    PUCHAR tmpBuffer;
    NTSTATUS ntStatus;
    BOOL lowerPriority = (OsMajorVersion >= 6);

#if EXTRA_INFO
    Dump ("USER BUFFER IS 0x%08x MDL ADDRESS IS 0x%08x\n", Irp->UserBuffer, Irp->MdlAddress);
    Dump ("Irp->Tail.Overlay.OriginalFileObject = 0x%08x\n", Irp->Tail.Overlay.OriginalFileObject);
    Dump ("irpSp->FileObject = 0x%08x\n", irpSp->FileObject);

    if (Irp->Tail.Overlay.OriginalFileObject != NULL)
    {
        if (Irp->Tail.Overlay.OriginalFileObject->FileName.Length != 0)
            Dump ("Irp->Tail.Overlay.OriginalFileObject = %ls\n", Irp->Tail.Overlay.OriginalFileObject->FileName.Buffer);
        else
            Dump ("Irp->Tail.Overlay.OriginalFileObject = %ls\n", WIDE ("null value"));

    }

    if (irpSp->FileObject != NULL)
    {
        if (irpSp->FileObject->FileName.Length != 0)
            Dump ("irpSp->FileObject = %ls\n", irpSp->FileObject->FileName.Buffer);
        else
            Dump ("irpSp->FileObject = %ls\n", WIDE ("null value"));

    }
#endif

    currentAddress = (PUCHAR) MmGetSystemAddressForMdlSafe (Irp->MdlAddress, HighPagePriority);
    if (currentAddress == NULL)
        return COMPLETE_IRP (DeviceObject, Irp, STATUS_INSUFFICIENT_RESOURCES, 0);

    if (irpSp->MajorFunction == IRP_MJ_READ)
    {
        LARGE_INTEGER readOffset;

        readOffset.QuadPart = irpSp->Parameters.Read.ByteOffset.QuadPart;

        if (irpSp->Parameters.Read.Length == 0
            || (irpSp->Parameters.Read.Length & (SECTOR_SIZE - 1))
            || readOffset.QuadPart + irpSp->Parameters.Read.Length > Extension->DiskLength)
        {
            return COMPLETE_IRP (DeviceObject, Irp, STATUS_INVALID_PARAMETER, 0);
        }

        if (Extension->cryptoInfo->hiddenVolume)
            readOffset.QuadPart += Extension->cryptoInfo->hiddenVolumeOffset;
        else
            readOffset.QuadPart += HEADER_SIZE;  

        tmpBuffer = TCalloc (irpSp->Parameters.Read.Length);
        if (tmpBuffer == NULL)
            return COMPLETE_IRP (DeviceObject, Irp, STATUS_INSUFFICIENT_RESOURCES, 0);

        ntStatus = ZwReadFile (Extension->hDeviceFile,
            NULL,
            NULL,
            NULL,
            &Irp->IoStatus,
            tmpBuffer,
            irpSp->Parameters.Read.Length,
            &readOffset,
            NULL);

        Irp->IoStatus.Status = ntStatus;

        if (NT_SUCCESS(ntStatus))
        {
            Extension->TotalBytesRead += irpSp->Parameters.Read.Length;

            memcpy (currentAddress, tmpBuffer, irpSp->Parameters.Read.Length);

            if (lowerPriority)
                KeSetPriorityThread (KeGetCurrentThread (), LOW_REALTIME_PRIORITY - TC_PRIORITY_DECREASE);

            DecryptSectors ((ULONG *) currentAddress,
                readOffset.QuadPart / SECTOR_SIZE,
                irpSp->Parameters.Read.Length / SECTOR_SIZE,
                Extension->cryptoInfo);

            if (lowerPriority)
                KeSetPriorityThread (KeGetCurrentThread (), LOW_REALTIME_PRIORITY);
        }

        TCfree (tmpBuffer);
    }
    else if (irpSp->MajorFunction == IRP_MJ_WRITE)
    {
        LARGE_INTEGER writeOffset;

        if (Extension->bReadOnly)
            return COMPLETE_IRP (DeviceObject, Irp, STATUS_MEDIA_WRITE_PROTECTED, 0);

        writeOffset.QuadPart = irpSp->Parameters.Write.ByteOffset.QuadPart;

        if (irpSp->Parameters.Write.Length == 0
            || (irpSp->Parameters.Write.Length & (SECTOR_SIZE - 1))
            || writeOffset.QuadPart + irpSp->Parameters.Write.Length > Extension->DiskLength)
        {
            return COMPLETE_IRP (DeviceObject, Irp, STATUS_INVALID_PARAMETER, 0);
        }

        // Hidden volume protection
        if (Extension->cryptoInfo->bProtectHiddenVolume)
        {
            // If there has already been a write operation denied in order to protect the
            // hidden volume (since the volume mount time)
            if (Extension->cryptoInfo->bHiddenVolProtectionAction)    
            {
                // Do not allow writing to this volume anymore. This is to fake a complete volume
                // or system failure (otherwise certain kinds of inconsistency within the file
                // system could indicate that this volume has used hidden volume protection).
                return COMPLETE_IRP (DeviceObject, Irp, STATUS_INVALID_PARAMETER, 0);
            }

            // Verify that no byte is going to be written to the hidden volume area
            if (RegionsOverlap ((unsigned __int64) irpSp->Parameters.Write.ByteOffset.QuadPart + HEADER_SIZE,
                                (unsigned __int64) irpSp->Parameters.Write.ByteOffset.QuadPart + HEADER_SIZE + irpSp->Parameters.Write.Length - 1,
                                Extension->cryptoInfo->hiddenVolumeOffset,
                                (unsigned __int64) Extension->DiskLength + HEADER_SIZE - (HIDDEN_VOL_HEADER_OFFSET - HEADER_SIZE) - 1))
            {
                Extension->cryptoInfo->bHiddenVolProtectionAction = TRUE;

                // Deny this write operation to prevent the hidden volume from being overwritten
                return COMPLETE_IRP (DeviceObject, Irp, STATUS_INVALID_PARAMETER, 0);
            }
        }

        if (Extension->cryptoInfo->hiddenVolume)
            writeOffset.QuadPart += Extension->cryptoInfo->hiddenVolumeOffset;
        else
            writeOffset.QuadPart += HEADER_SIZE;

        tmpBuffer = TCalloc (irpSp->Parameters.Write.Length);
        if (tmpBuffer == NULL)
            return COMPLETE_IRP (DeviceObject, Irp, STATUS_INSUFFICIENT_RESOURCES, 0);

        memcpy (tmpBuffer, currentAddress, irpSp->Parameters.Write.Length);

        if (lowerPriority)
             KeSetPriorityThread (KeGetCurrentThread (), LOW_REALTIME_PRIORITY - TC_PRIORITY_DECREASE);

        EncryptSectors ((ULONG *) tmpBuffer,
            writeOffset.QuadPart / SECTOR_SIZE,
            irpSp->Parameters.Write.Length / SECTOR_SIZE,
            Extension->cryptoInfo);
        
        if (lowerPriority)
             KeSetPriorityThread (KeGetCurrentThread (), LOW_REALTIME_PRIORITY);

        ntStatus = ZwWriteFile (Extension->hDeviceFile,
            NULL,
            NULL,
            NULL,
            &Irp->IoStatus,
            tmpBuffer,
            irpSp->Parameters.Write.Length,
            &writeOffset,
            NULL);

        Irp->IoStatus.Status = ntStatus;

        if (NT_SUCCESS(ntStatus))
            Extension->TotalBytesWritten += irpSp->Parameters.Write.Length;

        TCfree (tmpBuffer);
    }
    else
        return COMPLETE_IRP (DeviceObject, Irp, STATUS_INVALID_PARAMETER, 0);

    IoCompleteRequest (Irp, NT_SUCCESS(ntStatus) ? IO_DISK_INCREMENT : IO_NO_INCREMENT);
    return ntStatus;
}
chrysanth
驱动牛犊
驱动牛犊
  • 注册日期2007-05-02
  • 最后登录2010-02-02
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望129点
  • 贡献值0点
  • 好评度61点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-06-23 20:15
如果编译
linuxyf
驱动小牛
驱动小牛
  • 注册日期2007-04-03
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望162点
  • 贡献值0点
  • 好评度161点
  • 原创分1分
  • 专家分0分
8楼#
发布于:2007-06-23 22:40
楼上的,你看一下readme,如何编译介绍的很详细。
在孤独和无助中缓慢前行...
easydriver
驱动牛犊
驱动牛犊
  • 注册日期2007-04-01
  • 最后登录2008-09-23
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望18点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2007-06-25 21:07
如何像Truecrypt一样管理自己的代码?如何和.net结合?感觉非常方便
strpic
驱动小牛
驱动小牛
  • 注册日期2006-11-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望238点
  • 贡献值0点
  • 好评度156点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2007-06-26 08:24
工程组织的不错
easydriver
驱动牛犊
驱动牛犊
  • 注册日期2007-04-01
  • 最后登录2008-09-23
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望18点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2007-06-28 08:07
刚刚开始学习Truecrypt,我想问一下不同项目之间如何协同工作,Driver项目包含了Crypto.h,而这个文件在Common中,我自己包含的时候就出错,这是什么原因?
easydriver
驱动牛犊
驱动牛犊
  • 注册日期2007-04-01
  • 最后登录2008-09-23
  • 粉丝0
  • 关注0
  • 积分22分
  • 威望18点
  • 贡献值0点
  • 好评度15点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2007-06-28 08:13
如何像Truecrypt一样使用vs2005的编译器呢? 如何创建这种项目,我没有找到能自己写makefile的方法,哪位能提示一下?
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2007-06-29 07:55
又一个版本的filedisk
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
baiytao
驱动牛犊
驱动牛犊
  • 注册日期2008-08-19
  • 最后登录2012-08-05
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2008-08-20 14:48
如何编译它呢?
baiytao
驱动牛犊
驱动牛犊
  • 注册日期2008-08-19
  • 最后登录2012-08-05
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望101点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2008-08-20 15:06
楼主做过密组件没有.
现在有个头疼的问题,怕自己购买的GIS地图被 用户所非法拷贝.
fortune95
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2010-09-14
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2008-08-20 17:31
没看到代码啊,在哪里?
shenhui
驱动小牛
驱动小牛
  • 注册日期2006-05-11
  • 最后登录2023-02-10
  • 粉丝14
  • 关注11
  • 积分142分
  • 威望1314点
  • 贡献值1点
  • 好评度146点
  • 原创分0分
  • 专家分1分
  • 社区居民
17楼#
发布于:2008-08-28 17:31
编译汇编的时候还必须要16位的编译器,提示什么Visual C++ 1.52,现在去哪儿弄这个,大家是怎么处理的
作一名真实,诚实,优秀的科技工作者!
learning_wincc
驱动牛犊
驱动牛犊
  • 注册日期2010-01-14
  • 最后登录2010-03-22
  • 粉丝0
  • 关注0
  • 积分17分
  • 威望151点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2010-03-08 17:03
 
shenlang277
驱动牛犊
驱动牛犊
  • 注册日期2008-07-12
  • 最后登录2011-12-21
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望121点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2010-04-09 20:02
不错的软件。
上一页
游客

返回顶部