NT-Kernel
文章平均质量分 85
zhou191954
这个作者很懒,什么都没留下…
展开
-
2.2 常见名词解释
内核名词:1. NT式和WDM式驱动程序模型2. 控制设备对象CDO、功能设备对象FDO、物理设备对象PDO、过滤设备对象Filter DO3. 符号链接:IoCreateSymbolicLink或IoCreateUnprotectedSymbolicLink创建MS-DOS类型名称,如\DosDevices\C:,创建玩可以使用\\.\C:访问该设备4. IRQL (Interr转载 2013-07-11 01:02:00 · 838 阅读 · 0 评论 -
理解和使用NT驱动程序的执行上下文
理解Windows NT驱动程序最重要的概念之一就是驱动程序运行时所处的“执行上下文”。理解并小心地应用这个概念可以帮助你构建更快、更高效的驱动程序。 NT标准内核模式驱动程序编程中的一个重要观念是某个特定的驱动程序函数执行时所处的“上下文”。传统上文件系统开发者最关注这个问题,但所有类型的NT内核模式驱动程序的编写者都能从对执行上下文的深刻理解中获益。小心谨慎地使用执行上下文的概转载 2014-04-13 23:25:08 · 1059 阅读 · 0 评论 -
Windows WRK简介
引子WRK 是微软于 2006 年针对教育和学术界开放的 Windows 内核的部分源码,WRK(Windows Research Kernel)也就是 Windows 研究内核,在 WRK 中不仅仅只提供了 Windows 内核模块的部分代码,其还提供了编译工具,也就是通过这个编译工具,你可以将你的 WRK 编译成一个 EXE 文件,也就是内核可执行模块,转载 2014-04-12 22:30:26 · 942 阅读 · 0 评论 -
重载内核全程分析笔记
重载内核内容:1、 将内核文件加载到内存2、 进行基址重定位3、 重定位ssdt结构4、 Hook KiFastCallEntry,让RING3进程调用走新内核下面一步一步的进行分析1、 加载内核文件我们要加载哪一个文件呢?答案是:ntkrnlpa.exe,我测试的系统的XP sp3,该文件所在目录为C:\WINDOWS\system32\ntkrnlpa.e转载 2014-04-28 18:15:28 · 674 阅读 · 0 评论 -
深入理解CRITICAL_SECTION
临界区是一种防止多个线程同时执行一个特定代码节的机制,这一主题并没有引起太多关注,因而人们未能对其深刻理解。在需要跟踪代码中的多线程处理的性能时,对 Windows 中临界区的深刻理解非常有用。本文深入研究临界区的原理,以揭示在查找死锁和确认性能问题过程中的有用信息。它还包含一个便利的实用工具程序,可以显示所有临界区及其当前状态。在我们许多年的编程实践中,对于 Win32 临界转载 2014-04-13 14:07:11 · 829 阅读 · 0 评论 -
SSDT HOOK中的获取函数服务号
SSDT HOOK中的获取函数服务号:(因为SSDT中的函数在ntdll.dll均为导出函数)R3下:1)LoadLibrary "ntdll.dll" 2)GetProcAddress 得到ntdll.dll导出表中函数地址address 3)FunctionIndex = *( PULONG )( address + 1 ) 4)转载 2014-08-01 10:06:03 · 1532 阅读 · 0 评论 -
Windows NT Stack Trace
在系统软件开发中有时会有得到函数调用者的信息的需要,为此WindowsNT专门提供了调用 RtlGetCallerAddress为内核开发者使用,但它并没有公开所以也就不能为驱动开发者使用。 然而在兼容过程中又无法避免使用它,所以我们只好探究其原理。 RtlGetCallerAddress可以由两种方法实现,其原型如下: VOID RtlGetCallersAddress( OUT PVOID *转载 2014-07-28 16:04:02 · 1157 阅读 · 0 评论 -
NTDLL.dll1 : What Goes On Inside Windows 2000: Solving the Mysteries of the Loader
SUMMARY DLLs are a cornerstone of the Windows operating system. Every day they quietly perform their magic, while programmers take them for granted. But for anyone who's ever stopped to think about ho转载 2014-07-10 16:40:57 · 2045 阅读 · 0 评论 -
NTDLL.dll2 : Under The Hood
Code for this article: Sept99Hood.exe (5KB)Matt Pietrek does advanced research for the NuMega Labs of Compuware Corporation, and is the author of several books. His Web site at http://www.wheaty.net转载 2014-07-11 17:42:48 · 831 阅读 · 0 评论 -
NTDLL.dll3 : Export Function
打开NTDLL.dll,惊奇的发现原来CRT的许多基本函数居然都是在这里实现的!甚至包括qsort,ceil这样的函数,还有臭名昭著的strcpy(严格来讲,这只能怪使用者不当心)。堆的释放,进城管理,似乎都是在这。于是,我决定,仔细察看以下它,这1410个函数是做什么的用户模式的代码在调用系统内核函数的时候,首先把一个叫做system call number的数放在EAX中,把参数放在其转载 2014-07-14 13:46:28 · 1954 阅读 · 0 评论 -
NTDLL.dll4 : Load and Unload (ZT)
一、前言在前一段时间,我遭遇了一个现象诡异的Bug,最后原因归结 为在DllMain里错误地调用了FreeLibrary(在本文最后对此Bug有详细的解释)。MSDN里关于禁止在DllMain里调用 LoadLibrary和FreeLibrary的解释过于含糊不清,所以我重温了一遍Russ Osterlund的"Windows 2000 Loader"一文,并仔细阅读了泄漏的Win20转载 2014-07-14 13:46:04 · 1308 阅读 · 0 评论 -
ZwSystemDebugControl函数R3读R0的内核数据
使用ZwSystemDebugControl,可以在ring3下读写内核空间虚拟内存//读取MEMORY_CHUNKS QueryBuff;DWORD *address2=new DWORD[dwServices];QueryBuff.Address = dwKernelBase+dwKiServiceTable;QueryBuff.Data = address2;转载 2014-06-21 16:00:47 · 2998 阅读 · 0 评论 -
NTDLL.dll5 : 导出函数表
==================================================Function Name : __isasciiAddress : 0x7c94c8a2Relative Address : 0x0002c8a2Ordinal : 1185 (0x4a1)Filename :转载 2014-07-29 10:55:32 · 2819 阅读 · 0 评论 -
NTDLL.dll6 : 导出函数原型
代码Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->NTSYSAPINTSTATUSNTAPINtAcceptConnectPort( OUT PHANDLE PortHandle, IN PVOID PortIdent转载 2014-07-31 13:46:43 · 1212 阅读 · 0 评论 -
Windows内核模式开发笔记
* 通过 NTSTATUS 获得相应的字符串 使用函数RtlNtStatusToDosError可以获得与NTSTATUS相对应的Windows错误码。 微软网站上说用API函数 FormatMessage 可获得相应的字符串,但是在调用前必须先用 LoadLibrary 载入 "NTDLL.DLL"。 文章链接 - http://support.microsof转载 2013-09-16 19:56:15 · 814 阅读 · 0 评论 -
2.1 Windows主要系统组件
1. 对象管理器:导出的接口函数包含一个"Ob"前缀,例如ObGetObjectSecurity2. 内存管理器:导出的接口函数包含一个"Mm"前缀,例如MmGetPhysicalAddress3. 进程和线程管理器:导出的接口函数包含一个"Ps"前缀,例如PsCreateSystemThread4. I/O管理器:导出的接口函数包含一个"Io"前缀,例如IoCreateDevice转载 2013-07-11 00:30:19 · 1219 阅读 · 0 评论 -
2.3 常见内核数据结构 : 驱动框架常见数据结构
驱动框架常见数据结构:1. 驱动对象结构(DRIVER_OBJECT)typedef struct _DRIVER_OBJECT {CSHORT Type;CSHORT Size;PDEVICE_OBJECT DeviceObject;ULONG Flags;PVOID DriverStart;ULONG DriverSize;PVOID DriverSect转载 2013-07-11 21:04:55 · 552 阅读 · 0 评论 -
2.3 常见内核数据结构 : 其他一些常见的数据结构
其他一些常见的数据结构:1. 对象结构xp sp3下的对象结构kd> dt ntkrpamp !_OBJECT_HEADERPointerCountHandleCountNextToFreeType Ptr32 _OBJECT_TYPENameInfoOffsetHandleInfoOffsetQuotaInfoOffsetFlagsObjectCr转载 2013-07-12 00:44:57 · 661 阅读 · 0 评论 -
2.3 常见内核数据结构 : 进程与线程数据结构
进程与线程数据结构:1. 执行体进程块(EPROCESS)驱动程序通过PsGetCurrentProcess函数获取指向当前进程的执行体进程块指针kd> dt nt!_EPROCESSPcb _KPROCESSProcessLockCreateTimeExitTimeRundownProtectUniqueProcessId Ptr32 VoidActive转载 2013-07-11 22:37:15 · 940 阅读 · 0 评论 -
2.3 常见内核数据结构 : 存储系统数据结构
存储系统数据结构:1. 卷参数块(VPB)kd> dt nt!_VPBType SizeFlagsVolumeLabelLengthDeviceObject Ptr32 _DEVICE_OBJECTRealDevice Ptr32 _DEVICE_OBJECTSerialNumberReferenceCountVolumeLabel [32] Uint转载 2013-07-11 23:04:03 · 775 阅读 · 0 评论 -
3.1 NT式驱动程序基本结构
////////////////////////////////////////////////////////////////////////////头文件//////////////////////////////////////////////////////////////////////////#include "ntddk.h"/////////////////转载 2013-07-23 23:39:21 · 119 阅读 · 0 评论 -
3.3 同步技术 :事件对象
3.3.1 事件对象使用事件对象是一种常见的同步方法。驱动程序可以使用事件对象同步完成IRP,或者驱动线程间同步执行某些操作。要使用事件对象,首先需要调用KeInitializeEvent, IoCreateNotificationEvent或者IoCreateSynchronizationEvent初始化事件。KeInitializeEvent函数原型:VOID KeInitiali转载 2013-07-25 23:50:07 · 1719 阅读 · 0 评论 -
3.2 应用层与内核的通信方法 :访问数据的I/O方式、读写驱动程序、发送I/O控制码、内存共享
3.2.1 访问数据的I/O方式:1. 缓冲方式I/O2. 直接方式I/O3. 非缓冲非直接方式I/O3.2.2 读写驱动程序读写驱动程序,即应用程序或者上层驱动程序发送主功能码为IRP_MJ_READ和IRP_MJ_WRITE的I/O请求包(IRP)。转载 2013-07-24 23:18:00 · 1316 阅读 · 0 评论 -
3.5 字符串操作
ANSI_STRING和UNICODE_STRING操作3.5.1 STRING、ANSI_STRING和UNICODE_STRINGSTRING和ANSI_STRING是同一种数据结构,都是对ASCII字符的封装;UNICODE_STRING是对Unicode字符的封装STRING的数据结构为:typedef strunct _STRING{__maybevalid转载 2013-08-19 22:51:09 · 905 阅读 · 0 评论 -
3.6 内存管理
3.6.1 分配系统空间内存驱动程序可以在设备扩展中保存指向系统分配空间的指针,这个系统分配的空间可以作为保存设备指定信息的全局存储区域。PVOID ExAllocatrPoolWithTag {IN POOL_TYPE PoolType, IN SIZE_T NumberOfBytes, IN ULONG Tag};释放函数:ExFreePool或者ExFreePoolWithTag转载 2013-08-19 23:18:03 · 931 阅读 · 0 评论 -
KiFastCallEntry() 机制分析
KiFastCallEntry() 机制分析概述Win32 子系统 API 调用ntdll!ZwWriteFile() 函数ntdll!KiFastSystemCall() 函数_KUSER_SHARED_DATA 结构切入 KiFastCallEntry() 函数读取 TSS 信息KTRAP_FRAME 结构系统服务例程号与 ServiceTableServi转载 2013-08-22 00:38:29 · 790 阅读 · 0 评论 -
KiFastCallEntry() 函数地址的获取
Windows API和系统调用的关系肯定会有人说Windows API就是系统调用,系统调用就是Windwos API,是这样的么?负责任的说:不是这样的!先从广义上来说,Windows API是对于整个Windows操作系统自身的程序代码之外的应用程序来说的,而系统调用是Windows内核对于非内核程序代码之外的Windows系统程序代码来说的。也就是说系统调用要比Window转载 2013-08-22 00:45:24 · 1545 阅读 · 0 评论 -
3.4 IRP处理
简要介绍IRP的生成、创建、发送等,然后介绍多种IRP处理示例。3.4.1 简单的IRP流动图应用程序打开磁盘上一个数据文件的基本流程:1. Windows子系统使用系统服务函数NtCreateFile打开目标文件2. I/O管理器调用对象管理器解析命名的文件,然后调用安全引用监视器检查子系统是否拥有对目标文件对象的访问权限3. 如果目标文件所在的卷还没有被加载,I/O转载 2013-08-01 00:51:12 · 1055 阅读 · 0 评论 -
3.6 注册表编程
3.6 注册表编程驱动程序和其它的系统组件一样,依赖于注册表存储配置信息,系统本身也使用注册表存储所有与设备、驱动相关的信息3.7.1 注册表对象管理函数转载 2013-08-23 23:32:59 · 959 阅读 · 0 评论 -
通过PEB的Ldr枚举进程内所有已加载的模块
一、几个重要的数据结构,可以通过windbg的dt命令查看其详细信息_PEB、_PEB_LDR_DATA、_LDR_DATA_TABLE_ENTRY 二、技术原理1、通过fs:[30h]获取当前进程的_PEB结构2、通过_PEB的Ldr成员获取_PEB_LDR_DATA结构3、通过_PEB_LDR_DATA的InMemoryOrderModuleLi转载 2014-08-19 09:58:38 · 1993 阅读 · 0 评论