如果您提供的代码能达到金山文件粉碎器效果,支付1000元人民币作为报酬。
联系方式:[email protected]
QQ:7357353以下是金山文件粉碎器的简介:文件粉碎器大多数情况下,Windows自带的文件删除并不彻底,文件被删除后,他人仍然可以通过一些磁盘工具进行恢复。所以对于一些想彻底删除的文件,可以使用文件粉碎器进行彻底删除。
详见:http://www.duba.net/zt/ksc/help/html/a_402file.htm就算是顽固的注入型DLL文件,金山文件粉碎器也能将其搞定,就算不能搞定的,也将其改名为KKKKKK之类的名称(顽固无法删除的DLL一般不能直接删除,也不能改名,但金山却能够做到,怀疑金山文件粉碎器有相当高的底层权限。)请高手接分接RMB!

解决方案 »

  1.   

    就是用数据多次覆盖文件的数据区而已
    要直接访问NTFS/FAT表数据
      

  2.   

    Function DelFile(Const FileName: TFileName): Boolean;
    Var
      Buffer: Array[0..4095] Of Byte;
      Max, n: LongInt;
      I: Integer;
      FS: TFileStream;  Procedure RandomizeBuffer;
      Var
        I: Integer;
      Begin
        For I := Low(Buffer) To High(Buffer) Do
          Buffer[I] := Random(256);
      End;
    Begin
      FS := TFileStream.Create(FileName, fmOpenReadWrite Or fmShareExclusive);
      Try
        For I := 1 To 3 Do
        Begin
          RandomizeBuffer;
          Max := FS.Size;
          FS.Position := 0;
          While Max > 0 Do
          Begin
            If Max > SizeOf(Buffer) Then
              n := SizeOf(Buffer)
            Else
              n := Max;
            FS.Write(Buffer, n);
            Max := Max - n;
          End;
          FlushFileBuffers(FS.Handle);
        End;
      Finally
        FS.Free;
      End;
      Result := DeleteFile(FileName);
    End;
      

  3.   

    估计楼主要的是怎么样粉碎正在运行的程序和粉碎注入到其他进程中的DLL的功能吧
      

  4.   

    To:laihongbo524 
    您的方法对付注入型DLL文件行不通。只能删除一般文件。
    To:ly_liuyang
    您有相关的代码吗?留下联系方式吧。实践通过的话,支付RMB。欢迎其他高手指教。
      

  5.   

    删除文件这个东西不难
    对于Ring3程序和部分Ring0,直接构建IRP发删除请求到FSD驱动,并让欺骗FSD,让它认为你的文件没别人使用即可达到目的通常用IAT Hook NTFS/FAT文件系统上面的MmFlushImageSection即可实现欺骗
    考虑到简化代码,MmFlushImageSection其实就是判断2个指针是否为空而已,于是可以简单的置空即可pSectionObjectPointer = fileObject->SectionObjectPointer;
    pSectionObjectPointer->ImageSectionObject = 0;
    pSectionObjectPointer->DataSectionObject = 0;虽然这样用不符合标准流程,但2000/XP/2003都是这么判断的,估计Vista也一样,用用无妨的另外删除的文件只能是普通属性FILE_ATTRIBUTE_NORMAL,只读之类的是删除不了的,所以,处理之前发IRP强制去除其他属性,那就更好啦做底层的只能用DDK的C,虽然有DDDK(Delphi DDK)没实战用过,估计可以做做这类简单事情的