win2k下的APC机制

Cobalt Strike红队隐蔽操作实战:进程注入、无文件攻击与流量伪装 在网络安全攻防对抗中,命令与控制(C2)框架是红队进行渗透测试和后渗透阶段的关键工具。其核心原理在于通过隐蔽的通信渠道,实现对目标系统的远程控制与数据窃取,技术价值在于能够模拟高级持续性威胁(APT)的攻击手法,帮助评估防御体系的纵深检测能力。在实际应用场景中,红队工程师需要掌握多种规避技术,以绕过终端检测与响应(EDR)和网络监控。本文聚焦于Cobalt Strike这一成熟C2框架,深入探讨了**进程注入与父进程欺骗**以及**无文件落地与内存执行**等高级隐蔽技巧。这些方法通过伪装恶意进程为合法系统进 阅读详情
 
APC是运行在APC_level irql 上的内核机制。win2k下APC当作object来管理,在内核中定义的相应数据结构是KAPC 如下: typedef struct _KAPC {     CSHORT Type;//对象类型,这里应该是ApcObject     CSHORT Size;//KAPC结构的大小,应该为sizeof(KAPC)     ULONG Spare0; struct _KTHREAD *Thread;--》这个thread是此APC的owner LIST_ENTRY ApcListEntry//指向下一个apc object,all APC object list as one double linked list PKKERNEL_ROUTINE KernelRoutine;//指向一个函数,在apc_level irql时在内核台运行 PKRUNDOWN_ROUTINE RundownRoutine;//指向一个例程,如果这个apc在某个线程的apc队列中,那么当这个线程终止时,该例程被执行(可选) PKNORMAL_ROUTINE NormalRoutine;//指向一个例程,在passive_level irql且指定的处理器模式上运行该例程 PVOID NormalContext;//传递给NormalRoutine的参数1 // // N.B. The following two members MUST be together. // PVOID SystemArgument1;//传递给NormalRoutine的参数2 PVOID SystemArgument2;//传递给NormalRoutine的参数3   CCHAR ApcStateIndex;//是它指向的thread 的ApcStatePointer[2]数组的index(0 or 1)     KPROCESSOR_MODE ApcMode;//该apc对象的处理器模式:kernel mode 或者user mode     BOOLEAN Inserted;//该apc是否插入线程的apc队列 } KAPC, *PKAPC, *RESTRICTED_POINTER PRKAPC; thread object中有几个项是关于apc的,分别是: typedef struct _KTHREAD { ..................... KAPC_STATE ApcState;//该thread当前运行时候维持的apc对象queue,有两个列表kernel mode 和user mode。这就是ApcStatePointer[ApcStateIndex]指向的那个apc state .............................. PKAPC_STATE ApcStatePointer[2];//对应于起始apc环境和attach一个新进程后的apc环境 .....................  KAPC_STATE SavedApcState;//当该thread attach到一个新process时候,保存原始的apc state,然后ApcStateIndex=1,创建一个新的apc state放在ApcStatePointe[1]中 ..................................  UCHAR ApcStateIndex;//这个thread object中ApcStatePointer[2]的index .................. } 这里KAPC_STATE ApcState是一个新的数据结构。定义为: typedef struct _KAPC_STATE {     LIST_ENTRY ApcListHead[MaximumMode];//分成2个list,kernel mode和user mode。分别连接着一个douible linked list的APC对象     struct _KPROCESS *Process;//指向拥有这个apc的thread object的所属process     BOOLEAN KernelApcInProgress;//标志,kernel apc正在处理状态     BOOLEAN KernelApcPending;     BOOLEAN UserApcPending; } KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE; 这样win2k利用这3个数据结构管理apc对象。在创建thread的时候初始化thread object中的ApcStatePointer[0]= threadobject的 ApcState,ApcStateIndex=0。当以后线程attach到别的process上的时候,则创建一个新的 apc对象并设置ApcStatePointer[0]=SaveedApcState, ApcStatePointer[1]=新创建的 apc object,ApcStateIndex=1;表示现在线程运行的apc环境是新attach的process. 任何时候thread object的ApcState都是当前线程管理的apc队列,而就是ApcStatePointer[apcstateIndex]指向的apc state. apc state 利用里面的LIST_ENTRYApcListHead和apc object结构里的ApcListEntry,将当前运行在该apc state上的 apc对象连接起来。每个apc object的thread指针正好指向拥有这个apc对象的线程对象。这个关系很有点绕人,最好还是画个图才能表示清楚。 可以调用KeInitializeApc来创建一个新的apc object,这个函数很简单。就是设置KAPC结构的一系列 element.KeInsertQueueApc将一个apc插入到线程的apc队列中。首先验证当前的irql小于dispatch_level,然后得到thread=apc->thread,如果thread不允许排队apc(->ApcQueueable == FALSE) ,则设置apc->Inserted=false推出并返回false,否则调用KiInsertQueueApc完成插入工作,最后返回TRUE . KiInsertQueueApc 主要就是根据apc的apcmode将这个apc插入到指定thread的apcStatePointer[apc-> apcStateIndex]—>apcListHead[apc->apcMode]中去。并根据情况中断这个指定thread的运行或者取消这个线程的等待状态。 当发生apc中断时,最终都将调用KiDeliverApc来deliver线程上排队的apc对象,执行apc对象上指定的routines(包括KernelRoutine和NormalRoutine),KiDeliverApc首先 deliver kernel apc,然后再user apc。
C++/易语言驱动内存无痕读写实战:从物理内存操作到CR3切换的底层实现 本文深入探讨了C++/易语言驱动内存无痕读写技术,从物理内存操作到CR3切换的底层实现。通过实战代码示例,详细解析了驱动层内存读写、CR3寄存器切换、易语言调用等关键技术,并分享了对抗反作弊系统的进阶技巧和性能优化方案,为开发者提供了一套完整的内存操作解决方案。 阅读详情

相关推荐

【16】linux命令/工具,systemd,文件操作,动静态库,信号,socket

apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)设置时间,联网,apt-get install vim。

持续更新ing... 6792

Windows APC学习笔记(一)—— APC的本质&备用APC队列

Windows APC机制学习笔记(一)—— APC的本质前言基础知识APCAPC队列APC结构总结分析 KiServiceExit 前言 一、学习自滴水编程达人中级班课程,官网:https://bcdaren.com 二、海东老师牛逼! 基础知识 线程是不能被“杀掉”、“挂起”、“恢复”的,线程在执行的时候自己占据着CPU,别人怎么可能控制它呢? 举个极端的例子:如果不调用API,屏蔽中断...

lzyddf的博客 3800

C#上位机实战:借助NetToPLCSim与西门子S7-1200仿真通信全攻略

本文详细介绍了如何使用C#开发上位机程序,通过NetToPLCSim与西门子S7-1200进行仿真通信的全过程。从环境准备、PLC仿真环境搭建、网络配置到C#代码实现,提供了完整的实战指南和常见问题解决方案,帮助开发者快速掌握工业自动化通信技术。

weixin_30596343的博客 441

APC机制详解

文章目录APC的本质APC队列APC结构APC相关函数KiServiceExitKiDeliveApc备用APC队列ApcState的含义挂靠环境下的ApcState的含义其他APC相关成员ApcStatePointerApcStateIndexApcStatePointer与ApcStateIndex组合寻址ApcQueueableAPC挂入过程KAPC结构挂入流程KeInitializeApc...

鬼手的博客 8244

手机拍照背后的隐形功臣:一文读懂高通ISP三兄弟(IFE/BPS/IPE)如何协同工作

本文深入解析了高通ISP三兄弟(IFE/BPS/IPE)在手机拍照中的协同工作机制。通过拟人化比喻,详细介绍了IFE作为图像前端引擎的分流预处理、BPS作为RAW格式修图师的专业处理,以及IPE作为全能后期制作人的多面功能,揭示了三者在图像处理pipeline中的高效配合与技术创新。

weixin_27032989的博客 529

立创EDA开源项目:小北极冰冰杯(夏)——基于ESP32-C3的智能半导体制冷杯硬件设计与功能解析

本文详细解析了基于ESP32-C3的智能半导体制冷杯——小北极冰冰杯的硬件设计与核心功能。项目利用半导体制冷片实现快速降温,并集成了PWM智能调速散热、四路温度监控、杯具检测及PD/DC双电源输入等实用功能。文章深入剖析了其硬件架构、控制逻辑及实战注意事项,为嵌入式开发与智能硬件爱好者提供了宝贵的参考。

weixin_33245447的博客 271

深入学习APC

0x01 前言   APCs(Asynchronous Procedure Calls), 在NT中,有两种类型的APCs:用户模式和内核模式。用户APCs运行在用户模式下目标线程当前上下文中,并且需要从目标线程得到许可来运行。特别是,用户模式的APCs需要目标线程处在alertable等待状态才能被成功的调度执行。通过调用下面任意一个函数,都可以让线程进入这种状态。这些函数是:KeW...

weixin_30906185的博客 328

IMU预积分【SLAM】

预积分的推导过程比较多,所以这里只记录关键结论。 其实这些公式不太好记忆,因为预积分推导过程的想法来源很巧妙,无法看出物理意义。一切推导的来源: 最好记忆的旋转相对运动量: △Rij≐RiTRj=∏k=ij−1Exp((ω~k−bg,k−ηgd,k)△t)\triangle R_{ij} \doteq R_{i}^{T}R_{j} = \prod_{k=i}^{j-1}Exp((\tilde{\omega}_{k}-b_{g,k}-\eta_{gd,k})\triangle t) △Rij​≐RiT​Rj​

Tong_1024_的博客 1374

小Win,点一份APC(Apc机制详解)(一)

翻开 翻开小Win的菜单,APC赫然在目... 做工讲究,味道不错,是小Win的热门菜,我们点一来尝尝! 吃了可以做很多事情... APC注入APC注入APC注入... 细节来自于ReactOS源码分析。 如果对这个发神经的文风有任何不适,请谅解,因为我确实神经了 来一份APC ring3这么做的 点APC的正确姿势是使用QueueUs

anhkgg的专栏 4381

ISO26262功能安全--产品开发过程

目录 1.总体理解 2.概念阶段——吹牛,我们是打草稿的 2.1 相关项定义 2.2 HARA分析 2.3 功能安全目标 2.4 安全需求与安全概念 3. 系统阶段——闭门造神车,我们开始修炼 3.1 技术安全需求(TSC) 3.2 系统架构设计 3.3 安全分析与独立性分析 3.4 软硬件接口(HSI) 4. 硬件阶段——苦其心志,苦练经骨 4.1 硬件架构...

AgingMoon的博客 1万+

Cartographer从安装到实战:手把手教你运行2D/3D建图与定位

本文提供了一份详尽的Cartographer从零安装到实战应用的完整指南。内容涵盖环境准备、依赖编译、源码构建等关键步骤,并手把手指导读者运行2D/3D官方数据集进行建图与定位测试。文章深入解析了参数配置与自定义数据适配方法,帮助开发者快速掌握这一强大的实时同步定位与建图工具,并将其应用于机器人导航与自动驾驶等实际场景。

rice5的博客 952

APC的内部实现

APC的内部实现 今天心情如同死去的病人的心电图一般,直线一条。所以没啥好说的。 天津泰达拿了亚军,还是挺给力的,下赛季去球场看亚冠,多少年没去现场看球了,上次去还是泰达球场的落成仪式,泰达2:1墨尔本,虽然中国足球没什么好看的,但是球场是一个比较便宜

求索 3493

化工设备设计软件:PVELITE二次开发_(12).数据导入导出与兼容性

在数据导入之前,需要定义数据在PVELITE中的结构。可以通过编程接口定义字段名称和数据类型。# 导入必要的库 import pvelite # 创建PVELITE实例 pve = pvelite . PVELITE() # 定义CSV数据结构 csv_structure = {

kkchenjj的博客 1216

APC注入DLL(win7下有问题)

void APCKernelRoutine(PKAPC pKAPC, PKNORMAL_ROUTINE pUserAPC, PVOID pContext, PVOID pSysArg1, PVOID pSysArg2) { DbgPrint("APCKernelRoutine Entered\n"); ExFreePool(pKAPC); } NTSTA

sgzwiz的专栏 2712

【脑电信号】脑电信号EEG形态学滤波处理【含Matlab源码 4023期】

脑电信号EEG形态学滤波处理 完整的代码,包运行;运行操作视频见优快云资源!适合小白!

订阅付费专栏Matlab(奶茶价版),可赠送奶茶价版付费专栏指定代码1份; 823

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深入解析 Windows 任务栏美化原理:DLL 注入与卸载的底层原理

SetWindowsHookEx() / UnhookWindowsHookEx() 确实会参与“让 DLL 进入目标进程”和“允许 DLL 退出目标进程”的生命周期,但它只是触发器,不是最终生杀大权。最终是否真能卸载,取决于目标进程里还有没有别的组件在持有这个 DLL(引用计数是否归零)。

John_ToStr的博客 485

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

谈谈对APC的一点理解

谈谈对APC的一点理解异步过程调用(APCs) 是NT异步处理体系结构中的一个基础部分,理解了它,对于了解NT怎样操作和执行几个核心的系统操作很有帮助。1) APCs允许用户程序和系统元件在一个进程的地址空间内某个线程的上下文中执行代码。2) I/O管理器使用APCs来完成一个线程发起的异步的I/O操作。例如:当一个设备驱动调用IoCompleteRequest来通知I/O管理

乐朝夕与之共 3002

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

windows内核情景分析 --APC

APC:异步过程调用。这是一种常见的技术。前面进程启动的初始过程就是:主线程在内核构造好运行环境后,从KiThreadStartup开始运行,然后调用PspUserThreadStartup,在该线程的apc队列中插入一个APC:LdrInitializeThunk,这样,当PspUserThreadStartup返回后,正式退回用户空间的总入口BaseProcessStartThunk前,会执行

maomao171314的专栏 2428

【数据结构-5】单链表的实现

单链表,具体来说是单向的、不带头的、不循环的链表。链表由一个一个节点组成,每个节点分为数据域和指针域,数据域存放数据,指针域存放下一节点的地址。这样,就可以根据指针域中的地址找到下一个节点,节点就串起来了构成了单链表。

a bit 215

C# 数据结构和特殊类型

.NET Core(现称.NET)提供丰富数据结构,优化性能与开发效率。日常开发首选List<T>和Dictionary<TKey,TValue>;高性能场景推荐Span<T>与Memory<T>减少内存分配;并发环境使用ConcurrentDictionary等线程安全集合;避免非泛型集合如ArrayList。

cccloveforever的博客 746

pandas 深度入门:从数据结构到一份真实销售报表

本文系统讲解Pandas核心应用,从三分钟安装到完整月度报表生成,涵盖数据读取、清洗、筛选、分组聚合、表连接、透视表与时间序列等13个关键环节。强调“先看数据再动手”,掌握Series/DataFrame/Index结构本质,熟练运用loc/iloc、merge校验、agg/transform区别,通过真实案例实现高效报表自动化,告别手动Excel操作。最后提供性能优化与高频报错解决方案,助力读者快速上手,真正实现“写二十行代码,跑三秒出结果”。

信息安全领域优质创作者|操作系统领域专家 313

Re:Mysql数据库基础篇(十一):索引的常见操作、聚簇与非聚簇索引、为什么其他数据结构不能作为索引的底层结构

本文深入解析MySQL索引底层原理,对比链表、二叉树、B树等数据结构的局限性,阐明InnoDB选用B+树的原因:节点仅存键值与指针,叶节点相连,支持高效范围查询。进一步区分聚簇索引(InnoDB)与非聚簇索引(MyISAM),揭示回表查询机制及空间优化逻辑。最后系统介绍主键、唯一、普通及全文索引的创建方式与特点,全面梳理索引应用实践。

小此方的博客 208

数据结构的基本概念和算法的初步认识

本文系统阐述数据结构与算法的基础概念,涵盖数据、数据元素、数据对象的层次关系,数据结构的三要素(逻辑结构、存储结构、数据运算),以及抽象数据类型。重点解析算法的特性与设计要求,并深入讲解时间复杂度分析的核心——大O表示法,通过“只保留最高阶项、忽略常数系数、取最坏情况”三大原则,结合实例剖析O(1)、O(n)等常见时间复杂度,揭示算法效率的本质评估方法。

ACH_YYX的博客 204

【数据结构】堆(Heap):堆的实现、建堆与堆排序

堆是一种特殊的完全二叉树,分为大堆(父节点≥孩子)和小堆(父节点≤孩子),可快速获取最值。堆通常用数组存储,通过下标计算父子关系。核心操作为向上调整(插入时)和向下调整(删除或建堆时),时间复杂度均为O(log N)。建堆可采用从后往前的向下调整法,整体复杂度为O(N)。基于堆的堆排序通过反复提取最大值实现升序排列,总时间复杂度为O(N log N),空间复杂度O(1),是高效稳定的排序算法。

2501_93577780的博客 377

C++ 数据结构与面向对象:二叉搜索树实现与多态虚函数详解

本文系统讲解二叉搜索树(BST)的迭代实现与C++多态及虚函数底层原理。BST通过非递归方式实现插入、查找、删除,核心在于维护有序性,删除分三种情况处理,替换法为关键技巧。多态基于虚函数表(vtable)与虚函数指针(vfptr),通过基类指针调用重写函数实现运行时动态绑定,需满足继承与虚函数重写条件。抽象类强制接口规范,虚函数表存储函数地址,子类继承或覆盖对应项。二者分别体现数据结构高效性与面向对象灵活性,是C++核心知识点。

2603_95129722的博客 210

Redis 数据结构、单线程架构与 String 字符串详解

Redis采用单线程架构,通过事件循环(Event Loop)高效处理I/O事件,避免阻塞。其核心优势在于内存操作快、无上下文切换开销。数据结构支持多种内部编码(如ziplist、quicklist),自动根据场景优化存储与性能。字符串类型是基础且灵活,可存文本、数字或二进制数据,最大512MB,支持原子操作。命令如SET、GET、MGET、MSET等实现高效读写,适用于缓存、计数、会话管理等场景。

2303_77004089的博客 371
上一篇: Windows2k下的同步机制
下一篇: 利用filter driver实现键盘记录
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值