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,进行过滤处理;当我们用调试器对它的进程进行调试时,就会出现打开进程失败,无法加载程序。

参考资料:

郁金香老师讲课资料整理

进程保护原理Hook函数Openprocess的更多相关文章

  1. SSDT Hook实现内核级的进程保护

    目录 SSDT Hook效果图 SSDT简介 SSDT结构 SSDT HOOK原理 Hook前准备 如何获得SSDT中函数的地址呢 SSDT Hook流程 SSDT Hook实现进程保护 Ring3与 ...

  2. 进程隐藏与进程保护(SSDT Hook 实现)(二)

    文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ri ...

  3. Android进程so注入Hook java方法

    本文博客链接:http://blog.csdn.net/qq1084283172/article/details/53769331 Andorid的Hook方式比较多,现在来学习下,基于Android ...

  4. 64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 )

    64位下Hook NtOpenProcess的实现进程保护 + 源码 (升级篇 ) [PS: 如果在64位系统下,出现调用测试demo,返回false的情况下,请修改Hook Dll的代码] glhH ...

  5. 【Hook技术】实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展

    [Hook技术]实现从"任务管理器"中保护进程不被关闭 + 附带源码 + 进程保护知识扩展 公司有个监控程序涉及到进程的保护问题,需要避免用户通过任务管理器结束掉监控进程,这里使用 ...

  6. x64下进程保护HOOK

    目录 x64(32)下的进程保护回调. 一丶进程保护线程保护 1.简介以及原理 1.2 代码 1.3注意的问题 二丶丶回调函数写法 2.1 遇到的问题. 2.2 回调代码 x64(32)下的进程保护回 ...

  7. 进程隐藏与进程保护(SSDT Hook 实现)(一)

    读了这篇文章终于明白大致怎么回事了 文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4 ...

  8. 进程隐藏与进程保护(SSDT Hook 实现)(三)

    文章目录: 1. 引子: 2. 获取当前系统下所有进程: 3. 服务管理(安装,启动,停止,卸载): 4. 应用程序和内核程序通信: 5. 小结: 1. 引子: 关于这个 SSDT Hook 实现进程 ...

  9. HOOK函数(一)——进程内HOOK

    什么是HOOK呢?其实很简单,HOOK就是对Windows消息进行拦截检查处理的一个函数.在Windows的消息机制中,当用户产生消息时,应用程序通过调用GetMessage函数取出消息,然后把消息放 ...

随机推荐

  1. 10个顶级Python实用库,推荐你试试!

    为什么我喜欢Python?对于初学者来说,这是一种简单易学的编程语言,另一个原因:大量开箱即用的第三方库,正是23万个由用户提供的软件包使得Python真正强大和流行. 在本文中,我挑选了15个最有用 ...

  2. Mybatis系列全解(二):Mybatis简介与环境搭建

    封面:洛小汐 作者:潘潘 Mybatis 是一套持久层框架,灵活易用,特别流行. 前言 Mybatis系列全解,我们预计准备10+篇文章,让我们了解到 Mybatis 的基本全貌,真正从入门到上手,从 ...

  3. [数据结构与算法-15]单源最短路径(Dijkstra+SPFA)

    单源最短路径 问题描述 分别求出从起点到其他所有点的最短路径,这次主要介绍两种算法,Dijkstra和SPFA.若无负权优先Dijkstra算法,存在负权选择SPFA算法. Dijkstra算法 非负 ...

  4. go-优雅地关机或重启

    目录 优雅地关机或重启 优雅地关机 什么是优雅关机? 如何实现优雅关机? 优雅地重启 总结 优雅地关机或重启 我们编写的Web项目部署之后,经常会因为需要进行配置变更或功能迭代而重启服务,单纯的kil ...

  5. Apache配置 9.访问控制-Diretory\FileMatch

    (1)介绍 访问控制限制白名单IP,针对文件和目录. (2)目录配置 #vim /usr/local/apache2.4/conf/extra/httpd-vhosts.conf <Virtua ...

  6. android消息线程和消息队列

    基于消息队列的线程通信:           消息队列与线程循环            MessageQueue:           利用链表来管理消息.                  Mess ...

  7. 08、元组tuple

    元组(tuple) 是一个有序且不可变的容器,在里面可以存放多个不同类型的元素 元组是在最后多一个逗号,用于表示它是一个元组 tuple = (11,22,'阿斯顿','媚媚',) #后面多加一个逗号 ...

  8. 2019第十届蓝桥杯省赛及国赛个人总结(java-B组)

    省赛: 今年省赛的题目比18年简单的多,基本都是暴力枚举.BFS之类.还记得去年在山师考蓝桥杯,我这种辣鸡连题目都没看懂.本以为蓝桥会变得越来越难,没想到今年就被打脸了.今年省赛后面三个编程大题一个没 ...

  9. [源码解析] 并行分布式框架 Celery 之架构 (2)

    [源码解析] 并行分布式框架 Celery 之架构 (2) 目录 [源码解析] 并行分布式框架 Celery 之架构 (2) 0x00 摘要 0x01 上文回顾 0x02 worker的思考 2.1 ...

  10. SDK音频测试流程

    概述 在上篇文章中,给小伙伴们讲述了sdk模板在渲染中的流程,我们简单来回顾一下,主要讲述了数据创建.素材替换.音频.文字等四部分,在上次讲述中也因为时间于原因没有特别仔细的去讲述他们.上次我们说到最 ...