• 进程保护原理Hook函数Openprocess


    Win32子系统:                                                                                                                                                               

    Win32是Windows的一个子系统,还有另外的子系统如OS/2、POSIX等,不同的子系统系统提供了不同的编程接口,即API,一般说的API指的就是Win32 API。

     

    Win32子系统是最纯正的Windows子系统,提供了大量的API函数,程序员只需要熟练的使用这些API就可以写出Windows应用程序,当然程序员也可以考虑第三方库,如VC提供的MFC,但这些库不过是在应用程序和Win32子系统中间加了一层封装而已,没有本质的区别。

     

    Windows API 分为三类分别是USER函数,GDI函数,和KERNEL函数

    USER函数(user32.dll):这类函数管理窗口,菜单,对话框和控件

    GDI函数(gdi32.dll):这类函数在物理设备上执行绘图操作 -Shadow SSDT,-Dwin32k.sys

    KERNEL函数(kernel32.dll):这类函数管理非GUI资源,例如,进程,线程,文件和同步服务等.

    ntkrnlpa.exe+ ntkrnlpa.lib

     

    Native API(Ntdll.dll)

    Native API 是可由用户模式和核心模式程序调用的NT系统服务集接口,它们直接由NT操作系统实现。

     

    SSDT

    SSDT的全称是System Services Descriptor Table,系统服务描述符表。这个表就是一个把ring3的Win32 API和ring0的内核API联系起来。SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用的信息,诸如地址索引的基地址、服务函数个数等。

    1、应用层到内核的流程

     OpenProcess为例:

    //Ring3环应用程序的调用流程

    XX.dll----kernel32.OpenProcess---ntdll.NtOpenProcess=======ntdll.ZwOpenProcess

     

    7C92D5E0>  B8 7A000000     MOV EAX,7A

    7C92D5E5    BA 0003FE7F     MOV EDX,7FFE0300

    7C92D5EA    FF12            CALL DWORD PTR DS:[EDX]

    7C92D5EC    C2 1000         RETN 10

     

    //Ring3环到Ring0环的切换

    7FFE0300  7C92E4F0 ntdll.KiFastSystemCall  //EAX参数

    7C92E4F0>  8BD4            MOV EDX,ESP

    7C92E4F2    0F34            SYSENTER    //切换到内核

    0xA53A41AA   0x805CC40A

     

    //进入内核以后,通过查找SSDT,找到内核函数ntkrnlpa.NtOpenProcess进行调用

    jmp       ntkrnlpa.NtOpenProcess

    内核调用流程:

    内核ntkrnlpa.ZwOpenProcess---SSDT--ntkrnlpa.NtOpenProcess

     

    2、浅谈过保护原理

      调试进程必经过程:

      获取进程ID-OpenProcess打开被调试的进程;

      Read ProcessMemory()读取调试进程的PE镜像;

      WriteProcessMemory()写进程的内存下断点。

      很多软件 保护进程 的方法就是在Ring0环HOOK掉OpenProcess函数的内核函数NtOpenProcess,进行过滤处理;当我们用调试器对它的进程进行调试时,就会出现打开进程失败,无法加载程序。


    参考资料:

    郁金香老师讲课资料整理

  • 相关阅读:
    timestamp的两个属性:CURRENT_TIMESTAMP 和ON UPDATE CURRENT_TIMESTAMP
    python 典型文件结构
    PHP接口开发加密技术实例原理与例子
    一个高效的敏感词过滤方法(PHP)
    Thinkphp自动验证规则
    PHP解析xml文件时报错:I/O warning : failed to load external entity
    访问php网站报500错误时显示错误显示
    15个最受欢迎的Python开源框架
    分布式监控系统开发【day38】:报警策略设计(二)
    分布式监控系统开发【day38】:报警阈值程序逻辑解析(三)
  • 原文地址:https://www.cnblogs.com/csnd/p/11800746.html
Copyright © 2020-2023  润新知