hnfudy
驱动牛犊
驱动牛犊
  • 注册日期2004-08-19
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1399回复:7

做动态加解密把硬盘弄的不能访问了

楼主#
更多 发布于:2005-03-14 10:47
我用一个分区做测试,现在这个盘一打开就显示“无法访问 G:, 参数不正确”,这该怎么修复啊,上面好多资料呢!!!!
zhangshengyu
驱动老牛
驱动老牛
  • 注册日期2003-10-03
  • 最后登录2016-07-26
  • 粉丝0
  • 关注0
  • 积分792分
  • 威望696点
  • 贡献值41点
  • 好评度499点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2005-03-14 11:32
可以试试 FINALDATA 、DISKMAN
估计你已经把这个分区的数据破坏了,修复多少就看你写了多少数据了。
---内核开发合作或提供基础技术服务QQ:22863668 ---
fslife
驱动大牛
驱动大牛
  • 注册日期2004-06-07
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望49点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-14 16:53
找个工具恢复吧,FinalData之类的说不定可以挽回一些损失。
动态加解密对于被加密的文件一定要严格确认,在没有通过基本测试的情况下,不要轻易保护系统盘,更不要拿自己开发的机子尝试。
总之这个东西的风险还是比较大的。
在交流中学习。。。
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-14 17:45
哈哈,你可以用FILEdisk虚拟一个分区作加密的阿,我现在都搞定了,基本没有问题了。不要用真的分区作,那样很容易丢的,你也可以恢复的
自己把代码修改一下就可以了,要不你把源码贴出来,我给你看看
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-14 17:48
我觉得finadata,可能不行,因为他已经把数据修改了,最好是自己该驱动,用以前的加密。来解密
hnfudy
驱动牛犊
驱动牛犊
  • 注册日期2004-08-19
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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;
gongbin_net
驱动牛犊
驱动牛犊
  • 注册日期2003-06-18
  • 最后登录2005-06-07
  • 粉丝1
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-14 22:43
你不能抄别人的,这个加解密不对称,加了密根本解不出来。你受骗了,不要太相信别人。都把根目录和FAT表加密坏了,当然访问不了了
你把那个sysDataBuffer = sysDataOld ^ 0x9;
该为
sysDataBuffer = sysDataBuffer-1;
就可以了,还有你加密有错。
但是不过你的驱动可能已经不认识你的那个分区了。
你把那个分区用
createfile打开,然后对它读出来,在写上读的值-1即可.
不一定,因该可以。


[编辑 -  3/14/05 by  gongbin_net]
hnfudy
驱动牛犊
驱动牛犊
  • 注册日期2004-08-19
  • 最后登录2005-06-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-18 22:29
我的加密错在哪里呢,请稍微指点一下吧
游客

返回顶部