Windows系统调用中API从3环到0环(下)
2021-05-19 14:31
                         标签:tchar   service   调用   roc   style   快速   code   system   描述     Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html Windows系统调用中API从3环到0环(下) 如果对API在三环的部分不了解的,可以查看 Windows系统调用中的API三环部分(依据分析重写ReadProcessMemory函数 上篇:Windows系统调用中API从3环到0环(上) 这篇文章分为上下两篇,其中上篇初步讲解大体轮廓,下篇着重通过实验来探究其内部实现,最终分析两个函数(快速调用与系统中断),来实现通过系统中断直接调用内核函数。   一、INT 0x2E进0环   .text : 77F070C0            // 之前调用该函数时 mov eax, 0x115,向eax传入一个函数号   1)在GDT表中查看0x2eh     在保护模式的门这一节中,我们了解到当发生中断时,操作系统会查找idt表,根据中断号在idt表中找到中断门描述符,从中断门描述符中读取CS:EIP的信息。     之后,SS EIP 通过搜索GDT表,该表中存放着各个TSS描述符(每个进程一个TSS,内核一个TSS,TSS存放各种寄存器用于任务切换),来查找内核的 SS EIP。     如图:我们通过windbg来查找出该地址 gdt+2e*8             根据中断门描述符属性将 83e8ee00`00082fee 拆分拼接之后可知SS:08 / EIP:83e82fee          2)查看 EIP:83e82fee 这个函数     kd> u 83e82fee     该 nt!KiSystemService函数是真正的内核函数,并不是ntdll.dll模块下,其存在于ntoskrnl.exe / ntkrnlpa.exe中(根据分页模式不同选用不同的程序)   二、通过 systenter进入0环   MSR寄存器存着进入内核的 CS、ESP、EIP的寄存器的值,SS=IA32_SYSENTER_CS+8。      1)windbg查看这个MSR寄存器的值     rdmsr 174     //查看CS     rdmsr 175    //查看ESP     rdmsr 176    //查看EIP         2)查看EIP这个函数    kd> u 83e830c0   三、通过中断来重写ReadProcessMemory函数(通过快速调用时的实现可以查看这篇Windows系统调用中的API三环部分(依据分析重写ReadProcessMemory函数))                Windows系统调用中API从3环到0环(下) 标签:tchar   service   调用   roc   style   快速   code   system   描述    原文地址:https://www.cnblogs.com/onetrainee/p/11706384.html
  .text : 77F070C0                 lea     edx, [esp + arg_4] // 当前参数的指针存储在 edx中
  .text : 77F070C4                 int     2Eh; // 通过中断门的形式进入到内核中

    nt!KiSystemService:
    83e82fee 6a00            push    0
    83e82ff0 55              push    ebp
    83e82ff1 53              push    ebx
    83e82ff2 56              push    esi
    83e82ff3 57              push    edi
    83e82ff4 0fa0            push    fs
    83e82ff6 bb30000000      mov     ebx,30h
    83e82ffb 668ee3          mov     fs,bx

    nt!KiFastCallEntry:
    83e830c0 b923000000      mov     ecx,23h
    83e830c5 6a30            push    30h
    83e830c7 0fa1            pop     fs
    83e830c9 8ed9            mov     ds,cx
    83e830cb 8ec1            mov     es,cx
    83e830cd 648b0d40000000  mov     ecx,dword ptr fs:[40h]
    83e830d4 8b6104          mov     esp,dword ptr [ecx+4]
    83e830d7 6a23            push    23h
    其是调用nt!KiFastCallEntry这个函数,跟nt!KiSystemService一样,该函数是真正的内核函数。 1 #include "pch.h"
 2 #include 
文章标题:Windows系统调用中API从3环到0环(下)
文章链接:http://soscw.com/index.php/essay/87683.html