strongdisk
驱动牛犊
驱动牛犊
  • 注册日期2003-10-11
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1956回复:7

filedisk加上加密(else wowocock是否可以回答一下,谢谢)

楼主#
更多 发布于:2004-01-10 11:17
我按照大师们指导修改了filedisk
可是还是有问题,我格式化完成后,就显示磁盘已满,实在不知
问题在何处,是否可以看一下。

 case IRP_MJ_READ:
             CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);
buf=ExAllocatePool(NonPagedPool,io_stack->Parameters.Read.Length);

ZwReadFile(
device_extension->file_handle,
NULL,
NULL,
NULL,
&irp->IoStatus,
buf,
io_stack->Parameters.Read.Length,
&io_stack->Parameters.Read.ByteOffset,
NULL
);

//lRet = Is_DesDecrypt(buf,
//io_stack->Parameters.Read.Length, tmp, keybits);
decrypt(buf,io_stack->Parameters.Read.Length);
RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Read.Length);

ExFreePool(buf);
                break;

            case IRP_MJ_WRITE:
               /* if ((io_stack->Parameters.Write.ByteOffset.QuadPart +
                     io_stack->Parameters.Write.Length) >
                     device_extension->file_size.QuadPart)
                {
                    irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
                    irp->IoStatus.Information = 0;
                }*/
                
CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);


buf=ExAllocatePool(NonPagedPool,io_stack->Parameters.Write.Length);

RtlCopyMemory(buf,CurrentAddress,io_stack->Parameters.Write.Length);

//lRet = Is_DesEncrypt(buf, io_stack->Parameters.Write.Length, tmp, keybits);
decrypt(buf,io_stack->Parameters.Write.Length);

ZwWriteFile(
device_extension->file_handle,
NULL,
NULL,
NULL,
&irp->IoStatus,
buf,
io_stack->Parameters.Write.Length,
&io_stack->Parameters.Write.ByteOffset,
NULL
);
decrypt(buf,io_stack->Parameters.Write.Length);
RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Write.Length);
ExFreePool(buf);
                break;

[编辑 -  1/10/04 by  strongdisk]

最新喜欢:

cyliucyliu
strongdisk
驱动牛犊
驱动牛犊
  • 注册日期2003-10-11
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-01-10 14:27
实在是不知道什么原因。我按照以前else 的员码修改了还是不行
不知道rc4是否可以,我在应用程序中测试过,他加解密是一个函数
第一次调用是加密,第二次是解密。

可是格式化后只有4K可用,我分配了10M,其他显示已经使用了。

大侠是否可以回答一下。是否其他地方还有问题。

            case IRP_MJ_READ:
pBuf = MmGetSystemAddressForMdl(irp->MdlAddress);
Len = io_stack->Parameters.Read.Length;
ZwReadFile(
device_extension->file_handle,
NULL,
NULL,
NULL,
&irp->IoStatus,
pBuf,
Len,
&io_stack->Parameters.Read.ByteOffset,
NULL
);
decrypt(pBuf,Len);
                break;

            case IRP_MJ_WRITE:
       pBuf = MmGetSystemAddressForMdl(irp->MdlAddress);
Len = io_stack->Parameters.Write.Length;
decrypt(pBuf,Len);
ZwWriteFile(
device_extension->file_handle,
NULL,
NULL,
NULL,
&irp->IoStatus,
pBuf,
Len,
&io_stack->Parameters.Write.ByteOffset,
NULL
);
decrypt(pBuf,Len);  
                break;


decrypt(PVOID pBuf,ULONG  Len)
{
PVOID buf;
RC4_KEY key;
buf=ExAllocatePool(NonPagedPool,Len);

RC4_set_key(&key,16,szKey);
RC4(&key,Len,(const unsigned char *)pBuf,(unsigned char *)buf);
RtlCopyMemory(pBuf,buf,Len);
ExFreePool(buf);

}
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2004-01-12 08:43
你的方法可以,可能是你的加密算法有问题,测试下DES的
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
strongdisk
驱动牛犊
驱动牛犊
  • 注册日期2003-10-11
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-01-12 09:21
如果使用des,如何解决输入数据和输出数据长度不同呢?
rc4 是完全一样的,算法我编写了程序测试过的,一点问题也没有。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2004-01-12 09:44
你读写都是decrypt(pBuf,Len); ???
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
strongdisk
驱动牛犊
驱动牛犊
  • 注册日期2003-10-11
  • 最后登录2004-06-07
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-01-12 11:09
rc4与des不同,加解密是一样的。
第一次调用是加密,第二次调用是解密。
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-01-12 11:34
你把decrypt(pBuf,Len); 用一个空函数替换着试一下,如果没有问题那就是你加密算法的问题了
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-13 09:20
我按照大师们指导修改了filedisk
可是还是有问题,我格式化完成后,就显示磁盘已满,实在不知
问题在何处,是否可以看一下。

case IRP_MJ_READ:
CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);
buf=ExAllocatePool(NonPagedPool,io_stack->Parameters.Read.Length);

ZwReadFile(
device_extension->file_handle,
NULL,
NULL,
NULL,
&irp->IoStatus,
buf,
io_stack->Parameters.Read.Length,
&io_stack->Parameters.Read.ByteOffset,
NULL
);

//lRet = Is_DesDecrypt(buf,
//io_stack->Parameters.Read.Length, tmp, keybits);
decrypt(buf,io_stack->Parameters.Read.Length);
RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Read.Length);

ExFreePool(buf);
break;

case IRP_MJ_WRITE:
/* if ((io_stack->Parameters.Write.ByteOffset.QuadPart +
io_stack->Parameters.Write.Length) >
device_extension->file_size.QuadPart)
{
irp->IoStatus.Status = STATUS_INVALID_PARAMETER;
irp->IoStatus.Information = 0;
}*/

CurrentAddress = MmGetSystemAddressForMdlSafe(irp->MdlAddress, NormalPagePriority);


buf=ExAllocatePool(NonPagedPool,io_stack->Parameters.Write.Length);

RtlCopyMemory(buf,CurrentAddress,io_stack->Parameters.Write.Length);

//lRet = Is_DesEncrypt(buf, io_stack->Parameters.Write.Length, tmp, keybits);
decrypt(buf,io_stack->Parameters.Write.Length);

ZwWriteFile(
device_extension->file_handle,
NULL,
NULL,
NULL,
&irp->IoStatus,
buf,
io_stack->Parameters.Write.Length,
&io_stack->Parameters.Write.ByteOffset,
NULL
);
decrypt(buf,io_stack->Parameters.Write.Length);
RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Write.Length);
ExFreePool(buf);
break;


这段代码没有什么问题,可能还是你的加密函数有问题,我的驱动也是这么写的,你最好先不要加解密(直接屏蔽掉decrypt函数),看是否出现这种问题,如果没有,你再将你的decrypt改成简单的加密函数,如将每个字符加1的简单加密试一试,如过都没问题,那说明问题就出在你的decrypt函数上,试一试吧

你把写里面的decrypt(buf,io_stack->Parameters.Write.Length);
RtlCopyMemory(CurrentAddress,buf,io_stack->Parameters.Write.Length);代码删掉试一试。


[编辑 -  1/13/04 by  li_jie]
游客

返回顶部