阅读:1332回复:5
在精华区中的文章<隐藏任意进程,目录/文件,注册表,端口>
中编写的隐藏目录的函数是不是在DriverEntry(驱动入口)中调用呢??可是是怎样调用的呢??那位高手能告诉我吗????
|
|
最新喜欢:![]() |
沙发#
发布于:2003-12-09 00:32
我是这样写的,请大家看看我写的对吗???
//驱动入口 NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath) { ULONG i; DGBGPRINT(\"驱动入口\"); DriverObject->DriverUnLoad=DirUnLoad; for(i=0;i<=IRP_MJ_MAXIMUM_FUNCTION;i++) { DriverObject->MajorFunction=DispatchFun;//分发函数 } } //IRP分发函数 NTSTATUS DispatchFun(IN PDRIVER_OBJECT DriverObject, IN PIRP Irp) { NTSTATUS rc; PIO_STACK_LOCATION IrpStack; PIO_STACK_LOCATION NextIrpStack; //定义ANSI的文件名 ANSI_STRING ansiFileName; //定义UNI的文件名 UNICODE_STRING uniFileName; //得到当前的I/O栈单元 IrpStack=IoGetCurrentIrpStackLocation(Irp); //分发IRP switch(IrpStack->MajorFunction) { case IRP_MJ_DIRECTORY_CONTROL: { if(IrpStack->MinorFunction == IRP_MN_QUERY_DIRECTORY) { //调用目录隐藏函数,对目录进行隐藏 HookZwQueryDirectoryFile(.....); } } } } 可是函数//目录隐藏函数 NTSTATUS HookZwQueryDirectoryFile(IN HANDLE hFile, IN HANDLE hEvent OPTIONAL, IN PIO_APC_ROUTINE IoApcRoutine OPTIONAL, IN PVOID IoApcContext OPTIONAL, OUT PIO_STATUS_BLOCK pIoStatusBlock, OUT PVOID FileInformationBuffer, IN ULONG FileInformationBufferLength, IN FILE_INFORMATION_CLASS FileInfoClass, IN BOOLEAN bReturnOnlyOneEntry, IN PUNICODE_STRING PathMask OPTIONAL, IN BOOLEAN bRestartQuery) ; 的这些参数都是什么意思呢?我应该传什么呢??? |
|
板凳#
发布于:2003-12-09 09:25
你采用HOOK NATIVE API的方法,在什么地方都可以,DRIVERENTRY处没问题,还有你要做的很家但简单,以原来的参数调用原来的ZwQueryDirectoryFile,然后在返回结果的OUT PVOID FileInformationBuffer,查看是否是要隐藏的东西,不是直接返回,是的话清0,然后返回失败标志即可。
|
|
|
地板#
发布于:2003-12-10 13:39
请问一下我在使用ZwQueryDirectoryFile在进行编译的时候系统提示没有定义这个函数,这是为什么呢??要使用它需要使用什么头文件呢???
|
|
地下室#
发布于:2003-12-11 13:10
可能WINDOWS没有引出吧,不清楚。。。。。。,可以考虑动态获得地址,然后用HOOKPE的方法
|
|
|
5楼#
发布于:2003-12-11 16:44
我的程序现在可以进入NTSTATUS HookZwQueryDirectoryFile函数中了,可是在执行rc = (RealZwQueryDirectoryFile)(
hFile,hEvent,IoApcRoutine,IoApcContext,pIoStatusBlock,FileInformationBuffer,FileInformationBufferLength,FileInfoClass, bReturnOnlyOneEntry,PathMask,bRestartQuery); 的时候返回的rc总是不正确的,我怀疑是我调用HookZwQueryDirectoryFile的时候的问题,我的代码是: DbgPrint(\"入口\\n\"); RealZwQueryDirectoryFile = (REALZWQUERYDIRECTORYFILE)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x97)); *(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x97) = HookZwQueryDirectoryFile; 其中我不明白)(*(((PServiceDescriptorTableEntry)KeServiceDescriptorTable)->ServiceTableBase + 0x97));是作什么的。(我的代码是根据LornWolf的隐藏进程改编的,可是不知道改的对不对) 。谢谢各位打下了 |
|