当前位置: 首页 > news >正文

Windows内核基础

Windows内核基础

参考:加密与解密(从文章题目应该可以看出来),逆向工程核心原理

我只写一些我觉得有用或者有趣的东西.

内核基础理论

权限级别:R0-3,Intel CPU的四个级别.原本是打算让R0运行内核,让R1,R2运行设备驱动的,结果Win和Linux都直接拿R0了.现在为了方便只有R0和R3,我估计就是内核态和用户态.

内核和用户通信:API底层的函数实际在ntdll.dll中,成为Native API,名字以Nt(直接调用对应函数)或者Zw(通过KiSystemService最终跳转到对应函数,而且会修改Previous Mode为内核态)开头,两个往往成对出现,实际上一样的.这些底层API再通过syscall到内核.

Native API会检查Previous Mode,如果会用户态会严格检查参数,如果是内核态就不会,所以ZwAPI可以提高效率.

内核主要是由一堆驱动组成的

Windows内核部分会调用一些内核层的函数。这些函数都以固定的前缀开始,分别属于内核中不同的管理模块。通过这些前缀,根据函数名就可以大致知道这个函数所属的层次和模块了。这些主要的前缀如下:

  • Ex:管理层。“Ex”是“Executive”的开头两个字母。
  • Ke:核心层。“Ke”是“Kermel”的开头两个字母。
  • HAL:硬件抽象层。“HAL”是“HardwareAbstractionLayer”的缩写。
  • Ob:对象管理。“Ob”是“Obiect”的开头两个字母。
  • MM:内存管理。“MM”是“MemoryManager”的缩写。
  • Ps:进程(线程)管理。“Ps”表示“Process”
  • Se:安全管理。“Se”是“Security”的开头两个字母。
  • Io:IO管理。
  • Fs:文件系统。“Fs”是“FileSystem”的缩写。
  • Ce:文件缓存管理。“Ce”表示“Cache"。
  • Cm:系统配置管理。“Cm”是“ConfigurationManager”的缩写。
  • Pp:即插即用管理。“Pp”表示“PnP”。
  • Rtl:运行时程序库。“Rtl”是“RuntimeLibrary”的缩写。
  • Zw/Nt:对应于SSDT中的服务函数,例如与文件或者注册表相关的操作函数。
  • Flt:Minifilter文件过滤驱动中调用的函数。
  • Ndis:Ndis网络框架中调用的函数

与应用层函数不同的是,在调用内核函数的时候需要注意它的IRQL(InterruptRequestLevel 中断请求级别)要求。

重要内核数据结构

TEB和PEB

这里东西太多了,着重说明重要的.

TEB(Thread Environment Block 线程环境块)

NtCurrentTeb()或者__readfsdword()可获取teb位置,实际就是读取fs:[0],32位下fs只有16位,它持有SDT(段描述符)的索引,进而可以获得TEB的内存地址

第一个成员NT_TIB Tib,异常处理用,详情看异常处理的文章.

一个公式 FS:0x18 = TEB.NtTib.Self = address of TIB = address of TEB = FS:0 7FFDF000

*FS:0是段内存的起始地址,FS寄存器指向(Indexing)一个段描述符,而该描述符又指向段内存的起始地址。

FS:[0x30]是PEB

PEB

PEB+0x2 = BeingDebugged 检测是否被调试 1为是,IsDebuggerPresent就是这个返回这个值

PEB+0x8 = ImageBaseAddress 进程基址, GetModuleHandle就是返回这个值

PEB+0xC = LDR, LDR从图中可以看出_LDR_DATA_TABLE_ENTRY结构,存放着已加载模块链表,从上到下分别存放着不同顺序存储的:加载顺序,内存位置,初始化顺序

剩下的看结构体吧,可以通过这个获取到各个系统dll的基址

还有ProcessHeap与NtGlobalFlag,详情看反调试.

内核6的会话

WindowsOSKernel6(Vista、7、8等)开始采用一种新的“会话”(Session)管理机制.

简单地说,会话指的是登录后的用户环境。大部分OS允许多个用户同时登录,并为每个登录的用户提供独立的用户环境。以Windows操作系统为例,“切换用户”可以创建本地用户会话, “远程桌面连接”可以创建远程用户会话。

Windows7与WindowsXP有1个非常大的不同。两个操作系统中都登录了2个用户,但Windows7中共有3个会话(0、1、2),而WindowsXP中只有2个会话(0、1)。两者差别在于,第一个登录的用户的会话ID是不同的。WindoWsXP中,第一个登录系统的用户的会话ID为O;而WindoWs7中,第一个登录系统的用户的会话ID为1,非系统会话。这种细微的差别使在XP系统中可以使用的技术在Windows7中无法正常使用。

http://www.sczhlp.com/news/52549/

相关文章:

  • Windows下的注入和Hook
  • 壳原理和PE自制壳
  • 反调试和反反调试
  • Windows异常处理机制
  • 奥派电子商务网站建设论文平安区wap网站建设公司
  • 长沙网站推广合作北京seo业务员
  • 网站对品牌的作用上海有哪些网络公司
  • 国外html5网站铜川建设网站
  • 北京手机建站模板免费建立公司网站
  • C++风格的类型转化
  • C++STL
  • C++重载运算符
  • C++输入输出和字面量
  • 哪个网站可以做经济模拟题音乐网站开发的意义
  • 业网站制作网上效果代码网站可以下载吗
  • 潍坊市做网站的公司广州站停运最新消息
  • 河源市网站建设市场营销网站建设
  • 管理网站用什么系统好艺术字体在线生成器毛笔字
  • 自己有网站怎么优化阿里云网站方案建设书
  • 做网站需要ps吗南宁网站建设教学
  • 建可收费的网站陕西网络推广网站
  • C++模板
  • C++右值引用,移动语义和完美转发
  • C++异常处理
  • C++智能指针
  • C++杂七杂八小知识和一些基础语法
  • 开一个网站需要什么网站专题建设方案
  • 国际学校网站如何建设毕节建设局网站
  • 云南专业网站建站建设有没有教做化学药品的网站
  • 网上商城网站源码我的网站wordpress