Windows任务计划及其COM组件
前言Windows下创建任务计划的方式通常有三种:任务计划的GUI界面、任务计划的命令行工具schtasks.exe、Windows提供的API接口
本文会依次介绍这三种方式,并展示免杀效果,需要注意,Windows中任务计划相关的API是基于COM机制的,同时也会介绍COM机制相关内容,掌握了任务计划的API编程,也就掌握了COM编程,通过窥一斑而知全豹也能对COM机制有一定理解
任务计划的GUI界面通过GUI创建任务计划的方式很简单,运行中输入taskschd.msc,点击右侧的“创建任务”
任务计划的命令行工具schtasks.exe使用schtasks创建任务计划,命令如下
1schtasks.exe /create /sc daily /tn "Test Schedule" /tr "c:\windows\system32\notepad32.exe"
上述命令中,/create表示创建一个任务计划,/sc表示任务的频率,除了daily还有once、weekly、onlogon等等,/tn表示任务名字,/tr表示任务执行的程序,我 ...
Windows RPC初探
前言看到一篇利用RPC实现免杀对抗的文章,不懂RPC的我读起来像天书,恍然大悟,我得先搞懂RPC是什么,本文的目的是掌握RPC的背景、概念、实现
RPC背景随着计算机技术从“单机时代”进入“分布式时代”,传统的IPC(Inter-Process Communication,进程间通信)已经无法满足跨设备、跨网络的协作需求,如大型企业的财务系统,单台计算机的算力、存储、可靠性已经无法满足需求,需要多台计算机协同合作,其中包括负责存储的(数据库服务器)、负责计算的(应用服务器)、负责展示的(前端服务器),各个服务器的进程之间无法再通过传统的IPC(Inter-Process Communication,进程间通信)通信,需要一种新的通信机制
早期程序员们自己实现通信机制,包括自己基于TCP/IP协议编写数据发送/接收逻辑,处理数据序列化反序列化、考虑丢包等等,这些底层细节与“业务逻辑”无关,却占用了开发者大量的时间精力,急需一种全新的标准,这个时候RPC应运而生
RPC最早是由贝尔实验室的Bruce Jay Nelson在1984年的论文中提出的,随后Sun公司实现了自研的ONC RPC, ...
Windows任务计划权限提升漏洞分析(CVE-2025-60710)
1本文首发于先知社区:https://xz.aliyun.com/news/19366
前言刷公众号时看到Windows 11 PolicyConfiguration 计划任务特权提升漏洞(CVE-2025-60710)这篇文章,漏洞描述中提到这是一个任意文件删除漏洞,可怎么就成了任意代码执行,这激起了我的兴趣,利用下班及周末时间学习了一下,遂有此文,分享给大家
这个漏洞是微软在2025年11月的补丁星期二中发布的,公告地址:https://msrc.microsoft.com/update-guide/vulnerability/CVE-2025-60710
影响版本是Windows 11 25H2 10.0.26200.0 before 10.0.26200.7171
对应的任务计划是\Microsoft\Windows\WindowsAI\Recall\PolicyConfiguration,可以看到Windows 10中是没有这个任务计划的
漏洞基本原理漏洞存在于Windows任务计划的调度程序taskhostw.exe中,当执行任务计划\Microsoft\Windows ...
直接系统调用 VS 间接系统调用
前言上文中我们讲述了直接系统调用技术,它可以不使用ntdll中的Syscall(系统调用)指令,自己在代码中实现、用以绕过针对ntdll中函数的hook,特点是Syscall指令在程序自身的内存空间中,而不是ntdll的内存空间中,由此,AV/EDR也有了相应的检测机制,如果发现Syscall指令不在ntdll内存空间中,则将其视为可疑的IoC,攻击者为了消除这个IoC,间接系统调用技术在此背景下诞生
本文主要讲述间接系统调用,先回顾一下用户模式API Hook,然后是直接系统调用的实现细节,最后将直接系统调用改为间接系统调用,并分析二者的区别,并在文末介绍间接系统调用的一些限制
用户模式API Hook用户模式API Hook让EDR能够动态审查Windows API,多数EDR会使用Inline Hook(内联Hook),在内存中插入jmp指令,使程序执行流程进入EDR的hooking.dll
当EDR研判当前Windows API不是恶意的,会跳转回ntdll.dll,并执行Syscall继续进入内核,如果研判当前Windows API是恶意的,则会终止执行
直接系统调用躲避E ...
直接系统调用之从上层API到下层API的旅程
前言各家安全厂商基本都实现了用户模式Hook,简单说就是恶意软件使用Windows API时,被安全厂商重定向到它自己的Hooking.dll,然后进一步分析,如果研判代码没有恶意行为则放行,如果研判代码有恶意行为则拦截,这促使攻击者使用了新的技术,例如Unhooking、直接系统调用、间接系统调用、等等
本文主要介绍直接系统调用,并介绍如何在Visual Studio中通过C++创建一个使用直接系统调用的Loader,我会先用Win32 API写一个Loader,然后Win32被替换为直接系统调用
直接系统调用技术已经诞生好几年,不是一个新技术,本文中我想重新回顾一下这个话题,探讨一下直接系统调用涉及的知识,以及如何实现基于它的Loader,并使用诸如API Monitor、Dumpbin和x64dbg等工具来分析这个Loader,例如,查看Loader是否正确导入Windows API,以及Syscall在PE结构的哪个节区执行
什么是系统调用系统调用英文System Call,简称Syscall,单纯讲系统调用概念是什么,对初学者来说可能不太好理解,我们通过一个例子来说明,用户模 ...
高级进程注入之利用线程名和APC(下)
前言书接上文,高级进程注入之利用线程名和APC(上)
上文中已经介绍了相关的API,本文会讲述利用线程名实现注入的细节,相比较传统的进程注入需要创建线程,这是一个不需要创建线程的新技术
介绍通常,向一个进程的内存写入内容需要我们在打开进程句柄时带有写权限,也就是PROCESS_VM_WRITE,https://learn.microsoft.com/en-us/windows/win32/procthread/process-security-and-access-rights但这可能被AV/EDR视为可疑指标,利用线程名注入允许我们无需写权限实现远程写入
我们需要的权限如下
1234567891011HANDLE open_process(DWORD processId, bool isCreateThread){ DWORD access = PROCESS_QUERY_LIMITED_INFORMATION // 想要读取远程进程的PEB地址,需要这个权限,后文会提到 | PROCESS_VM_READ ...
高级进程注入之利用线程名和APC(上)
前言进程注入是攻击方武器库中最重要的技术之一,本文将会介绍如何使用线程描述相关的API实现绕过AV/EDR的进程注入,最后会提供相应的检测方式。(线程描述相关的API,线程描述和线程名是一个意思)
进程注入是高级恶意软件中一定会使用的技术,它的用途包括:1、AV/EDR躲避:隐藏恶意代码在一个合法的进程中2、操作现有进程:经典的就是lsass进程的dump3、权限提升
由于读取现有进程的内存危害很大,所以各种AV/EDR都会重点监控并阻止这个行为,不过监控也是基于已知的技术,一旦有未知技术,AV/EDR将很难监控,这本质是一个猫鼠游戏,并且永远不会结束。攻击方一直在尝试使用新技术躲避检测,比如在2016年FortiGuard Labs公开的原子爆炸技术,它使用原子表传递代码到远程进程中,再比如2023年SafeBreach公开的池聚会技术,线程池被滥用在远程进程的上下文执行代码,想了解各种注入技术,可以查看2019年BlackHat UAS中分享的Windows Process Injection in 2019
本文要介绍的技术称之为“线程名调用”,这项技术允许植入shellcode ...
APC系列之用户模式APC
前言这个系列的目的是希望你能系统的理解APC的内部原理(不再是零散的理解)
我重构了用户模式和内核模式下APC相关的函数,希望更好的理解APC机制,在文章的最后会分享源码
在这个系列中,我将探讨下面的主题1、用户模式下APC的使用2、内核模式下APC的使用3、用户模式下APC内部原理4、内核模式下APC内部原理5、“Alerts”的概念以及它和APC的关系6、APC在Wow64中的应用7、如何在用户模式和内核模式下干扰微软对APC的ETW监控8、如何使用APC安全的卸载一个驱动程序9、像Procmon和Process Hacker这类安全工具如何利用APC10、CET(用于检测ROP的CPU Shadow Stack)如何影响APC11、关于APC机制有文档的源代码12、关于APC的逆向工程练习13、接下来文章中的惊喜
本文是系列的第一篇文章,讲述用户模式下APC,是这个系列中相对简单的部分,文中我将一边讲解,一边分享代码
APC介绍APC全称Asynchronous Procedure Call,译为“异步过程调用”,是Windows中使用的一种机制,这种机制的核心是一个队列,通常称 ...
Windows下32位汇编学习(二)PE文件解析
引言想开发反病毒引擎,第一步总是对PE文件进行解析,虽然有点落伍,但这是基础,想开发病毒也同理,很多的病毒样本在使用Indirect Syscall + 调用栈欺骗前,都需要动态调用API,这个时候就需要你了解PE文件的结构,通过解析PE文件找到IAT,进而找到PEB来动态获取地址,所以不想学也得学~
本文会介绍从书中学到的部分知识,以及通过C++和汇编分别实现一个PE文件解析器
本篇博客的学习参考罗云彬老师的《Windows环境下32位汇编语言程序设计》,尤其是第17章的“PE文件”
正文借用一下罗云彬老师的图,PE文件从文件头到文件尾依次是:DOS部分、PE头、节表、节数据DOS部分:包括DOS标识和DOS代码,为了兼容DOS系统而保留的部分PE头:包括PE标识、PE头、PE可选头节表:下面节数据的起始位置、大小节数据:就是代码段、数据段上面是用通俗的语言描述,在代码中是下面的样子
DOS部分12345IMAGE_DOS_HEADER { e_magic 2字节 // DOS标识 ... e_lfanew 4字节 // PE头 ...
通过APC执行Shellcode
前言本篇博客主要介绍APC是什么、APC函数何时被执行,不会包含太多深层次的分析,主要是介绍APC如何被用来执行shellcode
APC介绍APC,全称Asynchronous Procedure Calls,译为异步过程调用,在Windows下是一种机制(我猜测在其他操作系统下也是类似的机制),允许异步执行函数,所谓的异步执行,指的是当前线程执行过程中,有一个异步执行任务,当前线程无需等待这个异步执行任务,可以继续执行,相对应的,同步执行,指的是当前线程执行过程中,有一个同步执行任务,当前线程需要等待这个同步执行任务,无法继续执行,同步执行的结果当场就返回了,异步执行的结果是通过一个回调机制返回
Windows中关于APC的一个重要特点是,只有线程处于警报状态时,线程APC队列中的APC函数才会执行,通过调用SleepEx()、WaitForSingleObjectEx()、SignalObjectAndWaitEx()、SignalObjectAndWait()、WaitForMultipleObjectsEx()可以让线程处于警报状态
Windows中的APC包含多种类型,也分 ...
