能力值:
( LV12,RANK:210 )
|
-
-
2 楼
首先,你只开一个帖子问就好,没必要开两个~~~~~
其次,这个问题,我觉得关键不在于汇编而在于强制`~~~~
我没觉得用C删除和用汇编删除有什么本质上的区别~~~~
就删文件就那么几个API,强制删除我不知道, 帮不了你了`
|
能力值:
( LV12,RANK:420 )
|
-
-
3 楼
强删文件:
1.被HOOK保护文件:摘HOOK,摘链,饶过filter,DISK操作,磁盘IO操作等
2.被权限保护的文件:RING0删除
3.独占文件:
(1).dup and close handle
(2).XCB fuck
(3).open with FILE_READ_ATTRIBUTES ,and send IRP
(4).disk erease
4.section,运行中文件:
(1).hook MmFlushImageSection
(2).zero FileObject->SectionObjectPointer->ImageSectionObject
5.写回文件:
(1).file_read_attribtues 删除法站坑
(2).其他站坑方式,文件夹站坑,等等
(3).关机shutdown notification删除
|
能力值:
( LV9,RANK:160 )
|
-
-
4 楼
膜拜,很强大!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
windows系统貌似不能删除正在使用的文件吧
|
能力值:
( LV9,RANK:210 )
|
-
-
6 楼
Ring0下好象没有什么不能!你叫Windows跟你姓都可以
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
向 MJ 学习!
|
能力值:
( LV4,RANK:50 )
|
-
-
9 楼
怎么没人给代码呀,我来整一个:
//////////////////////////////////////////////////
// DeleteFile.cpp文件
extern "C"
{
#include <ntddk.h>
}
//控制字
#define IOCTL_DELETE_FILE CTL_CODE( FILE_DEVICE_UNKNOWN, 0x888, METHOD_BUFFERED, FILE_ANY_ACCESS )
//设备名称
#define NT_DEVICE_NAME L"[URL="file://\\Device\\DeleteFile"]\\Device\\DeleteFile[/URL]"
#define DOS_DEVICE_NAME L"[URL="file://\\DosDevices\\DeleteFile"]\\DosDevices\\DeleteFile[/URL]"
//创建关闭驱动的例程
NTSTATUS
DispatchCreateClose(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
//设置IRP状态
Irp->IoStatus.Status = STATUS_SUCCESS;
//完成请求
IoCompleteRequest( Irp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
NTSTATUS
IoCompletion(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Context
)
{
//设置IRP
Irp->UserIosb->Status = Irp->IoStatus.Status;
Irp->UserIosb->Information = Irp->IoStatus.Information;
//受信状态
KeSetEvent(Irp->UserEvent, IO_NO_INCREMENT, FALSE);
//KeResetEvent( Irp->UserEvent );
IoFreeIrp(Irp);
return STATUS_MORE_PROCESSING_REQUIRED;
}
BOOLEAN
SuperDeleteFile( IN PCWSTR lpFileName )
{
HANDLE hFile = NULL;
IO_STATUS_BLOCK IoStatus;
NTSTATUS ntStatus;
UNICODE_STRING UniFileName;
OBJECT_ATTRIBUTES ObjAttributes;
PFILE_OBJECT pFileObj;
PDEVICE_OBJECT pFileDeviceObj;
PIRP pIrp;
PIO_STACK_LOCATION pIOStack;
KEVENT Event;
FILE_BASIC_INFORMATION FileInfo;
FILE_DISPOSITION_INFORMATION FileDispostionInformation;
//代码必须运行在PASSIVE_LEVEL等级上
__try
{
if (KeGetCurrentIrql() > PASSIVE_LEVEL)
{
DbgPrint("KeGetCurrentIrql() > PASSIVE_LEVEL\n");
return FALSE;
}
RtlInitUnicodeString( &UniFileName, lpFileName );
//初始化对象属性
InitializeObjectAttributes(
&ObjAttributes,
&UniFileName,
OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE,
NULL,
NULL );
//打开文件
ntStatus = IoCreateFile( &hFile,
FILE_READ_ATTRIBUTES,
&ObjAttributes,
&IoStatus,
0,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_READ,
FILE_OPEN,
FILE_RANDOM_ACCESS,
NULL,
0,
CreateFileTypeNone,
NULL,
IO_NO_PARAMETER_CHECKING
);
if ( !NT_SUCCESS( ntStatus ) || hFile == NULL )
{
DbgPrint( "打开文件失败\n" );
return FALSE;
}
//-------------开始去掉文件的属性----------------------
ntStatus = ObReferenceObjectByHandle( hFile,
DELETE,
*IoFileObjectType,
KernelMode,
(void**)&pFileObj,
NULL
);
if ( !NT_SUCCESS( ntStatus ) )
{
DbgPrint( "获得文件访问权失败!\n" );
return FALSE;
}
//获得和文件相关的设备对象
pFileDeviceObj = IoGetRelatedDeviceObject( pFileObj );
//为IRP分配空间
pIrp = IoAllocateIrp( pFileDeviceObj->StackSize, TRUE );
if (pIrp == NULL)
{
ObDereferenceObject( pFileObj );
return FALSE;
}
//初始化事件对象
KeInitializeEvent( &Event, SynchronizationEvent, FALSE );
//清空结构体
memset( &FileInfo, 0, sizeof( FILE_BASIC_INFORMATION ) );
FileInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
//填充IRP
pIrp->AssociatedIrp.SystemBuffer = &FileInfo;
pIrp->UserEvent = &Event;
pIrp->UserIosb = &IoStatus;
pIrp->Tail.Overlay.OriginalFileObject = pFileObj;
pIrp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
pIrp->RequestorMode = KernelMode;
//填充IO堆栈
pIOStack = IoGetNextIrpStackLocation( pIrp );
pIOStack->MajorFunction = IRP_MJ_SET_INFORMATION;
pIOStack->DeviceObject = pFileDeviceObj;
pIOStack->FileObject = pFileObj;
pIOStack->Parameters.SetFile.Length = sizeof( FILE_BASIC_INFORMATION );
pIOStack->Parameters.SetFile.FileInformationClass = FileBasicInformation;
pIOStack->Parameters.SetFile.FileObject = pFileObj;
//设置IRP处理完成时调用的例程
IoSetCompletionRoutine( pIrp,
IoCompletion,
&Event,
TRUE,
TRUE,
TRUE
);
//开始处理
IoCallDriver( pFileDeviceObj, pIrp );
//等待IRP处理完成
KeWaitForSingleObject( &Event, Executive, KernelMode, TRUE, NULL );
//-------------------开始删除文件-----------------------
pIrp = IoAllocateIrp(pFileDeviceObj->StackSize, TRUE);
FileDispostionInformation.DeleteFile = TRUE;
//初始化事件对象
KeInitializeEvent( &Event, SynchronizationEvent, FALSE );
//填充IRP
pIrp->AssociatedIrp.SystemBuffer = &FileDispostionInformation;
pIrp->UserEvent = &Event;
pIrp->UserIosb = &IoStatus;
pIrp->Tail.Overlay.OriginalFileObject = pFileObj;
pIrp->Tail.Overlay.Thread = (PETHREAD)KeGetCurrentThread();
pIrp->RequestorMode = KernelMode;
//填充IO堆栈
pIOStack = IoGetNextIrpStackLocation( pIrp );
pIOStack->MajorFunction = IRP_MJ_SET_INFORMATION;
pIOStack->DeviceObject = pFileDeviceObj;
pIOStack->FileObject = pFileObj;
pIOStack->Parameters.SetFile.Length = sizeof( FILE_DISPOSITION_INFORMATION );
pIOStack->Parameters.SetFile.FileInformationClass = FileDispositionInformation;
pIOStack->Parameters.SetFile.FileObject = pFileObj;
//设置IRP处理完成时调用的例程
IoSetCompletionRoutine( pIrp,
IoCompletion,
&Event,
TRUE,
TRUE,
TRUE
);
IoCallDriver( pFileDeviceObj, pIrp );
KeWaitForSingleObject( &Event, Executive, KernelMode, TRUE, NULL );
ObDereferenceObject( pFileObj );
ZwClose( hFile );
DbgPrint( "删除文件%ws成功!\n", lpFileName );
}
__except( 1 )
{
ObDereferenceObject( pFileObj );
DbgPrint( "删除文件%ws失败!\n", lpFileName );
return FALSE;
}
return TRUE;
}
NTSTATUS
DispatchDeviceControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
)
{
PIO_STACK_LOCATION pIoStack = IoGetCurrentIrpStackLocation( Irp );
ULONG uCtlCode = pIoStack->Parameters.DeviceIoControl.IoControlCode;
PVOID pWChar = Irp->AssociatedIrp.SystemBuffer;
ULONG uInLength = pIoStack->Parameters.DeviceIoControl.InputBufferLength;
ULONG uOutLength = pIoStack->Parameters.DeviceIoControl.OutputBufferLength;
PCWSTR pFilePath;
//NTSTATUS ntstatus;
pFilePath = (PCWSTR)pWChar;
DbgPrint( " DispatchDeviceControl\n " );
switch ( uCtlCode )
{
case IOCTL_DELETE_FILE:
{
DbgPrint( " 接受命令成功\n " );
DbgPrint( "FileName = %ws\n", pFilePath );
//DbgPrint( "FileName = %ws\n", (PCSTR)pWChar )
SuperDeleteFile( pFilePath );
break;
}
}
Irp->IoStatus.Information = uOutLength;
Irp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return STATUS_SUCCESS;
}
//卸载驱动
VOID
DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
//删除符号连接
UNICODE_STRING UniDosLink;
RtlInitUnicodeString( &UniDosLink, DOS_DEVICE_NAME );
IoDeleteSymbolicLink( &UniDosLink );
//删除设备
IoDeleteDevice( DriverObject->DeviceObject );
DbgPrint( "Driver Unload successfully!\n" );
}
// 驱动程序加载时调用DriverEntry例程
NTSTATUS
DriverEntry(
PDRIVER_OBJECT pDriverObj,
PUNICODE_STRING pRegistryString
)
{
NTSTATUS ntStatus;
UNICODE_STRING UniNTDev;
UNICODE_STRING UniDosDev;
PDEVICE_OBJECT pDeviceObj;
//初始化Unicode字符串
RtlInitUnicodeString( &UniNTDev, NT_DEVICE_NAME );
RtlInitUnicodeString( &UniDosDev, DOS_DEVICE_NAME );
//分配例程
pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchCreateClose;
pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchCreateClose;
pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceControl;
pDriverObj->DriverUnload = DriverUnload;
//创建设备
ntStatus = IoCreateDevice( pDriverObj,
0,
&UniNTDev,
FILE_DEVICE_UNKNOWN,
FILE_DEVICE_SECURE_OPEN,
FALSE,
&pDeviceObj
);
if ( !NT_SUCCESS( ntStatus ) )
{
DbgPrint( "创建设备失败!\n" );
return ntStatus;
}
//创建符号连接
ntStatus = IoCreateSymbolicLink( &UniDosDev, &UniNTDev );
if ( !NT_SUCCESS( ntStatus ) )
{
DbgPrint( "创建符号连接失败!\n" );
IoDeleteDevice( pDeviceObj );
return ntStatus;
}
DbgPrint( "Driver load successfully!\n" );
return STATUS_SUCCESS;
}
|
能力值:
( LV12,RANK:420 )
|
-
-
10 楼
楼上的代码
无法即时删除被占用文件
无法删除运行中文件
无法删除被HOOK保护的文件,例如FSD HOOK,FSD FILTER, 其他的API HOOK等
无用的过时垃圾
|
能力值:
( LV12,RANK:760 )
|
-
-
11 楼
目前看不到什么文件保护了,主要是重生。
|
能力值:
( LV12,RANK:760 )
|
-
-
12 楼
而且重生还他妈的改名重生...
貌似只能遇到一个,解决一个
|
能力值:
( LV9,RANK:380 )
|
-
-
13 楼
用360的文件粉碎吧,包治百病。。
|
能力值:
( LV4,RANK:50 )
|
-
-
14 楼
最直接的方法:利用驱动(KMD等)进入RING0,如果你掌握了FAT32,NTFS,用IN/OUT操作。绝对适应任何情况,只不过太暴力,要小心哦!
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
这是qihoocom 不知道那个,360顽固文件删除工具是不是,你写的啊?
如果是qihoocom 写的,你问他就问对了。
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
请问下ntfs下直接操作磁盘的话该怎么删除文件,,貌似我用WINHEX随便改都不起作用?我把INDX结构和MFT记录都清掉了..
|
能力值:
( LV12,RANK:450 )
|
-
-
17 楼
怎么不起作用?可能是缓存的影响吧,你重启下看看
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
比如我建立一个文本文件,里面随便打些字符A,然后用WINHEX清掉IDNX记录及MFT记录,然后,到资源管理器里仍可以发现,,打开的话内容仍是A
这时,重启的话可以发现修改的INDX及MFT又被还原了
缓存的话应该如何处理呢?
有个叫EVERYTHING的软件,作用是快速查找NTFS分区的文件,大概就是用的缓存
不重启有没有什么办法呢?能不能直接改缓存呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
我只能说这是个相当的大的程序
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
wSYScheck方法,直接删除
|
能力值:
( LV2,RANK:10 )
|
-
-
21 楼
wsyscheck对于有的文件是删除不了的,比如NTFS下命名空间为posix的某些文件
例如名字是(UNICODE、十六进制):0X000D
等其他一些,但它们又确实是合法的。
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
费尔托斯特安全 的 木马强力清除助手 是个非常强的工具
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
学习下9楼的Driver.........
期待大牛们搞个摘HOOK 过锁定的代码
|
能力值:
( LV2,RANK:10 )
|
-
-
24 楼
直接磁盘操作是王道。
|
能力值:
( LV2,RANK:10 )
|
-
-
25 楼
留个名.
|