自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(250)
  • 收藏
  • 关注

原创 Windows中__security_check_cookie与绕过

为了缓解栈溢出漏洞,msvc默认会在函数序言部分放置一个security_cookie(启用GS编译选项)。security_cookie(栈金丝雀)必须放在局部变量和返回地址之间,而不是局部变量之下,否则根本无法检测典型的栈溢出攻击。在函数结尾部分,会验证这个值:如果这个值被改变了,程序就会抛出异常:每次运行程序,这个sercurity_cookie的值都会不同,每次都从rdata节区中选取8字节作为cookie。

2026-06-10 22:40:13 158

原创 Windows内核事件通知机制

Windows内核中提供了一组接口,让我们可以针对某一事件注册通知例程,当这个事件发生的时候,我们注册的通知例程就会执行。

2026-06-08 17:36:10 403

原创 Windows卷挂载流程

学习Windows文件系统过滤的前置知识。

2026-06-08 00:25:23 617

原创 通过KiSystemServiceUser获取SSDT基址

在64位Windows中,SSDT被隐藏起来了,但是通过windbg调试发现,nt中导出了KeServiceDescriptorTable,该数组的第一个元素的第一个字段就是SSDT的基址。下图是KeServiceDescriptorTable数组中元素的类型定义:所以我们如果可以找到KeServiceDescriptorTable,就可以找到SSDT。

2026-06-07 23:05:02 393

原创 Windows堆管理

Windows的堆管理器,负责管理使用页面粒度内存分配函数保留的大内存区中的内存分配。这句话的意思是,堆是基于页粒度内存分配的更高级的内存管理策略。“使用页面粒度内存分配函数保留的大内存区”指的是操作系统底层的内存管理单元。在 Windows 中,虚拟内存管理器以页(Page,通常为 4KB)为基本单位管理物理内存,并且通过 VirtualAlloc等函数分配内存时,实际上是以分配粒度(Allocation Granularity,通常为 64KB)​ 来保留地址空间的。

2026-06-07 13:38:26 171

原创 Lab 11-1

大体思路是从res中提取PE文件,保存为msgina.dll,然后修改注册表,实现Gian劫持。

2026-06-07 12:41:03 26

原创 Windows x64系统服务原理

64位Windows通过syscall指令进行系统服务调用,系统服务调用号由eax给出;通过sysexit指令返回到用户态。

2026-06-06 10:46:27 210

原创 Windows进程中的句柄表

首先一个进程的句柄表是在内核空间中的,用户态下进行调试是无法获取进程的句柄表的。

2026-06-05 00:39:11 410

原创 Windows键盘过滤

本文记录我复现谭文老师的《Windows内核编程》一书中相关章节的实验的过程。

2026-06-04 22:05:29 614

原创 Windows 64位程序栈帧布局

下面是64位程序在函数调用时的典型栈帧布局:fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;低地址高地址主调函数栈帧影子空间(32字节)返回地址局部变量区被调函数栈帧RSP(栈顶指针)callcall:在x64调用约定中,主调函数先分配影子空间,然后call指令压入返回地址,因此影子空间位于返回地址的方向。

2026-06-03 20:51:01 247

原创 通过MDL读写进程内存

本文总结于lyshark的《Windows内核安全编程技术实践》。

2026-06-03 14:20:41 435

原创 通过进程附加方式读写进程内存

通过调用KeStackAttachProcess,我们可以把当前线程附加到目标进程中,从而允许内核diamond直接访问目标进程的用户模式内存。

2026-06-03 12:17:35 109

原创 Lab 3-1

应该修改了注册表,访问了一个网址。

2026-06-01 21:11:33 56

原创 通过cr3读写进程内存

本文总结于lyshark的《Windows内核安全编程技术实践》。

2026-06-01 16:16:05 644

原创 Windows驱动与用户态程序通信机制总结

除了上面提到的方式,还可以WMI、pipe、邮槽、RPC等通信方式。

2026-06-01 10:28:22 299

原创 Lab 1-4

没有被加壳或者混淆。

2026-05-30 15:31:36 196

原创 Lab 1-3

脱壳之后没有修复IAT,没有找到有用的导入函数。

2026-05-30 15:19:21 38

原创 Lab 1-2

特洛伊木马的一种。

2026-05-30 14:22:40 226

原创 Lab 1-1

没有。使用die与ida查看text,都没有发现有被加壳或者混淆的现象。

2026-05-30 12:27:13 44

原创 Windows认证和安全对象的基本概念

访问令牌(Token):标识进程的身份和权限安全描述符(Security Descriptor):定义对象的安全属性访问控制列表(ACL):通过 DACL 和 SACL 控制访问和审计理解这些概念是进行 Windows 系统编程和安全开发的基础。在实际开发中,合理设置安全描述符可以有效防止未授权访问,而正确使用访问令牌则能实现精细化的权限控制。

2026-05-30 01:10:13 219

原创 Windows进程间通信

使用邮槽的进程分为服务端和客户端。客户端只能发送消息,服务端只能读取消息,消息的结构和队列类似。

2026-05-29 23:30:47 230

原创 调试CreateProcess

本文记录我调试CreateProcess函数的过程,从用户态到内核态。

2026-05-29 22:41:33 231

原创 x86特权级别

当前正在执行的代码/任务所处的特权级(0-3)。它存储在CS寄存器的低2位中。它由CPU硬件自动维护。当程序控制流转移(如跳转、调用、中断)到不同特权级的代码段时,CPU会更新CS,从而改变CPL。CPL决定了你能执行什么指令、能访问什么数据。​ 内核代码运行在CPL=0,用户代码运行在CPL=3。

2026-05-28 16:06:35 573

原创 Windows APC注入

隐蔽性要求较高的注入:APC注入不创建新线程,也不使用远程线程创建API(如),因此能绕过部分基于线程创建行为的检测手段。目标进程存在可警报等待线程:当目标进程中有线程处于SleepEx等可警报等待状态时,APC注入的成功率较高。用户态DLL注入:适用于将用户态DLL注入到目标进程,利用加载恶意模块。单次执行任务:APC回调执行完毕后即从队列中移除,适合只需执行一次的注入任务。

2026-05-28 11:00:01 403

原创 Windows用户态下常见的DLL注入技术总结

注入技术是否需要远程线程持久性隐蔽性实现复杂度适用场景否(系统自动加载)低中低有消息循环的GUI进程是低低低通用注入,兼容性最好否(利用APC队列)低中高中目标线程处于可告警等待状态时注册表注入(AppInit_DLLs)否高中低全局注入,Win7及以下系统DLL劫持否高高中针对特定程序,持久化反射式DLL注入是低极高高需要绕过PEB检测的场景导入表注入否高中高持久化注入,修改磁盘文件。

2026-05-28 00:04:36 584

原创 虚表hook

虚表hook是一种address hook,通过修改虚表中的项实现hook。实际操作的时候还是有一些需要注意的地方。

2026-05-27 22:27:20 472

原创 Windows用户态hook技术总结

属于地址hook,通过修改PE文件中导入地址表(IAT)或导出地址表(EAT)中的函数地址,将对目标API的调用重定向到自定义函数。主要利用了Windows用户态异常处理机制,在触发异常时控制权转到我们设置的异常处理器(如调试器、VEH、SEH)中执行。通过SetWindowsHookEx函数安装系统级或线程级的消息过滤器实现,只能拦截消息事件。通过修改目标函数起始处的几个字节,跳转到自定义函数处。

2026-05-27 19:14:43 501

原创 Microsoft Detours的Transaction模型

Detours 的事务机制是将复杂的、容易出错的并发代码修改操作,封装为简单的、原子性的批处理操作。线程状态管理:安全地挂起和恢复线程指令指针重定向:避免执行到被修改的代码原子性修改:确保所有修改要么全部生效,要么全部无效自动回滚:在错误时恢复系统状态这种设计使得开发者能够专注于 Hook 逻辑本身,而无需处理复杂的并发和错误恢复问题,大大提高了 Hook 代码的可靠性和稳定性。

2026-05-27 15:31:50 37

原创 DonCris‘s Time Rift 2026

hash = hash * 33 + 当前字符的ASCII值。这题还挺有意思的,虽然很简单,但是作者设计的情景不错。hash由题目作者指定。

2026-05-25 15:04:08 22

原创 I Pack You加密壳:实现页粒度的动态解密和惰性加密

搭建好基本框架之后,我又向框架中添加了一些基础的静态反调试功能,这篇文章主要记录一下如何实现。

2026-05-24 16:14:59 439 1

原创 表里不一的vs2026:谁偷偷修改了我的字节?

最近在做一个加密壳,本来使用nvim+cmake开发,但是被nvim字符编码的问题搞得有点破防,就切换到了vs。

2026-05-19 17:01:31 200

原创 Windows的堆内存

Windows 堆 API 提供了一种比 C 运行时库(CRT)的更接近系统底层的控制方式。对于需要精细控制内存布局、或在高性能场景下避免锁竞争(通过创建多个私有堆)的开发者来说,直接使用 Heap API 是值得考虑的选择。理解堆的运作机制,有助于写出更稳健的 Windows 应用程序。

2026-05-18 16:19:23 196

原创 I Pack You:实现基本的软件壳框架

记录一下自己开发简易软件壳的过程,参考的开源软件和书籍贴在文末。这只是一个简易的加壳工具,实现了加壳的基本框架,后面会增加更多的功能填充这个框架。这个壳全部使用c/c++进行编写,没有使用汇编。因为在x64下,visual c++不支持内联汇编的语法了。如果要使用汇编,需要将汇编代码作为一个模块供c/c++使用。软件壳分为两个部分:加壳程序和stub。其中stub以dll的形式存在,使用链接器指令将一些节区融合在一起(参考《加密与解密》)。加壳程序对目标PE文件进行加密和变换后,会提取Stub.dll的.t

2026-05-17 23:35:11 549

原创 64位Windows中使用PEB来获取进程加载的模块

有兴趣的读者,不妨多观察InLoadOrderModuleList链表中模块的顺序。

2026-05-10 02:11:18 530

原创 Windows中的I/O完成通知与事件内核对象

Windows提供了一套灵活机制来处理异步I/O操作,其中事件内核对象是较早期但至今仍有价值的通知方式之一。这种方式让程序能够发起I/O请求后继续执行其他任务,当I/O操作完成时,通过事件对象来通知调用线程。

2026-04-27 14:35:37 328

原创 使用内核对象进行线程同步

在多线程编程中,同步机制帮助线程协调彼此的工作。Windows提供了两套不同的方案:用户模式同步和内核对象同步,每种方案都有其适用的场景。

2026-04-27 11:43:56 381

原创 Windows作业机制

Windows作业对象是一种内核级别的进程管理机制。它允许系统管理员和开发者将多个进程组合成一个逻辑单元,并对这个单元实施统一的资源限制、安全策略和生命周期管理。作业对象在Windows NT架构中已存在多年,是许多系统功能和企业应用的基础。

2026-04-27 08:51:41 50

原创 Windows用户模式下的线程同步

Windows的InterLocked系列函数是用户模式下进行线程同步和数据保护的基础。这组函数的核心是“互锁”,它们依赖CPU提供的硬件原子指令,能够以不可分割的方式对内存中的一个简单变量(通常是32位或64位整数)进行“读取-修改-写回”操作。这个“不可分割”的特性,使得它们成为实现无锁(Lock-Free)编程、构建更高级同步对象(如自旋锁、引用计数)的基石。

2026-04-27 00:26:12 393

原创 调试Windows11启动过程

建议还是跟着张银奎老师的步伐,亲自调试一遍。先对整个过程有个大致的映像,以后需要在哪个步骤中做文章的时候,再仔细研究该步骤的细节。

2026-04-23 23:45:58 481

原创 通过异步的方式处理IO和延迟过程调用

有时候一些高IRQL的代码需要执行一些低IRQL的代码。但是在高IRQL的情况下,低IRQL的代码是不能够执行的。DPC解决了这一问题。

2026-04-18 00:44:40 158

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除