zoukankan      html  css  js  c++  java
  • 进程保护原理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,进行过滤处理;当我们用调试器对它的进程进行调试时,就会出现打开进程失败,无法加载程序。


    参考资料:

    郁金香老师讲课资料整理

  • 相关阅读:
    关于无法使用xx-pc附加到应用程序iisexpress.exe
    iis 7.5 0x80004005 静态文件 html、js、css 500错误
    递归删除指定目录下面的所有文件夹和文件
    http请求相关
    常用分页写法
    获取与Url链接相关的信息
    解决iis7 0x80070002 错误代码问题
    实现Cookie跨域共享
    文本框值改变事件
    动态加载、移除、替换JS和CSS
  • 原文地址:https://www.cnblogs.com/csnd/p/11800746.html
Copyright © 2011-2022 走看看