Windows内核与TP保护

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
应用程序 (.exe) 调用CreateFile Win32子系统 (Kernel32.dll) 调用NtCreateFile Native API (Ntdll.dll) 硬件
硬件抽象层
设备驱动
发送IRP请求
I/O管理器
用户模式 内核模式
系统服务函数
调用NtCreateFile系统服务
百度文库
ReactOS简介
PE文件导入表
typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstThunk; }; DWORD TimeDateStamp; DWORD ForwarderChain; DWORD Name; DWORD FirstThunk; } IMAGE_IMPORT_DESCRIPTOR;
// 表示结尾时此字段为0 //指向导入名字表INT的RVA数组首地址 // -1 if no forwarders //动态链接库名称 //指向导入地址表的首地址
PE导入表结构(装入前)
IMAGE_THUNK_DATA IMAGE_THUNK_DATA 01 21 函数名1 函数名2
……
OriginalFirstThunk TimeDateStamp ForwarderChain 0(结束符)
PE文件可选头部
typedef struct _IMAGE_OPTIONAL_HEADER { // Standard fields. WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; //程序执行入口 DWORD BaseOfCode; //代码区块的其实 RVA DWORD BaseOfData; //数据区块的其实 RVA // NT additional fields. DWORD ImageBase; //首选装载地址 DWORD SectionAlignment; //内存中区块对其大小 DWORD FileAlignment; //文件中区块对其大小 WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; //装入内存后的总大小 DWORD SizeOfHeaders; //DOS头+PE头+区块表的总大小 DWORD CheckSum; //映像的校验和 WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; //数据目录表个数 IMAGE_DATA_DIRECTORY DataDi rectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; //数据目录表 } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
函数名 函数名 函数名
0 2 3
PE数据目录表
数据目录表在PE可选头部的最后一个元素中,一般而言,这是一个大小为15的数组, 数组的每一项元素如下:
PE文件的PE头部
typedef struct _IMAGE_NT_HEADERS { DWORD Signature; //PE头标志,为PE IMAGE_FILE_HEADER FileHeader; //文件头 IMAGE_OPTIONAL_HEADER32 OptionalHeader; //可选头 } IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32; typedef struct _IMAGE_FILE_HEADER { WORD Machine; //运行平台 WORD NumberOfSections; //区块数量 DWORD TimeDateStamp; //文件创建时间 DWORD PointerToSymbolTable; //指向符号表 DWORD NumberOfSymbols; //符号表中符号个数 WORD SizeOfOptionalHeader; //可选头的大小 WORD Characteristics; //文件属性 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
回顾Windows PE文件结构
PE文件是Windows系统的可执行文件,包括应用层的可执行exe文件、动态链接库dll文件、驱 动程序文件sys文件等,它们都以PE格式存储。
文件尾
区块间隙,0填充
文件头 文件 内存
基地址
PE文件DOS头部
typedef struct _IMAGE_DOS_HEADER { // WORD e_magic; // WORD e_cblp; // WORD e_cp; // WORD e_crlc; // WORD e_cparhdr; // WORD e_minalloc; // WORD e_maxalloc; // WORD e_ss; // WORD e_sp; // WORD e_csum; // WORD e_ip; // WORD e_cs; // WORD e_lfarlc; // WORD e_ovno; // WORD e_res[4]; // WORD e_oemid; // WORD e_oeminfo; // WORD e_res2[10]; // LONG e_lfanew; // } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; DOS .EXE header Magic number,标志,为MZ Bytes on last page of file Pages in file Relocations Size of header in paragraphs Minimum extra paragraphs needed Maximum extra paragraphs needed Initial (relative) SS value Initial SP value Checksum Initial IP value Initial (relative) CS value File address of relocation table Overlay number Reserved words OEM identifier (for e_oeminfo) OEM information; e_oemid specific Reserved words PE文件头的文件偏移
ReactOS是个开源项目,这个项目的目标是开发一个开源的Windows操作系统,其采用了与Windows一样 的NT框架,兼容Windows的驱动程序和应用程序,目前最新版本是ReactOS 0.4.7。
WRK简介
WRK(Windows Research Kernel)也就是Windows研究内核,是微软于2006年针对教育和学术界开放的 Windows内核的部分源码,可以对其进行修改、编译,并且可以用这个内核启动Windows操作系统。 WRK提供了两种源码,一个是X86架构的,也就是32为系统源码,是基于Windows Server 2003 另一种是AMD64架构的,也就是64为系统源码,是基于Windows XP x64 Professional
PE导出表结构
DLL名称 ……
Name Base
NumberOfFunctions NumberOfNames AddressOfFuntions AddressOfNames AddressOfNameOrdinals
0函数地址 1函数地址 2函数地址 3函数地址
函数名地址 函数名地址 函数名地址
Windows内核与TP保护
2018年1月
引言 - - Windows的分层结构
应用程序 应用程序
Win32子系统
其它子系统
用户模式 内核模式
Native API
系统服务函数 执行体组件 IO管理
对象管理 进程管理
虚拟内存 配置管理 其它组件
驱动 程序
内核
硬件抽象层
具体硬件
引言 - - 以CreateFile为例
PE文件区块表
typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // 节表名称,如“.text” union { DWORD PhysicalAddress; // 物理地址 DWORD VirtualSize; // 虚拟大小 } Misc; DWORD VirtualAddress; // 节区的 RVA 地址 DWORD SizeOfRawData; // 在文件中对齐后的尺寸 DWORD PointerToRawData; // 在文件中的偏移量 DWORD PointerToRelocations; // 在OBJ文件中使用,重定位的偏移 DWORD PointerToLinenumbers; // 行号表的偏移(供调试使用地) WORD NumberOfRelocations; // 在OBJ文件中使用,重定位项数目 WORD NumberOfLinenumbers; // 行号表中行号的数目 DWORD Characteristics; // 节属性如可读,可写,可执行等 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
n
……
Name
FirstThunk
User32.dll IAT 函数1的地址 函数2的地址 …… 0(结束符)
PE文件导出表
TYPEDEF STRUCT _IMAGE_EXPORT_DIRECTORY { DWORD CHARACTERISTICS; DWORD TIMEDATESTAMP; WORD MAJORVERSION; WORD MINORVERSION; DWORD NAME; //指向该导出表的文件名字符串 DWORD BASE; //序号的基数 DWORD NUMBEROFFUNCTIONS; //所有的导出函数数目 DWORD NUMBEROFNAMES; //以函数名导出的函数个数 DWORD ADDRESSOFFUNCTIONS; // 指向函数虚拟地址数组(导出地址表 EAT) DWORD ADDRESSOFNAMES; // 指向函数名虚拟地址数组(导出名称表 ENT) DWORD ADDRESSOFNAMEORDINALS; // 指向函数序号虚拟地址数组 (序号) } IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY;
n
……
Name
FirstThunk
User32.dll IAT IMAGE_THUNK_DATA IMAGE_THUNK_DATA …… 0(结束符)
PE导入表结构(装入后)
INT IMAGE_THUNK_DATA IMAGE_THUNK_DATA 01 21 函数名1 函数名2
……
OriginalFirstThunk TimeDateStamp ForwarderChain 0(结束符)
相关文档
最新文档