文件强行删除大法摘要

BOOL WINAPI MoveFileEx(
__in      LPCTSTR lpExistingFileName,
__in_opt  LPCTSTR lpNewFileName,
__in      DWORD dwFlags
);

MoveFileEx具体替换系统文件的效果,这样原先不能删除的就变得可以删除了。
第一个参数表示待删除的文件,第二个表示用来替换的文件,第三个参数是关键
MOVEFILE_REPLACE_EXISTING :表示立即替换原先的文件,然后我们只要调用DeleteFile就可以删除文件了。
MOVEFILE_DELAY_UNTIL_REBOOT:表示重启后再替换,我们可以使用MoveFileEx(strPath,NULL, MOVEFILE_DELAY_UNTIL_REBOOT) 这样替换为NULL就到达重启后删除。
ps. 重启后操作实际在2000/XP/2003系统中函数会在HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Session Manager键下创建一个名为 Pending FileRenameOperations的多字节值。重启后csrss.exe系统进程会执行替换操作!!

(二) 重启进入DOS模式删除
(三) 典型软件:killBox XDelBox

二、直接删除
(一) 在所有进程中枚举文件句柄,然后全部关闭再删除。  如Unlocker 、Process Explorer
(这个没有去实现,应该觉得不难)
(二) 发送IRP到文件系统来删除  如IceSword、360文件粉碎机
1、文件删除时发生的情况
文件删除时,文件系统会在IRP_MJ_SET_INFORMATION或IRP_MJ_CLEANUP 派遣函数中调用MmFlushImageSection函数(第二个参数传入MmFlushForDelete) 来判断文件是否正在运行,然后再进行删除操作。
2、如何发送自己的IRP?
从上面可以知道函数MmFlushImageSection是关键,所以自然想到的是hook这个函数。
所以有解决方法一:
hook MmFlushImageSection函数,当有删除发生时,我们从 SectionObjectPointer-> DataSectionObject ->FileObject来判断是否为我们删除的文件。如果是返回Success,这样系统会认为这个文件没有在运行,这样删除文件就成功进行了!
后面有人发现更加直接的方法,就是直接把SectionObjectPointer这个结构清空,这样不就相当于文件没有运行,可以删除!!
于是有解决方法二:
A、设置文件属性,去除只读属性才能删除只读文件
// 设置文件属性步骤:
// 1、从handle得到FILE_OBJECT进而得到文件设备,这样才能发送IRP进行处理
// 2、构造我们要传的IRP(事件、文件信息(FILE_BASIC_INFORMATION.FileAttributes = FILE_ATTRIBUTE_NORMA)、状态等设置)
// 3、得到IRP堆栈进行设置(MajorFunction目的、设备、文件对象 最后还设置irpSp->Parameters.SetFile 设置文件的具体细节)
// 4、IoSetCompletionRoutine 设置完成例程
// 5、IoCallDriver调用设备进行处理
// 6、处理完完成例程设置事件,收到后文件属性设置完成。

B、删除文件
// 1、构造我们要传的IRP(事件、文件信息、状态、后面三个不知道怎么考虑要设置)?也就是构造IRP不熟悉!!!!
//   ps.这里的文件信息用FILE_DISPOSITION_INFORMATION结构,前面用的是FILE_BASIC_INFORMATION结构. FILE_DISPOSITION_INFORMATION.DeleteFile = TRUE
// 4、得到IRP堆栈进行设置(MajorFunction目的、设备、文件对象 最后还设置irpSp->Parameters.SetFile 设置文件的具体细节)
// 5、IoSetCompletionRoutine 设置完成例程
// 6、把文件对象的 SectionObjectPointer 结构清空,因为如果删除的文件正在用,SectionObjectPointer不为空,删除会失败。
// 7、IoCallDriver调用设备进行处理
// 8、处理完完成例程设置事件,收到后文件属性设置完成。

完事~~

(三) 最暴力:直接从磁盘级擦出文件,通常以CreateFile传入参数PhysicalDriver打开物理磁盘,然后分析扇区结构找到文件删除.... 变态....   如RootKit Unhooker
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值