随笔分类 - Windows内核研究
摘要:这个问题虽然是比较老了,但是看雪上还有同学提到,在这里做个总结,给像我这样的新手看看。1)直接修改入口用c32asm或者其他PE编辑工具,修改开头的几个字节,改成cc,即int 3。这样,驱动加载的时候就会断在这里了。ps:这种方法对于有校验的驱动可能不太适用。2)下断IopLoadDriver这里的EDI其实就是DriverObject。DriverObject+2c就是DriverInit。在这里单步进去就是DriverEntry了。ps:这种方法下断IopLoadDriver对应的偏移,在不同的操作系统下,会有所不同。不过对应的代码基本上是如下形式:push regcall reg+xx
阅读全文
摘要:一、消息钩子的概念1、基本概念 Windows应用程序是基于消息驱动的,任何线程只要注册窗口类都会有一个消息队列用于接收用户输入的消息和系统消息。为了拦截消息,Windows提出了钩子的概念。钩子(Hook)是Windows消息处理机制中的一个监视点,钩子提供一个回调函数。当在某个程序中安装钩子后,它将监视该程序的消息,在指定消息还没到达窗口之前钩子程序先捕获这个消息。这样就有机会对此消息进行过滤,或者对Windows消息实现监控。 2、分类 消息钩子分为局部钩子和全局钩子。局部钩子是指仅拦截指定一个进程的指定消息,全局钩子将拦截系统中所有进程的指定消息。 3、实现步骤 使用钩子技术拦截消息通
阅读全文
摘要:今天,我们主要讨论的是一个函数NtQuerySystemInformation(ZwQuerySystemInformation)。当然,你不要小看这么一个函数,它却为我们提供了丰富的系统信息,同时还包括对某些信息的控制和设置。以下是这个函数的原型:typedef NTSTATUS (__stdcall *NTQUERYSYSTEMINFORMATION) (IN SYSTEM_INFORMATION_CLASS SystemInformationClass, IN OUT PVOID SystemInformation, IN ULONG SystemInformationLength, O
阅读全文
摘要:本篇算是前两篇的综合,驱动列举出进程,并将进程名加入到一个链表中,最后应用层程序通过IOCTL读出驱动传递出来的数据。驱动irp3.h文件:#include <ntddk.h> //采用缓冲区内存模式IOCTL, //MY_DVC_BUFFERED_CODE是自定义的控制码 #define MY_DVC_BUFFERED_CODE / (ULONG)CTL_CODE(FILE_DEVICE_UNKNOWN, / 0x900, / METHOD_BUFFERED, / FILE_ANY_ACCESS) #define DWORD unsigned long #define BOOL
阅读全文
摘要:/* 驱动SYS irp1.h */ #include <ntddk.h> /*采用缓冲区内存模式IOCTL, MY_DVC_BUFFERED_CODE是自定义的控制码*/ #define MY_DVC_BUFFERED_CODE / (ULONG)CTL_CODE(FILE_DEVICE_UNKNOWN, / 0x900, / METHOD_BUFFERED, / FILE_ANY_ACCESS) //---------函数声明--------- NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE...
阅读全文
摘要:以FindWinow为例,首先逆向FindWindow,分析写出下面代码#pragma pack(1)typedef struct _UNICODE_STRING { USHORT Length; USHORT MaximumLength; PWSTR Buffer; } UNICODE_STRING,*PUNICODE_STRING;#pragma pack()__declspec(naked) void sysFastCall(){__asm{mov edx,esp__emit 0x0f__emit 0x34}}__declspec(naked) HWND __stdcall My_Fi.
阅读全文