目录 Ring3挂起进程,跟恢复进程. 一丶简介 二丶代码 Ring3挂起进程,跟恢复进程.
挂起进程其实就是在创建进程的时候不让其先执行.然后获取它的EIP 将它的EIP变成我们ShellCode所在的内存.进行执行.不难.
Intel的x86处理器是通过Ring级别来进行访问控制的,级别共分4层,从Ring0到Ring3(后面简称R0、R1、R2、R3)。R0层拥有最高的权限,R3层拥有最低的权限。
4.IAT HOOK (ring3 用) IAT是可执行文件的导入表,记录可执行文件使用的其它DLL中的函数,通过替换IAT表中的函数地址,可以hook相应DLL中的函数调用。...5、Inline Hook方法 (ring 0和ring3 都可以用) Inline hook的工作流程: 1)验证内核API的版本(特征码匹配)。 2)撰写自己的函数,要完成以上三项任务。
本文作者:x-encounter 之前一期我们学习了 IAT 的基本结构,相信大家对 C++ 有了一个基本的认识,这一期放点干货,我把 ring3 层恶意代码常用的编程技术给大家整理了一下,所有代码都经过我亲手调试并打上了非常详细的注释供大家学习...我会在其中挑出几个,采用反汇编的方式,给大家展示恶意代码的执行流程以及原理,由于 ring3 层的技术过于古老,希望大家秉着学习和巩固的心态来看待该文章。...在 ring3 层我们只需要了解其原理即可。 InLineHook 与普通 Hook 的区别: InLineHook 是直接在以前的函数替里面修改指令,用一个跳转或者其他指令来达到挂钩的目的。
本文已上传视频教学: https://www.bilibili.com/video/BV1Wy4y1X7Z5/?spm_id_from=333.999.0.0 ...
作者:VXK/CVC.GB 时间:2005-02-05 每次上driverdevelop总看到有人问怎么在Ring0下调用Ring3的代码—— Ring3使用Ring0已经是地球人全知道的事情了...,但是ring0下使用ring3的代码 恐怕很少有人知道,Ratter和Benny这两个高人以及Elzc的作者Elzcor各自提出 过一种方法。...总结起来就是三种方法,Zombie在2004年也提出过一个方法看起 来像是Ratter和Elzcor的方法结合而成~ 当然说其本质都是一种思想把ring3代码搞到ring3的空间去执行,听起来 大家也好像有所明白了吧...,Benny的方法是在Ring0的向Ring3进程插入代码执行, Ratter则是Hook KAPIZ等待用户层调用发生把ring3代码放回Ring3空间,利用 KeUserModeCallBack...今天我来向大家介绍的更像是Ratter和Benny的方法结合,对于Benny的方法, 我不完全采用,我采用的思想仍然是代码放回Ring3空间~ 首先无论如何我们都要有一个进程~ 习习~Windows
这些问题主要是工作中会遇到.包括后面的逆向对抗技术.有的可能只会提供思路.并且做相应的解决与对抗.
29 * * 模块: InjectRing3.c [sys module] * * 平台: Windows XP SP2 * * 描述: * Ring0 注入 Ring3...* 挂起ring3线程后,修改其TrapFrame里的eip,再恢复其执行。...NULL; FuncType KeResumeThread = NULL; //////////////////////////////////////////////// // // 被注入到ring3
ring0调用ring3早已不是什么新鲜事,除了APC,我们知道还有KeUserModeCallback.其原型如下: 代码: NTSTATUS KeUserModeCallback (...OpenProcess(返回后) 这是一个ring3->ring0->ring3的过程。 而KeUserModeCallback的过程是这样的 nt!...需要注意的地方是: (1) ring3的指令只能访问ring3的内存地址,所以如果需要访问数据,必须放在ring3可以访问到的内存中。...Alloced Buffer=0x00370000 //申请到的内存地址 然后把我们在ring3要执行的代码和数据放到申请的buffer里....继续执行 现在回到ring3了,ring3下还是习惯用OD,在KiUserCallbackDispatcher处下断(注意使用条件断点,否则无数飞向user32的调用将会把你淹没)。
内核知识第七讲,内核中设备常用的三种通信方式,以及控制回调的编写 一丶ring3和ring0下的三种通讯方式 ring3和ring0下有常用三种通信方式: 1.缓冲区通信方式 2.直接IO...通信方式 3.其它通信方式 缓冲区通信方式 我们的ring3和ring0通讯的时候.ring3会给一个虚拟地址....然后ring3下的缓冲区拷贝到里面. 然后我们的内核程序操作这个缓冲区之后. 操作系统将这个缓冲区的数据重新写入到ring3下的虚拟缓冲区中....原因是 ring3可以直接和ring0进行通讯了.不需要额外的缓冲区进行操作. ring3的虚拟内存会通过内存映射的方式.映射到高2G的内存. 然后ring3的虚拟内存进行保护....优点: 如果数据量比较大.可以使用这种 缺点: 不安全.如果我们的ring3不进行保护.那么通过C语言进行对ring3缓冲区越界访问.那么就相当于访问ring0的物理内存了.
以前在做网维行业的时候,会用很多监控工具用来监控文件或进程的创建过程,以此来协助解决一些问题。比如 Malware Defender、Process Monit...
同步使用Event 如果ring0跟ring3通讯.就要使用我们上面说的 ring0 -> ring3通讯的命名函数了....IoCreateNotificationEvent 在使用Ring0 -> ring3通讯的时候.我们要了解下这个函数以及其它相关的知识 1.ring0 创建命名事件 - > ring3使用这个事件....IoCreateNotificationEvent ring3想使用ring0下定义的Event很简单....跟 ring 0进行通讯 4.创建控制派遣函数.接受ring3下发的控制吗. 5.使用IoCreateNotificationEvent创建事件对象.用于Ring3跟Ring0的事件同步. 6.注册进程控制回调函数...这样Ring3就会等待到事件了.
METHOD_IN_DIRECT和METHOD_OUT_DIRECT可称为"直接方式",是指系统依然对Ring3的输入缓冲区进行缓冲,但是对Ring3的输出缓冲区并没有缓冲,而是在内核中进行了锁定。...这样Ring3输出缓冲区在驱动程序完成I/O请求之前,都是无法访问的,从一定程度上保障了安全性。如图21.1.14所示。...这两种方式,对于Ring3的输入缓冲区和METHOD_BUFFERED方式是一致的。...得到Ring3的输入缓冲区地址(其中pIrpStack是IoGetCurrentIrpStackLocation(pIrp)的返回);通过pIrp-> UserBuffer得到Ring3的输出缓冲区地址..., "Ring0->Ring3" , strlen ( "Ring0->Ring3" ) + 1); Status = STATUS_SUCCESS;
接下来,我们就先从此前代码中进入 Ring3,然后通过调用门,实现从 Ring3 到 Ring0 的跳转。 2. 原理回顾 这里我们再对特权级跳转的实现原理进行一个简要的介绍。 2.1....从 Ring0 到 Ring3 毋庸置疑,操作系统是启动在最高特权级的 Ring0 下的,那么,在操作系统中如何实现从 Ring0 特权级跳转到应用程序所在的 Ring3 特权级的呢?...创建 Ring3 堆栈段 4.1....编写 Ring3 代码段 8.1. 编写 Ring3 执行代码 我们在 Ring3 代码中调用上面的显示函数,实现“Now, I’m in Ring3”字符串的打印。...长返回 — 从 Ring0 跳转到 Ring3 做了一切准备,只剩下代码最开始进入的地方 — 如何从 Ring0 跳转到 Ring3 了。
METHOD_BUFFERED方式相当于对Ring3的输入输出都进行了缓冲。 ...METHOD_IN_DIRECT和METHOD_OUT_DIRECT可称为"直接方式",是指系统依然对Ring3的输入缓冲区进行缓冲,但是对Ring3的输出缓冲区并没有缓冲,而是在内核中进行了锁定。...这两种方式,对于Ring3的输入缓冲区和METHOD_BUFFERED方式是一致的。...得到Ring3的输入缓冲区地址(其中pIrpStack是IoGetCurrentIrpStackLocation(pIrp)的返回);通过pIrp-> UserBuffer得到Ring3的输出缓冲区地址...->Ring3", strlen("Ring0->Ring3") + 1); Status = STATUS_SUCCESS; Informaiton = strlen
3.CPU运行级别: CPU支持ring0~ring3 4个等级,但是Linux只使用了其中的两个ring0,ring3。...而当CPU处于ring3级别的时候,表示此时CPU正在运行的是用户级别的代码。当发生系统调用或者进程切换的时候,CPU会从ring3级别转到ring0级别。...ring3级别是不允许执行硬件操作的,所有硬件操作都需要内核提供的系统调用来完成。...4.VMX: 为了从CPU层面支持VT技术,Intel-V 在 ring0~ring3 的基础上, 扩展了传统的x86处理器架构,引入了VMX模式,VMX分为root和non-root。...Guest也分ring0~ring3,不过他并不感知自己处于VMX non-root模式下。 ? VMM与Guest的切换 1.
二丶Ring3跟Ring0通讯的几种方式 1.IOCTRL_CODE 控制代码的几种IO 1.METHOD_BUFFERED 通讯方式 METHOD_BUFFERED 在我们内核中 Ring3可以传递控制码给内核层...如果是读写的方式.则都会成功. 3.METHOD_NEITHER 其它方式 使用其它方式.则我们Ring3发送过来的数据 会在IRP堆栈中 我们获取Ring3的数据 PIRPSTACK_LOCATIO...必须保证ring3进程跟内核进程处于同一运行状态中. 对此我们对其内存必须进行检查....三丶Ring3跟Ring0开发区别 1.什么是Ring3 什么是Ring0 CPU提供了4层. 而微软只用了2层. 分别是Ring0到Rign3. 而微软只用Ring0....跟ring3 GetProcAddress相似.一个ring3一个ring0 MmIsAddressValid 判断函数地址是否无效. Ob开头 与内核对象相关的.
堆栈不是ring3的堆栈了....RPL = 0 如果不想提权 就寻找ring3的可访问的代码段....如何指定地址.需要我们在ring3中写代码. 然后将函数地址填入到里面....使用 其中比如0x401230 是我们在ring3看的....可以在内核调试其中看到 我们ring3的代码. int 3 与 retf 这里就说明了我们ring3中调用的函数 是具有内核权限的了. 因为我们是提权了.
OS提供服务 2)发生中断 3)用户进程产生错误(内部中断) 4)用户态企图执行特权命令 核态向用户态转换 1)中断返回 3.Inter CPU的态 Ring0-Ring3(Ring0最核心,Ring3...Requested Privilege Level RPL=0…3 描述符特权级:DPL Descriptor Privilege Level DPL=0…3 Windows:Ring0和Ring3...的通信,提供了句柄以便Ring0访问Ring3
领取专属 10元无门槛券
手把手带您无忧上云