- 博客(198)
- 资源 (13)
- 收藏
- 关注
原创 ATL炒冷饭学习之三:CoInitialize/CoUninitialize
一、CoInitializeCoInitialize是Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。应用程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。HRESULT CoInitialize(_In_opt_ LPVOID pvReserved);参数被保留,且必须为NULL。S_OK : 该线程中COM库初始化成功S_FALSE: 该线程中COM库已经被初始化 C...
2021-12-06 17:59:34
683
原创 Detours学习之十四:Detour 4.0 的编译
第一步:下载源码 地址 https://github.com/Microsoft/Detours/releases ,并解压至自己选择好的目录。例如 C:\work\detours\第二步:编译x86 ,32位的编译打开VS 32位的命令行工具。这个可以是在开始——应用程序——vs2017找到。输入:cd C:\work\Detoursnmake -f makefile即可得到32位的编译结果。x64,64位的编译选择x64的cmd。输入:cd C:\work\De...
2021-10-29 22:50:07
1046
原创 Detours学习之十三:Detours API用于将dll和有效负载插入新进程的api
用于将dll和有效负载插入新进程的apiDetourCreateProcessWithDllEx DetourCreateProcessWithDlls DetourCopyPayloadToProcess DetourCopyPayloadToProcessEx DetourFinishHelperProcess DetourIsHelperProcess DetourRestoreAfterWith一、DetourCreateProcessWithDllEx创建一个新进程并将DLL
2021-10-29 09:32:05
1479
原创 Detours学习之十二:Detours API用于修改二进制文件的api
用于修改二进制文件的apiDetourBinaryOpen DetourBinaryEnumeratePayloads DetourBinaryFindPayload DetourBinarySetPayload DetourBinaryDeletePayload DetourBinaryPurgePayloads DetourBinaryEditImports DetourBinaryResetImports DetourBinaryWrite DetourBinaryClose一
2021-10-29 09:31:41
518
原创 Detours学习之十一:用于访问已加载的二进制文件和有效负载的api
用于访问已加载的二进制文件和有效负载的apiDetourEnumerateModules DetourGetEntryPoint DetourGetModuleSize DetourEnumerateExports DetourEnumerateImport DetourEnumerateImportEx DetourFindPayload DetourFindPayloadEx DetourFindRemotePayload DetourGetContainingModule De
2021-10-28 16:45:34
475
原创 Detours学习之十:用于查找目标函数的api
用于查找目标函数的apiDetourFindFunction DetourCodeFromPointer一、DetourFindFunction通过名称找到目标函数的地址。 定义 PVOID DetourFindFunction(_In_ LPCSTR pszModule, _In_ LPCSTR pszFunction); 参数 pszModule:应该在其中找到函数的DLL或二进制文件的路径。pszFunction:要查找的函数名。 返回值 如果成功,返回
2021-10-28 16:16:27
549
原创 Detours学习之九:用于路由目标函数的api
用于路由目标函数的apiDetourTransactionBegin DetourUpdateThread DetourAttach DetourAttachEx DetourAllocateRegionWithinJumpBounds DetourDetach DetourSetIgnoreTooSmall DetourSetRetainRegions DetourSetSystemRegionLowerBound DetourSetSystemRegionUpperBound D
2021-10-28 16:08:12
625
原创 Detours学习之八:DetoursAPI 函数参考
Detours API 函数参考The Table of Contents provides an alphabetical listing of the available API functions, which can be grouped as follows: 目录按字母顺序列出可用的API功能,可分为以下类别:APIs For Detouring Target Functions 用于迂回目标函数的apiDetourTransactionBegin DetourUpdateThre
2021-10-28 11:58:48
377
原创 Detours学习之七:Detours示例程序构建
Detours示例程序构建要构建示例应用程序,请在samples目录中键入nmake。注意,为了使用许多其他示例程序,必须构建setdll和syslog示例。 每个样例目录都有一个测试,可以通过键入nmake test调用它来演示样例的用法。除了极少数例外,所有的.exe程序也接受/?命令显示使用信息。 跟踪示例通过syelogd.exe守护进程记录其输出,并挂钩CreateProcessW以将自己加载到任何子进程。例如,输入withdll -d:trac...
2021-10-28 11:55:09
2740
原创 Detours学习之六:32位和64位进程路由
32位和64位进程 Detours最常见的使用场景是通过路由绕过现有应用程序中的功能,而不修改原始应用程序二进制文件。在这些场景中,用户提供的DetourCreateProcessWithDll函数被打包在DLL中,DLL在启动时使用DetourCreateProcessWithDll API加载到应用程序中。从父进程调用DetourCreateProcessWithDll API;它通过为detour DLL插入导入表项来更改应用程序的内存副本。这个新的导入表条目导致OS加载程序在应用程序...
2021-10-28 11:45:09
704
原创 Detours学习之五:PayLoads有效负载和DLL导入编辑
PayLoads有效负载和DLL导入编辑 除了附加和分离detours函数的api外,detours包还包括附加任意数据段(称为有效负载)到Windows二进制文件和编辑DLL导入表的api。Detours中的二进制编辑api是完全可逆的;Detours在二进制文件中存储恢复信息,以便在将来的任何时候删除编辑。 Windows PE二进制文件格式。 上图显示了Windows Portable Executable (PE)二进制文件的基本结构。Windows二进制...
2021-10-28 11:37:48
3348
原创 Detours学习之四:拦截二进制函数
拦截二进制函数 Detours库支持拦截函数调用。拦截代码在运行时动态应用。Detours将目标函数的前几个指令替换为无条件跳转到用户提供的detour函数。来自目标函数的指令保存在trampoline函数中。trampoline由从目标函数中删除的指令和无条件地转移到目标函数的其余部分组成。 当执行到达目标函数时,控制直接跳转到用户提供的detour函数。detour函数执行任何适当的拦截预处理。detour函数可以将控制权返回给源函数,也可以调用trampoline函...
2021-10-28 11:08:36
391
原创 Detours学习之三:使用Detours
使用Detours为了达到拦截和截获绕过目标函数,有两件事是必要的:一个包含目标函数地址的目标指针和一个detour函数。为了正确拦截目标函数、detour函数和目标指针,必须具有完全相同的调用签名,包括参数数量和调用约定。使用相同的调用约定可以确保正确地保存寄存器,并确保在detour函数和目标函数之间正确地对齐堆栈下面的代码片段说明了Detours库的用法。用户代码必须包含detours.h头文件并链接到detours.lib库。#include <w...
2021-10-28 10:33:35
1049
原创 Detours学习之二:常见问题(FAQ)
常见问题(FAQ)本文介绍的内容包含了一个关于Detours的常见问题列表。这些问题是按主题类别和有趣 的领域分组的。兼容性Detours与Windows 10兼容吗? 是的。Detours完全兼容Windows 10桌面和服务器应用程序。虽然Detours可以用于Windows Store应用程序的开发和测试,但Windows 10的Windows Store新应用程序不能使用Detours。为什么我的Windows 10商店应用程序不能包含Detours? ...
2021-10-28 10:07:56
507
原创 Detours学习之一:概述
Microsoft Research Detours Package概述Detours是一个用于在ARM, ARM64, X86, X64和IA64机器上拦截二进制函数的库。Detours最常用来拦截应用程序中的Win32 api调用,比如添加调试工具。拦截代码在运行时动态应用。Detours将目标函数的前几个指令替换为无条件跳转到用户提供的detour函数。来自目标函数的指令被放置在蹦床上。蹦床的地址放在目标指针中。detour函数可以替换目标函数,也可以通过目标指针作为子例程调用目标...
2021-10-20 12:07:24
616
原创 windows内核开发学习笔记五十:x64调用协定
本篇文章描述x64代码中一个函数(调用方)用来调用另一个函数(被调用方)的标准流程和约定。调用约定违约x64应用程序二进制接口(ABI)默认使用四个寄存器的快速调用约定。在调用堆栈上分配空间作为一个影子存储,供调用者保存这些寄存器。在函数调用的参数和用于这些参数的寄存器之间有严格的一对一对应关系。任何不适合8字节的参数,或者不是1、2、4或8字节的参数,都必须通过引用传递。一个参数永远不会分布在多个寄存器上。x87寄存器堆栈未被使用。被调用方可能会使用它,但是在函数调用中它是vo
2021-08-06 14:47:52
613
原创 C++的Lambda表达式学习
Lambda表达式的定义 Lambda形式上表现为匿名内联函数,具有参数列表、返回类型和函数体等组成部分,但又与普通函数有一定差别,即它还具有一个捕获列表,且可定义在函数内部。其形式如下:[ 捕获列表 ] ( 参数列表 )-> 返回类型 { 函数体 } 捕获子句(也称为 c + + 规范中的引导。 ) 参数列表可有可无. (也称为lambda 声明符) 可变规范可有可无. 异常规范可有可无. 尾随-返回类型...
2021-07-12 17:47:16
497
5
原创 windows内核开发学习笔记四十九:安全管理强制访问模型
以上就是SRM中自主f访问控制的实现过程。SRM的强制访问过程是通过特权检查来实施的,sePrivilegeCheck调位于base\ntos\se\privileg.c文件中的SepPrivilegeCheck函数执行实际的特权检查。其参数Token代表了当前线程的安全环境,如同SepAccessCheck函数也需要代表调用线程的令牌一样;参数RequirePrivileges和RequiredPrivilegeCount合起来指明了调用线程要请求一组特权;参数PrivilegeSetCo...
2021-07-08 18:35:01
487
1
原创 windows内核开发学习笔记四十八:安全管理自主访问模型
接着上一篇博文学习安全管理,现在我们来学习对象管理器如何让使用SRM的安全检查的,当一个进程打开一个对象时,对象管理器在名字空间中查到目标对象后,但是在返回给句柄调用者以前,它调用\base\ntos\ob\obse.c文件中的ObCheckObjectAccess函数检查访问许可。ObCheckObjectAccess是对象管理器的函数,它将对象管理器与SRM的安全机制连接起来。它首先调用ObGetObjectSecurity函数以获得目标对象的SD(安全描述符),数据类型为SECURIT...
2021-07-08 18:32:06
528
原创 windows内核开发学习笔记四十七:安全管理
windows系统有严格的安全模型,既实现了以对象为基础的自主访问控制(discretionary access control)又实现了系统级的强制访问控制(mandatory access control)。在自主访问的控制模型中,对象的所有者授权或拒绝哪些用户可以访问该对像。基于对象的访问控制并不能保护系统的所有操作,因为操作并没有与一个特定的对象联系在一起,如系统停机(shutdown)、备份文件核目录、交互式登陆到系统中等;甚至有些操作针对整个系统,并不与特定用户账号相关联,如账户...
2021-07-08 09:32:14
437
1
原创 windows内核开发学习笔记四十六:事件追踪(ETW)
Windows提供了统一的跟踪和记录事件的机制,称为ETW(Event Tracing For Windows)。用户模式应用程序和内核模式驱动程序都可以使用ETW来记录事件。ETW是直接由内核支持的事件记录机制。在它的框架结构中,共有三种组件:控制器(Control):负责启动、停止或配置事件记录会话。 提供者(Provider):负责向ETW注册自己的事件类,并接受控制器的命令,以便启动或者停止它们所负责的事件类的记录过程。 消费者(Consumer):负责有针对性地读取它们想要...
2021-07-07 13:30:02
2112
原创 windows内核开发学习笔记四十五:内核配置管理器
配置管理器是执行体中的组件,它的实现依赖于内存管理器和缓存管理器(以及文件系统),这就意味着它必须要在这些组件初始化以后才能正常工作;然而在系统初始化的早期(比如I/O子系统的初始化),windows已经需要使用注册表中的配置信息了,但此时配置管理器尚未被初始化。windows的做法是,在内核初始化以前,内核加载器(ntldr)已经将整个HKLM\SYSTEM储巢作为一个只读文件加载到了内存中,因而配置管理器在完全初始化以前只需要直接把巢室索引加上该储巢的内存映射地址,就可以得到巢室的内存地...
2021-07-06 16:56:09
359
原创 windows内核开发学习笔记四十四:注册表存储结构-储巢
上一篇文章学习了注册表的逻辑结构,接下来我这篇文章来学习注册表的存储结构。注册表实际存储是由一组储巢构成,每个储巢包含了一个由键和值构成的层次结构。下面表是windows的各个储巢的注册表路径和文件路径。一个系统的储巢列表存放在HKLM\SYSTEM\CurrentControlSet\Control\hivelist键下。当系统初始化时,HKLM\SYSTEM总是被先加载进来,然后配置管理器找到hivelist键,继续加载其他的储巢,并创建注册表的根键,将这些储巢连接起来,就建立起了完整的...
2021-07-05 17:19:40
451
原创 windows内核开发学习笔记四十二:内核对象管理目录及接口
windows内部维护了一个对象层次目录(即系统全局名字空间),其根目录对象是由全局变量ObpRootDirectoryObject来定义的。在根目录之下,系统内置了一些子目录,通过查询NtCreateDirectoryObject函数可以看到CallBack、ArcName、Device、Driver、FileSystem、KernelObjects、ObjectTypes、GLOBAL??和Security子目录的创建过程,下面的是创建Driver子目录的代码://创建driver目...
2021-07-04 21:03:48
446
原创 windows内核开发学习笔记四十一:内核对象管理机理
对象管理器是执行体中的组件,主要管理执行体对象。执行体对象也可能封装了一个或多个内核对象。
2021-07-03 21:21:16
304
3
原创 windows内核开发学习笔记四十:内核概念之同步处理
现代操作系统中,由于多处理器、多核或者中断等各种并发(concurrency)因素的存在,同样的代码有可能被并发执行,而数据也可能被并发访问。在这种情况下,对于可能被并发访问的数据进行必要的同步(synchronization)保护是一种常见的编程实践。windows操作系统提供了多种同步机制,使得系统代码或者应用程序代码能够选择恰当的手段来保护其代码和数据。根据执行环境中的IRQL值大于APC_LEVEL或者等于PASSIVE_LEVEL,可以将同步机制分为:不依赖于线程调度的同步机制 和...
2021-06-29 12:11:17
410
原创 windows内核开发学习笔记三十九:内核概念之中断和异常
中断(interrupt)是处理器与外部设备打交道的重要途经;而异常(exception)则是处理器的正常指令流在执行过程中产生一些特殊事件,需要紧急处理才能继续原来的指令流。它们都会打断一个正常的指令流,但区别在于,中断的发生与当前指令流并无实质的联系,而异常则是当前指令流执行的直接结果。而且,中断是异步的,而异常是同步的。 尽管中断和异常的触发来源和方式不相同,Intel x86处理器内部使用同一套陷阱机制来处理中断和异常,它利用IDT(Interrupt Descri...
2021-06-29 10:11:25
499
原创 windows内核开发学习笔记三十八:内核概念之进程和线程管理
前面在windows内核开发学习笔记三十五:系统线程和系统进程博文中介绍了系统进程和系统线程,涉及了一些线程和进程的概念,在本文更进一步的介绍进程和线程管理的相关知识。 进程(process)定义了一个执行环境,包括他自己的私有的地址空间、一个句柄表,以及一个安全环境;线程(thread)则是一个控制流,有自己的调用栈(call stack),记录了它的执行历史,每个进程都包含一个或多个线程,当进程被初始创建时系统为该进程创建第一个线程;当最后一个线程结束时,进程也随之结束...
2021-06-28 17:24:58
479
原创 windows内核开发学习笔记三十七:内核概念之内存管理
Intel x86体系结构既支持段式内存管理,也支持页式内存管理,然而,windows没有使用段式内存管理方案,而只是简单地将32位虚拟内存空间按照0~4GB的线性地址空间来看待。任何一个进程都定义了它自己的完整4GB地址空间,但是,其中的2GB~4GB之间的部分是所有进程共享的,称为系统地址空间;0~2GB部分是进程私有的,称为进程地址空间。但是对于一些对内存大小有特殊要求的应用程序,如数据库,对私有空间要求越大越好,因此需要在windows的引导选项”/3GB"对进程空间进行设置以获得3...
2021-06-28 15:07:56
383
1
原创 windows内核开发学习笔记三十六:内核概念之内核模式
windows内核中的各个组件并非单纯的独立模块,相反地组件之间不可避免地包含着复杂的依赖关系,甚至存在着交叉调用。
2021-06-28 11:44:28
420
1
原创 windows内核开发学习笔记三十五:系统线程和系统进程
在 在windows中,每个线程代表一个指令执行序列,同时也是一个调度单元。进程定义了一个执行环境,有自己的独立地址空间。每个线程都必定依附一个进程。windows内核除了接受来自应用程序的系统服务调用,它自己也有一些线程用于各种用途,这些线程运行在一个特殊的进程环境中,称为system进程(注意与操作系统的关键进程--系统进程的区别)。system进程的线程被称为系统线程,其中有一组系统辅助线程(system worker thread)代表操作系统或者其他应用进程来完成一些特殊的工作。...
2021-06-27 22:18:38
375
原创 windows内核开发学习笔记三十四:windows子系统之图形设备接口
windows的图形引擎也是在windows子系统中提供的,有以下两个方面特点:一是它提供了一套与设备无关的编程接口-GDI,使得应用程序可以适应各种底层显示设备的差异;二是应用程序与图形驱动程序之间的通信足够高效,从而即使在频繁输出和刷新图形元素的情况下,windows也能够为用户提供良好的视觉效果。 在技术上,windows子系统定义了一个稳定的图形体系结构,以便于第三方图形设备硬件厂商可以方便地将他们的视频显示器和打印设备集成到windows中,win32k.sys 通...
2021-06-27 18:46:43
395
1
原创 windows内核开发学习笔记三十三:windows子系统之窗口管理
windows子系统的用户界面管理有一个层次结构,通常应用程序只是在一个默认的桌面运行。每个子系统会话都有自己的会话空间,属于某个会话的资源将从该会话空间中分配。当用户登录到windows中时,操作系统将为该用户建立一个会话;即使用户通过远程桌面或者终端服务连接到一个系统中,系统也会为该用户建立一个单独的会话。在一个会话中,有一个交互式窗口站,可能还有非交换式窗口站。在交互式窗口站中通常有三个桌面:登录桌面、默认桌面和屏幕保护桌面。通常运行的图形界面应用程序运行在默认桌...
2021-06-27 17:01:54
469
原创 windows内核开发学习笔记三十二:windows子系统
windows支持三个环境子系统:OS/2、POSIX和windows(win32)。
2021-06-27 14:51:59
726
原创 windows内核开发学习笔记三十一:内核的关键组件之网络
在windows系统开发之初,网络并不是系统的标准配置,随着网络技术的普及逐渐演变为系统的标准配置,为应用程序提供了多种网络的API,可以供在安装时根据硬件的配置需求做出适当的选择,下面就是windows平台上的主要的网络:windows套接字:简称winsock,实现并扩展了BSD套接字标准。最新版本winsock2.0,支持异步网络I/O、服务质量(Qos)规范、可扩展名字空间以及多点消息传输等新特性。 WinInet:这个是一个高层次的网络API,支持包括Gopher、FTP和HTT...
2021-06-26 23:06:21
448
1
原创 windows内核开发学习笔记三十:内核的关键组件之文件系统及存储管理
在在xian 在现代操作系统中,文件系统是外部存储设备的标准接口,它为应用程序使用这些设备中的数据提供了统一的抽象。
2021-06-25 18:12:24
381
原创 windows内核开发学习笔记二十九:内核的关键组件之设备驱动程序
前面介绍了执行体、内核、硬件设备抽象三个内核核心功能,这三个功能,位于内核模块ntoskrnl.exe和HAL中,其中执行体和微内核共存于内核模块ntoskrnl.exe中。除了这三部分外,其他的模块几乎都是以驱动程序的形式存在的。windows操作系统中的设备驱动程序,不一定对应着物理设备,也可以是虚拟设备,甚至完全与设备无关的仅仅是内核的扩展模块。从软件的角度而言,可以把设备驱动程序看成是windows内核的一种扩展机制,系统通过设备驱动程序来支持新的物理设备或者扩展功能。 设备...
2021-06-25 14:47:34
530
原创 windows内核开发学习笔记二十八:内核的关键组件之执行体(Executive)
执行体是内核模块的上层部分,在大的方面看,执行体包含以下组件:进程和线程管理器,负责创建进程和线程,以及终止进程和线程。对于进程和线程的底层支持是在内核层中提供的,执行体在内核层的基础上又添加了一些语义和功能。 内存管理器。此组件提供了虚拟内存功能,既负责系统地址空间的内存管理,又为每个进程提供了一个私有的地址空间,并且也支持进程间的内存共享。 安全引用监视器,该组件强制在本地计算机上实施安全策略,守护操作系统的资源,执行对象的保护和审计。 I/O管理器。实现与设备无关的输入和输出功能,负责将I/
2021-06-25 11:29:15
796
1
原创 windows内核开发学习笔记二十七:内核的关键组件之内核(微内核)
内核(微内核)这个其实就是内核的核心部分了,它负责线程调度和终端,异常的处理,在多处理器的情况下,还负责多处理器之间的协调,从而优化系统的性能。这层的核心任务是:让系统中所有的处理器尽可能地忙和高效。windows的内核按照面向对象的思想来设计,它管理两种类型的对象:分发器对象(sipatcher object)和控制对象。分发器对象实现了各种同步功能,这些对象的状态会影响线程的调度。windows内核的分发器对象有:事件,突变体,信号量,进程,线程,队列和定时器等。控制对象用于控制内核的操作。.
2021-06-24 18:53:09
676
TestLibzmqReqRepBroker.rar
2020-05-11
TestZeroMQPublisherSubscribe.rar
2020-05-10
vc6使用开发miniblink控件简单实例
2018-12-26
websphere V6调优概要(红皮书)
2010-05-23
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人