Windows操作系统
《windows核心编程》学习相关
王大碗Dw
志不强者智不达
成为自己小时候想象的样子!
展开
-
自启动技术之注册表
实现原理:核心:Windows提供了专门的开机自启动注册表。每次开机完成之后,它都会在这个注册表键下遍历键值,以获取键值中的程序路径,并创建进程启动程序。所以想要使用注册表实现自启动,只需要在这个注册表键下添加想要设置自启动程序的程序路径就可以了。俩种修改方案:主要区别就是主键不同。HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\Software\Microsoft\Windo原创 2020-09-06 16:46:38 · 417 阅读 · 0 评论 -
自启动技术之快速启动目录
快速启动目录:这是一种最简单的自启动技术,因为不用修改任何数据。实现原理:windows系统有自带的快速启动文件夹,只要把程序(一般是程序快捷方式)放入到这个快速启动文件夹中,系统在启动时就会自动地加载并运行相应的程序,实现开机自启动功能。注意:快速启动目录并不是一个固定的目录,每台计算机的快速启动目录都不相同。需要使用 SHGetSpecialFolderPath函数获取Windows系统中快速启动目录的路径,快速启动目录的CSIDL标识值为CSIDL_STARTUP。使用CopyFile原创 2020-09-06 16:45:52 · 385 阅读 · 0 评论 -
高精度QueryPerformCounter()和低精度的sleep()
QueryPerformanceCounter()是一个微秒级的高精度的时间函数。QueryPerformanceFrequency()获得的是CPU的滴答数(频率),现在频率一般为1000。那么CPU的周期也就是1/1000的1us。QueryPerformanceCounter()和QueryPerformanceFrequency()需要配合使用QueryPerformanceCounter()这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时.但是QueryPerformanceC.原创 2020-07-12 12:33:40 · 1348 阅读 · 0 评论 -
Windows下的资源释放技术[C\C++]
资源释放技术:是一种病毒木马经常使用的技术,为了是程序变得更加简洁,当程序要使用一些图片、文本文件时可以把他们作为资源插入到程序中,当程序运行时,在释放到本地。这样编译出来就只有一个exe文件。实现原理:插入资源:首先创建资源,然后在VS里添加自定义资源,并导入创建的资源。然后利用FindResource()定位程序里的资源,获得资源信息块。再利用SizeofResource()获得资源的大小通过LoadResource()把资源加载到程序内存中。接着通过LockResource()锁定加载原创 2020-06-11 11:04:47 · 644 阅读 · 0 评论 -
Windows下运行单一实例[C\C++实现]
运行单一实例:一般病毒都会使用运行单一实例技术,防止病毒文件多次运行,减小暴露的风险。本次实现是创建互斥体来实现。实现原理CreateMutex( _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes, _In_ BOOL bInitialOwner, _In_opt_ LPCSTR lpName );lpMutexAttributes [in, optional] 指向 _SECURITY_ATTRIBUTES原创 2020-06-11 11:04:26 · 255 阅读 · 0 评论 -
利用未被保护的内存突破 GS
为了将 GS 对性能的影响降到最小,并不是所有的函数都会被保护,所以我们就可以利用其中一些未被保护的函数绕过 GS 的保护。那我们在之前《《Windows安全机制》之GS机制》举得例子:SmallBuffer()void SmallBuffer(){ char BufferData[4] = ""; int num = 2;}int main(){ BigBuffer(); SmallBuffer(); getchar(); return 0;}使用 IDA 对可执行程序进原创 2020-06-02 22:31:49 · 191 阅读 · 0 评论 -
《Windows安全机制》之DEP(数据执行保护)
Windows安全机制第二弹——DEP保护,上一篇《Windows安全机制——ASLR(地址随机化)及如何关闭ASLR》,地址如下:https://blog.csdn.net/weixin_43742894/article/details/105702886...原创 2020-06-02 22:31:23 · 5736 阅读 · 0 评论 -
《Windows安全机制》之GS机制
Windows安全机制第三弹——GS机制第一篇《Windows安全机制——ASLR(地址随机化)及如何关闭ASLR》,地址如下:https://blog.csdn.net/weixin_43742894/article/details/105702886第二篇《Windows安全机制——DEP保护》...原创 2020-06-02 22:30:49 · 2654 阅读 · 0 评论 -
我以为面试官在第二层,没想到他在第5层(dll注入:系统kernel32.dll为什么在每个进程中的基址相同)
在漫长的春招过程中,身为一个大三找实习的弱鸡,免不了被面试官捶打。昨天被问到一个dll注入的问题,当时心想,正中我的下怀,唉,我就叽里呱啦把远程线程注入的实现过程讲了一下:1.使用进程PID打开进程,获得句柄2.使用进程句柄申请一块可读可写的内存地址3.把dll路径写入内存4.使用CreateRomteThread创建远程线程,调用LoadLibrary实现注入5.释放收尾工作或者卸...原创 2020-05-01 21:53:26 · 2143 阅读 · 6 评论 -
系统范围内拥有相同基址的DLL 以及这样做的原因
原文链接:http://www.nynaeve.net/?p=198因为某些原因,系统中的一些DLL需要加载在不同进程的同样的基地址上(在终端服务会话中,其中一些DLL可能使用轮流基地址) ,尽管微软没有明确的文档化, 一些程序的运行依赖于这些“固定基址的DLL”。这并不意味着这些DLL 的基地址不可改变,但是在系统运行的时候,所有的进程都将会把这些DLL 映射到同样的基地址上(如果它们确实...转载 2020-05-01 18:26:12 · 638 阅读 · 0 评论 -
作为初学者,我是如何认识写时拷贝(copy-on-write)——Windows内存管理
《Windows核心编程》学习笔记:内存管理重要内容:Copy-On-Write。copy-on-write为什么需要写时拷贝?实现原理:详细写入过程实现代码:为什么需要写时拷贝?Windows支持一种机制,允许俩个或俩个以上的进程共享同一块存储器。一方面会极大地提升系统的性能;另一方面,这也要求所有的应用程序实例只能读取其中的数据或是执行其中的代码,一个程序实例修改并写入一个存储页时,就...原创 2020-04-27 11:33:30 · 824 阅读 · 0 评论 -
Windows系统远程桌面控制实现——抓屏技术(BitBlt方式)
实现远程桌面控制的功能。实现之前,我们先思考传输速度的问题,它主要由三方面决定:1.抓屏 2.压缩 3.网络传输我们先来思考抓屏,也就是截取桌面图片。在此之前,先了解一些概念:**DC():**设备上下文**GetDC():**该函数检索一指定窗口的客户区域或整个屏幕的显示设备上下文环境的句柄,以后可以在GDI函数中使用该句柄来在设备上下文环境中绘图。GetDesktopWind...原创 2020-04-21 23:23:46 · 3015 阅读 · 0 评论 -
Windows下虚拟地址到物理地址的映射——Windows内存管理
Windows内存管理知识总结本篇文章主要是理解32位Windows操作系统下的虚拟地址到物理地址的映射。首先我们对Windows的内存管理机制做简要介绍。Windows为每个进程分配了4GB的虚拟地址空间,让每个进程都认为自己拥有4GB的内存空间。然后Windows系统把这4GB大小的空间划分为进程和系统两个部分,每个进程可以获得2GB的虚拟内存,根据可用的容量。分配给所有进程的虚拟内...原创 2020-04-26 23:46:23 · 1908 阅读 · 1 评论 -
Windows下的进程提权
为什么需要进程提权?在我们进行某些操作的时候,常常会提示权限不足的提示,这时就需要提升自己进程到系统权限。原理:windows的每个用户登录系统后,系统会产生一个访问令牌(access token),其中关联了当前用户的权限信息,用户登录后创建的每一个进程都含有用户access token的拷贝,当进程试图执行某些需要特殊权限的操作或是访问受保护的内核对象时,系统会检查其acess tok...原创 2020-04-22 11:09:04 · 1355 阅读 · 0 评论 -
Windows安全机制——UAC(用户权限控制)
首先必须澄清一下:UAC不是Vista才有的东西!我反正知道XP就有了,2000不知道,XP上也有UAC,只不过默认没有开启,你要是愿意可以自己开启,只不过太不人性化了,和Linux上的switch user一样不人性化,没次提权必须输入管理员用户的密码。(见下面图)所以Vista的UAC根本就不是什么新鲜玩意,如果当时完全按照微软的规范编程,升级到Vista以后UAC带来的兼容性问题虽然有但不...转载 2020-04-22 09:42:21 · 6714 阅读 · 0 评论 -
Windows系统远程桌面控制实现——传输
实现远程桌面控制的功能。我们需要思考传输速度的问题,它主要由三方面决定:1.抓屏 2.压缩 3.网络传输上一篇文章写了抓屏技术,压缩的话使用zlib压缩,现在主要总结一些传输的问题。进行传输,首先获得位图信息。 //得到bmp结构的大小 ULONG BufferLength = 1 + m_ScreenSpy->GetBitmapInfoLength(); ...原创 2020-04-21 23:49:36 · 1331 阅读 · 0 评论 -
使用管道通信实现可交互式远程CMD
为了实现一个可交互式的远程cmd,我选用了匿名管道来实现cmd的重定向,通过把cmd.exe进程的输入输出重定位到管道的输入输出,可以实现主进程与cmd.exe的交互。具体实现重定位的技术是利用与创建进程的函数CreateProcess的一个参数STARTUPINFO来进行设置,这个参数可以用于设置进程的输入输出,默认的情况是系统的标准输入输出,修改后可以重定位到管道的输入输出。因为匿名管道...转载 2020-04-21 15:38:17 · 1232 阅读 · 0 评论 -
IO完成端口——C/S通信模式中性能最好的网络通信模型
大佬文章:https://blog.csdn.net/piggyxp/article/details/6922277首先我们应该了解,Windows的俩种通信模型:1.串行模型:一个线程等待一个请求,当请求到达时,线程被唤醒对请求进行处理;处理完后再接着等待下一个请求。缺点:不能同时处理多个请求。2.并发模型: 一个线程等待一个请求,当请求到达时,线程会创建一个新的线程来处理请求。...原创 2020-04-15 22:50:58 · 483 阅读 · 0 评论