阅读:1400回复:7
做动态加解密把硬盘弄的不能访问了
我用一个分区做测试,现在这个盘一打开就显示“无法访问 G:, 参数不正确”,这该怎么修复啊,上面好多资料呢!!!!
|
|
驱动老牛
![]() |
沙发#
发布于:2005-03-14 11:32
可以试试 FINALDATA 、DISKMAN
估计你已经把这个分区的数据破坏了,修复多少就看你写了多少数据了。 |
|
板凳#
发布于:2005-03-14 16:53
找个工具恢复吧,FinalData之类的说不定可以挽回一些损失。
动态加解密对于被加密的文件一定要严格确认,在没有通过基本测试的情况下,不要轻易保护系统盘,更不要拿自己开发的机子尝试。 总之这个东西的风险还是比较大的。 |
|
|
地板#
发布于:2005-03-14 17:45
哈哈,你可以用FILEdisk虚拟一个分区作加密的阿,我现在都搞定了,基本没有问题了。不要用真的分区作,那样很容易丢的,你也可以恢复的
自己把代码修改一下就可以了,要不你把源码贴出来,我给你看看 |
|
地下室#
发布于:2005-03-14 17:48
我觉得finadata,可能不行,因为他已经把数据修改了,最好是自己该驱动,用以前的加密。来解密
|
|
5楼#
发布于:2005-03-14 19:34
多谢各位,我把那个盘的东西在dos下倒出来然后格式化了
我的代码如下,其实也是综合坛子上的文章拼出来的,请指教: 都是在HookRoutine里面 case IRP_MJ_READ: // dynamic descryption // only no_cache I/O are handled if(!Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO |IRP_SYNCHRONOUS_PAGING_IO)) break; if(Irp->MdlAddress) { sysDataOld = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); } else { sysDataOld = Irp->UserBuffer; } length = Irp->IoStatus.Information; sysDataBuffer = (PCHAR)ExAllocatePool(NonPagedPool, length); // shuffle the data for(i = 0; i<length ;i++) { sysDataBuffer = sysDataOld ^ 0x9; } RtlCopyMemory(sysDataOld, sysDataBuffer, length); ExFreePool(sysDataBuffer); break; case IRP_MJ_WRITE: if(!(Irp->Flags & (IRP_NOCACHE | IRP_PAGING_IO |IRP_SYNCHRONOUS_PAGING_IO))) break; if(Irp->MdlAddress) { sysDataOld = MmGetSystemAddressForMdlSafe(Irp->MdlAddress, NormalPagePriority); } else { sysDataOld = Irp->UserBuffer; } length = currentIrpStack->Parameters.Write.Length; sysDataBuffer = (PCHAR)ExAllocatePool(NonPagedPool, length); RtlCopyMemory(sysDataBuffer, sysDataOld, length); for(i = 0; i<length ;i++) { sysDataBuffer = sysDataBuffer +1; } Irp->MdlAddress = NULL; pMDL = IoAllocateMdl(sysDataBuffer, length, FALSE, FALSE, Irp); MmBuildMdlForNonPagedPool(pMDL); Irp->UserBuffer=MmGetMdlVirtualAddress(pMDL); //ExFreePool(sysDataBuffer); break; |
|
6楼#
发布于:2005-03-14 22:43
你不能抄别人的,这个加解密不对称,加了密根本解不出来。你受骗了,不要太相信别人。都把根目录和FAT表加密坏了,当然访问不了了
你把那个sysDataBuffer = sysDataOld ^ 0x9; 该为 sysDataBuffer = sysDataBuffer-1; 就可以了,还有你加密有错。 但是不过你的驱动可能已经不认识你的那个分区了。 你把那个分区用 createfile打开,然后对它读出来,在写上读的值-1即可. 不一定,因该可以。 [编辑 - 3/14/05 by gongbin_net] |
|
7楼#
发布于:2005-03-18 22:29
我的加密错在哪里呢,请稍微指点一下吧
|
|