自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows反截屏开发实现

如果我们仅仅需要对自己的窗口进行反截屏,那么使用设置好窗口的属性就可以了。如果我们需要对系统桌面进行反截屏,这种情况一般是防止桌面内容通过截屏被泄露,这样就需要使用我们对截屏行为进行拦截和处理了。

2024-06-20 18:00:44 1509

原创 Windows内核Dll注入(一)

近期在云桌面中遇到许多情况都需要对应用层程序的函数进行HOOK,并需要对函数参数进行各种修改,以便能够在虚拟桌面里面支持一些特性(尤其是一些3D的场景)。因此这里最主要的就是需要对HOOK的进程进行注入,来实现HOOK函数的功能。在早期开发中,就实现过DLL注入的功能,不过都是基于用户层的注入来实现的,例如有远线程注入,消息钩子注入,用户层OPE注入。HOOK注入的第一步是需要找到一个函数,这个函数可以确保所有的进程启动的时候都会被调用,这个函数就是。下面的文章主要是针对HOOK函数的注入,这个函数是。

2024-05-31 19:34:41 886

原创 基于AVStream框架的虚拟摄像头开发实现

在前面文章中,我们分析过虚拟摄像头有两种实现方式:并且在前面文章中分析了基于DirectShow框架的方案(可以参见基于DirectShow框架的虚拟摄像头开发实现),在这里我们分析基于AVStream驱动框架的摄像头方案,该方案可以做到稳定性好,兼容几乎所有的应用软件。AVStream是用来取代Kernel Stream的音视频开发的一种新框架,其大致架构如下:如上图我们可以发现其都是基于KS框架来扩展的,扩展基于Port Class的驱动框架(用来开发音频驱动),基于AVStream的驱动框架(用来开

2024-03-20 17:30:28 1143

原创 ProcExp软件运行内存过高分析

ProcExp软件运行内存过高这个问题分析起来虽然不困难,但是这个是作为一个软件问题分析的典型,在这里文章记录一下相关过程,如果有更好的排查思路,希望大家能够指正和交流。当然这也是软件开发中一个典型的城门失火,殃及鱼池的案例。Aac3572MbHal_x86.exe泄漏了太多的句柄,没有被使用者发现,但是殃及了ProcExp使用了太多的内存,从而引发的一系列问题。那么是否真的就是Aac3572MbHal_x86.exe这款软件自己的BUG导致句柄的泄漏,还是另外其他的模块导致的呢?

2024-03-06 16:07:58 1415

原创 基于DirectShow框架的虚拟摄像头开发实现

这个过程是非常复杂的,给我们的开发带来了很大的难度;为了简化整个过程,微软引入了DirectShow技术,该技术通过对不同步骤引入Filter的概念,由系统提供不同的Filter,开发者只需要通过Filter Graph Mangager将各个Filter组织成Filter Graph来进行多媒体播放。通过上面实现,我们完成了基于DirectShow框架的虚拟摄像头的开发,我们可以使用GraphEdit工具查看我们的虚拟摄像头的过滤器,并且我们可以对过滤器进行Filter Graph管理,如下图所示。

2024-02-29 09:26:03 1886 1

原创 NDIS协议驱动开发指南

对于NDIS协议层驱动平时我们的使用场景不多,我们也没有能力(也没必要)设计一个完整的网络协议驱动。但是协议驱动是我们后面NDIS过滤驱动的基础,NDIS过滤驱动可以帮助我们获取本机接收到的网络帧数据包,并且对以太帧数据包进行过滤(例如ARP数据包等)。因此NDIS协议驱动还是非常值得我们去学习的,它是NDIS过滤驱动的基础,也是以太帧数据包过滤的重要手段。

2023-12-06 15:49:12 2175

原创 TDI网络过滤驱动应用(一)

这里我们从三个实例(限流,UDP重定向,TCP重定向)大致了解TDI网络过滤驱动的基本应用场景;对于驱动防火墙的TDI网络过滤驱动复杂应用,我们需要将网络数据包进行截获以及重注入处理。对于TDI网络过滤驱动更加全面的使用,我们可以参考NetFilter SDK 2,该SDK链接为,可惜的是该SDK是一个收费的SDK,不过它提供了相关的Sample代码,包括TrafficShaper,TcpRedirector,DnsRedirector和SocksProxyServer还是非常具有参考性的。

2023-11-28 10:26:23 1418

原创 VMware Workstation 无法连接到虚拟机问题排查(一)

当打开VMWare Workstation启动虚拟机的时候整个VMWare Workstation界面出现卡住,如下:紧接着VMWare Workstation出现错误,如下:如果通过管理员权限启动VMWare Workstation,那么虚拟机可以正常启动;那么是什么原因导致的呢?VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用的所有目录以及访问所有临时文件目录。未能将管道连接到虚拟机: 系统找不到指定的文件。

2023-11-24 20:31:58 7626

原创 TDI网络过滤驱动之tdifw实现原理分析

网络数据包的过滤(包括connect,sendto,recvfrom等)。防火墙规则策略的管理。本地网络连接状态的查询。其中防火墙规则策略的管理应用以及网络状态信息的查询实现的比较简单,主要是响应用户层的各种//防火墙规则策略CTL_CODE。

2023-11-17 08:51:13 379

原创 TDI网络过滤驱动开发指南

首先我们来看一下Windows的网络模块架构,如下:ws2_32.dll提供了基本的socket相关函数(例如socketbindlisten等)。Windows在用户层提供了一种过滤网络数据包的HOOK方案,这个就是Layered service provider(也就是我们通常说的LSP),通过这种技术我们对网络包进行HOOK了,国内很多大厂用的都是这种技术。Socket是一种统一的规范,无论是Windows还是Linux他们对外提供的接口都是一样的。

2023-11-13 13:45:01 522

原创 GDI对象泄漏问题排查分析

GDI objectBitmapBrushDCCreateDCFontMemory DCDeleteDCMetafilePaletteRegion//...如果我们平时忘记调用的时候,就会造成GDI对象被泄漏。GDI对象作为一个Windows的内存资源,也占用其内存空间,并且需要用户自动管理和释放;为了降低GDI对象的资源泄漏,我们可以使用智能指针来管理GDI对象句柄。程序崩溃。UI资源显示异常。程序运行缓慢。

2023-11-09 14:54:26 1178 1

原创 基于IDD技术的虚拟显示器开发实现

EDID: Extended Display Identification Data(扩展显示标识数据)是一种VESA (Video Electronics Standards Association)标准数据格式,其中包含有关显示器及其性能的参数,包括供应商信息、最大图像大小、颜色设置、厂商预设置、频率范围的限制以及显示器名和序列号的字符串。所谓虚拟显示器,是指我们利用软件技术,在没有外接物理显示器的环境下,虚拟出显示器设备。的回调接口,系统框架通过回调接口在不同的时机创建不同的对象。

2023-11-08 11:42:54 1683

原创 浅谈bss段的作用

由于这些未初始化的全局变量和静态变量默认都是初始化为0的,所以为了减小ELF文件的大小,这些数据并不编译放在ELF文件中,在ELF文件中使用一个节专门用来标记这些数据(并不存放数据,只是标记数据大小,相当占位符)。在应用程序被装载的时候,装载器只需要根据这个大小来给BSS的数据分配相应大小的空间即可,因此在ELF文件中并没有BSS节的数据。这里我们主要看一下BSS节的用途。

2023-11-07 16:56:47 152

原创 fanotify实现原理源码分析

fanotify主要使用。

2023-11-06 14:44:58 417

原创 Linux文件描述符分析

在Linxu下面对于文件的操作,都是在一个文件描述符下面进行的,例如:我们知道,文件描述符是一个非负的整数,默认情况下定义了标准输入输出的文件描述符,如下:那么文件描述符具体是怎么使用的呢?本文来探讨一下其中相关的技术原理。在linux中,一个进程使用一个的结构进行抽象,这个结构体的中存在如下数据:这个结构体中代表着打开的文件的信息,这个文件内容大致如下:从上面的结构体我们可以发现,文件描述符(fd)其实就是一个结构体数组的一个索引值,并且为了方便快速的查找这个数组中没有使用的项,使用一个位图来进行

2023-11-05 11:11:35 153

原创 抓屏技术之MirrorDriver镜像驱动应用

并且在文章的最后我们通过UVNC引入了Mirror Driver的一个使用例子,本文我们就来探讨一下这个例子的具体使用和实现。通过自己实现的MV2.DLL,我们成功实现了高效抓图的应用。中就分析过,Mirror Driver其实是可以支持Win 7以上系统的,但是UVNC在Win8以及以上系统使用的是ddengine来进行高效抓屏。对于具体每个函数的具体作用,这里不做详细分析,我们先来看一下共享内存的创建过程,这个过程在图形表面被创建的回调函数。的驱动,并且可以支持UVNC的驱动替换。

2023-11-04 09:57:45 551

原创 Windows键盘和鼠标输入过程

从上面分析我们可以知道针对鼠标和键盘有两种处理方案。首先使用来设置鼠标键盘钩子(或者低级钩子),这样就可以在鼠标和键盘响应之前捕获消息,但是如果需要针对CTRL + ALT + DELETE键进行处理,那这两个操作就达不到要求了。鉴于的局限,网上有人实现了一种比较偏门的键盘热键拦截的方案,就是HOOK函数,从上面的分析我们可以发现,这个函数在所有键盘事件处理之前,因此肯定可以拦截所有消息了。但是对于这种方案的稳定性和兼容性本人没法做相关保证,因此如果正式项目中还是谨慎使用。

2023-10-24 09:15:43 545

原创 Windows消息钩子实现原理

消息钩子的枚举。消息钩子的摘除。很多的ARK工具都包含了上述两个功能,大致来说也是枚举和摘除相关链表。

2023-10-23 08:48:48 597

原创 Windows 窗口站的基本原理

例如,动态数据交换(DDE)应用程序使用全局原子表(global atom table)与其他应用程序共享项目名称和主题名称字符串,不用传递实际的字符串,一个DDE应用程序传递全局原子给它的父进程,父进程使用原子提取原子表中的字符串。注意:下面的代码来自REACTOS的代码分析,Windows的真实代码可能和其有出入,但是实现原理基本一致,我们探讨原理使用的是REACTOS源码(因此下面的源码只是说明原理,并不代表Windows的真实实现)。,与上面的声明不太一致,但是并不影响整个流程的理解。

2023-10-20 09:49:33 240 1

原创 Windows 会话内存隔离原理

首先需要明白一个概念的是,我们在显示器上面看到的东西,都是内存(或者显存)里面的东西,如果我们在同一个时候,同一个内存位置看到的东西不同,那么,肯定就是看到不同的内存。说到会话隔离,其中显而易见的就是GDI对象的隔离,所有的GDI内存都是跟会话相关的,那么GDI内存是怎么做到会话隔离的呢?我们可以先看一下GDI创建的时候内存从哪里来的。从这里我们可以发现,所有的内存都是通过会话内存来的,也就是说通过桌面这个堆分配的GDI内存,都落在了会话内存中了,因此GDI对象也就通过会话进行内存隔离了(关键函数在于。

2023-10-19 10:03:34 651 1

原创 Windows GDI句柄分析

我们知道,Windows 的GDI是一个单独的子系统,这个子系统中包含两个重要的东西是CSRSS进程和WIN32K驱动,由这两个模块实现所有的绘图操作,我们先看一下其中的核心之一就是WIN32K,这个模块加载的时候会调用。主要有一个好处就是Windows在应用层的时候就可以通过句柄找到GDI对象,而不需要切换到内核中,我们知道切换到内核是需要一定的资源消耗的,因此使用这种方式可以提升一定的速度。不同的进程,对应的GDI对象的句柄是一样的,因此GDI对象不同于内核对象,完全可以跨进程使用。

2023-10-18 09:40:14 548 2

原创 DRIVER_POWER_STATE_FAILURE蓝屏问题分析(一)

综上,我们总结一下发起电源IRP的整个过程。创建一个IRP。设置好IRP对应的DPC定时器看门狗,如果看门狗超时,那么就会直接蓝屏。将IRP放入到队列中,提交给来处理。从队列中取出IRP,然后发送IRP到指定的设备栈。IRP正常完成,那么取消DPC的看门狗。如果IRP超时,那么DPC定时器相应,然后蓝屏。我们先来看一个问题,据反馈系统大致运行7分钟之后出现蓝屏,为什么会是这个时间呢?4: kd>?0000012c。

2023-10-15 17:24:31 5912 9

原创 抓屏技术之MirrorDriver镜像驱动实现

在WinXp的系统下面,显示的引擎主要还是支持2D,但是随着游戏等领域的兴起,D3D成为了Windows的核心显示引擎,MirrorDriver是WinXp下面的技术,是一种驱动层面支持绘图的技术。因为AERO特效的实现是在DWM.EXE进程里面完成的,但是DWM的合成操作的图形绘制并不会经过Mirror驱动的回调函数,这是系统的特性。对于这些回调函数,不用做任何处理,提供一个空的即可。对于第二种方法,存在一个困难的点就是显示驱动是运行再会话空间中,不能调用系统层的相关函数,只能调用Win32k提供的。

2023-10-11 15:49:03 642

原创 DPC_WATCHDOG_VIOLATION蓝屏问题分析(一)

说明当前正在执行DPC例程,并且超时了,可以直接看到DPC超时的原因(或者由于其他线程导致该DPC一直无法退出)。说明此时该CPU一直处于DPC状态执行,这个原因需要具体分析。!查看所有cpu的dpcwatchdog信息。!dpcs查看指定cpu的dpc例程信息。

2023-10-11 08:59:07 25078 1

原创 WDF驱动开发之DriverEntry原理

从上分析,基本可以发现WDF框架应该是对WMD编程的一种封装,微软在编译WDF框架的驱动的时候,使用了lib库取代代码的入口函数,在lib库中的入口函数先初始化完成框架,然后在调用开发者编写代码的入口。卸载时候的调用栈01 WDFLDR!02 WDFLDR!03 nonpnp!04 nonpnp!05 nt!06 nt!07 nt!08 nt!

2023-10-10 19:31:15 598 1

空空如也

空空如也

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

TA关注的人

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