KookNut39
让热爱驱动自我
展开
-
为什么使用智能指针?拿unique_ptr举个例子吧
大家好我是kt,其实windows专栏已经停更了,想着把一些新的想总结的知识点放在《C++开发进阶》这个专栏里面,但是总有兄弟们捧场订阅windwos编程的专栏,所以我还是决定把这篇也放在和windows这个专栏里,订阅了的兄弟们也算是一种福利吧,订阅一个专栏,相当于可以看其他专栏的内容!学习C++的同学不知道有没有这个感觉,就是你学的是C++,但是在日常的编程习惯中,还是习惯用面向过程的方法去思考,去编写代码原创 2022-05-09 17:47:53 · 791 阅读 · 0 评论 -
windows使用多线程对文件进行拆解与合并【壹】
本文使用基于Windows平台的C++开发,是面向解决我们实际应用中的问题而写,比如某绿色的聊天软件,对于我们发的文件大小有限制,如果超过某个大小就不能发送了,但是我们的文件本身确实非常大,那应该怎么办?我们可以对文件进行拆分,把它们划分成等分大小,比如文件大小是10000MB,限制大小是2000MB,那我们可以把这个文件划分成5等分,然后依次发送,到时候收到之后进行合并,就可以使用了,本文只是对文件的大小划分,没有整合的操作,下一次给大家介绍将文件合并的操作。主要用到的知识点是C++的一些新特性和wi原创 2022-01-02 23:03:51 · 903 阅读 · 1 评论 -
C++进阶之unique_ptr与lambda的结合妙用
题外话:我没想到真有人会订阅这个专栏,本来这个栏我不打算更新了,但是为了对得起目前唯一订阅我专栏的兄弟,我决定要更新,很感谢他的支持。我先说下为什么这些文章都付费了,本来我windows专栏是免费的,后来发现即使写一篇很好的文章,几乎得不到什么反馈和评论,我索性把文章设置成付费专栏,有缘的朋友们就随缘订阅,以后应该所有发的新文章都会付费。今天想说一下有关unique_ptr的一些使用方式还有lambda函数的用法,我相信很多学习C++的同学都了解过这两个东西,但是具体的使用上可能和我之前有着同样的疑惑.原创 2021-09-21 16:49:58 · 816 阅读 · 3 评论 -
文件映射相关操作(CreateFileMapping\MapViewOfFile)--TitanEngine
BOOL KtMapFileEx(const wchar_t* FileName, DWORD ReadOrWrite, LPHANDLE FileHandle, LPDWORD FileSize, LPHANDLE FileMap, LPVOID FileMapVA, DWORD SizeModifier){ DWORD FileAccess = 0; DWORD FileMapType = 0; DWORD FileMapViewType = 0; if (ReadOrWrite ==原创 2020-05-12 09:18:40 · 502 阅读 · 0 评论 -
Dos路径转换为文件路径--TitanEngine
//Dos路径转换为文件路径VOID* TranslateNativeNameW(wchar_t* NativeName){ //提交保留物理页,外部会对它进行释放 void* TranslatedName = VirtualAlloc(NULL, 0x1000, MEM_COMMIT, PAGE_READWRITE); //pointer is returned wchar_t DeviceName[3] = L"A:"; wchar_t DeviceCOMName[5] = L"COM原创 2020-05-12 09:24:10 · 591 阅读 · 1 评论 -
内存修改(Ring3)
Ring3对目标进程的内存进行修改,说一下实现思路:(1)调用GetSystemInfo函数得到系统信息,将应用层程序最大地址和页面大小保存到全局变量中(2)通过目标进程的进程名得到目标进程ID拍摄进程快照CreateToolhelp32Snapshot遍历ProcessEntry,进行字符串比较,匹配成功周,取出ID值,返出。(3)提权,根据目标进程ID打开进程,得到进程ID。(...原创 2020-04-08 22:19:08 · 569 阅读 · 0 评论 -
创建进程常见的方法
常见创建进程的几种方式:WinExecUINT WinExec( LPCSTR lpCmdLine, // command line UINT uCmdShow // window style);测试: /***************************************** *WinExec运行指定的应用程序 *lpCmdLine:命令行参数,如果名称中不包含可执行文件路径,则按照以下顺序查找 *exe启动路径--当前目录--Windows系统目录--Wi原创 2020-05-08 17:33:40 · 1022 阅读 · 0 评论 -
枚举进程(ZwQuerySystemInformation)
枚举进程的另外一种方法,也是CreateToolhelp32Snapshot内部真实的调用枚举进程信息的函数,在ntdll下导出的函数ZwQuerySystemInformation。这个函数是ntdll动态库下的一个导出函数,我们首先需要获得ntdll的模块句柄,接下来查找函数ZwQuerySystemInformation的函数地址,进行函数指针强转之后,进行调用。ZwQuerySys...原创 2020-03-13 16:34:59 · 1550 阅读 · 0 评论 -
枚举进程(CreateToolhelp32Snapshot函数剖析)
之前写过一些枚举进程的代码,这两天正在回顾之前学习的代码,看到了CreateToolhelp32Snapshot函数,就顺便来看看它的具体实现吧。实现枚举进程信息的这个过程看起来是比较easy的,只不过是一些Windows的API函数罢了:CreateToolhelp32SnapshotProcess32FirstProcess32Next就利用这三个函数,便可实现当前系统进程的枚举...原创 2020-03-13 14:47:56 · 782 阅读 · 0 评论 -
只用70行代码,手把手教你遍历当前windows所有进程!
我相信对于很多学习C++的同学来说,在初学阶段都比较疑惑的一个问题就是,我学这个东西可以干什么?就是为了输出“Hello World”吗?好像学了一堆东西总觉得学的云里雾里,不知道自己能干点什么。变量我知道,数据结构我也了解,类我也学习过,指针我也看过,STL标准模板库老师也讲过,但是这些东西在一起可以干什么?今天就让kt来带大家动手实践一下,以便提高大家学习的热情,写一段代码C++代码在windows系统上,实现所有进程遍历。默认大家都已经掌握了一定的C++编程水平,但是掌握度不高也没关系,照着步骤来原创 2021-06-06 10:59:10 · 8501 阅读 · 101 评论 -
利用psapi.dll提供的API枚举进程--Ring3枚举进程
按照惯例,先来看一下EnumProcesses的底层实现到底是个什么东东??其实其内部还是调用了Nt系列的函数,通过宏传递参数,查询各种信息。最终返出各个进程的ID值BOOLWINAPIEnumProcesses(DWORD *lpidProcess, DWORD cb, LPDWORD lpcbNeeded){ NTSTATUS Status; DWORD Size = MAXSHORT, Count; PSYSTEM原创 2020-05-09 12:16:21 · 1025 阅读 · 0 评论 -
Dll注入目标进程之后,vs如何调试本地Dll
准备工作:将Debug目录下的Dll.dll放置到当前cpp所在目录下,这么做的目的是为了我们在调试界面注入目标进程时,根据路径能找到Dll文件开始调试:1.我选择在启动程序的入口处下断点(F9),启动调试(F5),断点命中,之后Attach到目标进程,这个位置的选择不是一定的,只要在启动dll之前附加到目标进程就行。调试–>附加到进程2.选择需要Attach的进程,然后点击附加3.在Dll.dll中想要下断点的地方下断点4.当你在启动程序中,执行CreateRemoteThread原创 2020-05-15 09:02:26 · 1155 阅读 · 1 评论 -
使用WTSEnumerateProcesses枚举进程--Ring3枚举进程
接下来介绍的这种枚举当前系统进程的方法是通过wtsapi32.dll提供的API来实现。主要用到了以下两个函数:WTSOpenServerAWTSEnumerateProcessesA我们来简单介绍一下这两个函数:/****************************************WTSOpenServer函数打开指定终端服务器的句柄*pServerName:指向终端服务器的NetBIOS名称的指针。**************************************原创 2020-05-09 17:22:56 · 1110 阅读 · 1 评论 -
延迟载入DLL
延迟载入DLL原创 2020-03-19 10:47:10 · 406 阅读 · 0 评论 -
字节存储顺序(大端和小端)
Big-endian(大端):高位字节存入低地址,低位字节存入高地址。Little-endian(小端):低位字节存入低地址,高位字节存入高地址。例如,将20200521h写入内存中,分别以大端和小端存储,我们会看到什么?我们假设内存起始地地0x009AFD40为起始存储地址:我电脑使用的inter的处理器,在VS2017中我们可以看到内存存储是小端存储方式。“What do you do when things go wrong? Oh! You sing a song!”...原创 2020-05-21 10:35:47 · 1973 阅读 · 1 评论 -
如何让exe自己删除自己??
我们都知道,当一个exe程序在启动之后,操作系统会把这个可执行文件加载到内存中去,在程序处于运行状态时,如果我们想要把这个文件删除,那就会出现以下情况:那我们将不得不等到程序执行完毕之后,手动的来删除这个文件,但是有没有一种办法可以直接在程序退出的时候,就自动删除这个可执行文件呢??加入我们想要用我们的程序做一些“坏事”,比如说是我们要实现一个IATHook,我们需要一个启动进程,在目标进程地址空间中申请空间,进而实现dll的注入,启动dll。当我们的启动进程完成对目标进程的注入这些事情之后,能不能原创 2020-05-10 18:39:47 · 2991 阅读 · 5 评论 -
OpenProcess函数打开进程权限不够??
我们会遇到OpenProcess函数失败的情况,通过GetLastError函数发现其错误代码为5,VS查看之后发现拒绝访问:这是因为用OpenProcess打开一些普通进程是可以的,但是要打开的是系统安全进程(如System、Winlogon、smss、csrss、services、lsass等)或是一些注册为服务的进程时,就会遇到拒绝访问的情况。此时我们该如何解决这个问题呢?解决这个问题只需要当前进程具有SeDebugPrivilege权限就可以了。打开权限相关的函数有:OpenProcess原创 2020-05-08 17:54:29 · 4347 阅读 · 6 评论 -
SSDTHook实现解析(x86)
在说到SSDTHook实现之前,我们首先来了解一下Win32API的调用过程,我们以ReadFile()为例,来看看从Ring3层到Ring0层的调用过程:在一个Ring3进程Test.exe中调用ReadFile()函数,此时我们调用的是kernel32.dll中的导出函数,接下来ReadFile()会调用到位于ntdll.dll中的NtReadFile()或者ZwReadFile(),在nt...原创 2020-02-18 20:06:36 · 402 阅读 · 0 评论 -
内存修改(Ring0)
实现两个Ring3层进程虚拟地址空间中的数据拷贝,实现思路:原创 2020-04-08 23:27:04 · 783 阅读 · 0 评论 -
驱动程序数据结构--DRIVER_OBJECT
我们先来看一下微软对这个结构体的定义:typedef struct _DRIVER_OBJECT { CSHORT Type; CSHORT Size; PDEVICE_OBJECT DeviceObject;//该驱动程序挂载的设备对象 ULONG Flags; PVOID DriverStart; ULONG DriverSize; ...原创 2020-03-31 17:09:55 · 475 阅读 · 0 评论 -
WDK中导出的内核对象类型(Windows内核学习笔记)
把笔记中的一些东西搬在这里,和大家分享下//内核对象的对象类型 //Windbg 32位调试 ObjectType = *IoFileObjectType = 0x871f53c0 //ObjectType = *ExEventObjectType = 0x871fcd70 类似这些值都是固定的 //Windbg: dd IoFileObjectType 查看exte...原创 2020-04-07 23:41:35 · 477 阅读 · 0 评论 -
ProbeForRead&&ProbeForWrite(Windows内核学习笔记)
上篇博文提到了Ring0层对于Ring3层地址的校验方法,我将源码中的实现放到这里:其中判断是否越界的那个宏:MmUserProbeAddress,在源码中没有找到它的定义,所以用Windbg看了看。Windbg:/* ProbeForRead例程检查用户模式缓冲区是否实际驻留在地址空间的用户部分中,并且是否正确对齐。 简而言之,就是看看这块内存是否是Ring3的内存,并不检查内存是...原创 2020-04-01 22:42:02 · 1395 阅读 · 0 评论 -
分页和非分页内存(Windows内核学习笔记)
Pagedpool:原创 2020-04-08 17:35:28 · 3024 阅读 · 0 评论 -
浅谈MDL(壹)(Windows内核学习笔记)
先说说MDL是个啥东西,看一下MSDN的定义:Memory descriptor list. An opaque structure, defined by the Memory Manager, that uses an array of physical page frame numbers (PFNs) to describe the pages that back a virtual m...原创 2020-04-09 23:33:22 · 1257 阅读 · 0 评论 -
Ring3与Ring0之间的通信方式(Windows内核学习笔记)
我们写一个Ring0的代码,有时候需要和Ring3进行交互,比如我们做一个进程防杀的驱动保护,那我们可以通过Ring3的进程,发送请求告诉驱动层,究竟哪些进程属于白名单,哪些属于黑名单,而在通信过程中,涉及到了应用层与内核层之间通信的一些数据传输方法,我在这里简单做一个学习笔记:如果一个驱动要和应用程序通信,首先需要生成一个设备对象(DeviceObject),设备对象可以通过某种方式在内核中暴...原创 2020-04-01 22:20:28 · 1255 阅读 · 0 评论 -
定位HandleTableEntry(Windows内核学习笔记)
通过HandleTable定位HandleTableEntry的方法:typedef union _EXHANDLE{ struct { ULONG_PTR TagBits:2;//这两位为0 ULONG_PTR Index:29;//句柄表的索引 }; struct { ULONG_PTR...原创 2020-04-07 23:26:00 · 946 阅读 · 0 评论 -
内核对象(Windows内核学习笔记)
对象,是一个特殊的数据结构,用来定义受保护得实体,我们平时所说得对象实际上是对象体,例如进程对象,就是EPROCESS。所以内核对象不能直接被用户层进行操作,那我们只能通过句柄。句柄是一个指向对象得指针。对象具有唯一性,但是句柄可以有多个,也就是说一个对象可以有多个句柄来引用它,对它进行操作。用来管理命名对象的东西,叫做对象目录,对象目录我在后面会做介绍。原创 2020-04-07 23:24:03 · 441 阅读 · 0 评论 -
浅谈MDL(叁)--实例测试(Windows内核学习笔记)
在我之前写SSDTHook时候,用到过MDL的相关知识,是对内核层的虚拟地址进行MDL映射,然后修改,实现SSDTHook。原文链接:https://blog.csdn.net/qq_42253797/article/details/104352520接下来看一下MDL的实现过程:首先调用MmCreateMdl函数,对KeServiceDescriptorTable->Service...原创 2020-04-10 23:45:58 · 579 阅读 · 0 评论 -
VS2017编写Windows驱动注意事项
用VS2017编写Windows驱动的过程中需要修改的一些属性总结:1.解决方案->属性->C/C++>将警告视为错误 修改为 否 如图所示:2.解决方案->属性->链接器->将链接器警告视为错误 修改为 否 如图所示:3.解决方案->属性->Driver Setting->Target OS Version修改为Windows7,此...原创 2020-02-15 22:48:19 · 1268 阅读 · 0 评论 -
内核句柄表(Windows内核学习笔记)
每个有效的句柄都对应着句柄表中的一个表项,表项在句柄表中的位置取决于句柄的值。每当进程创建或者打开一个对象,要为之创建句柄并将其插入句柄表的时候,需要一个临时的HANDLE_TABLE_ENTRY数据结构,用ExCreateHandle将其安装到句柄表中,而该函数返回句柄,句柄的值表明了安装的位置,也是目标表项在句柄表中的下标。原创 2020-04-05 23:15:42 · 818 阅读 · 0 评论 -
枚举内核句柄表(Windows内核学习笔记)
前面我写过有关内核句柄表的一些知识,今天来在这里跟大家分享一下我自己写的内核枚举进程句柄方法。#include"EnumProcessHandleTable.h"#ifdef _WIN64 #define _HANDLE_TABLE_ 0x200 //硬偏移Win7x64下的HANDLE_TABLE字段在EPROCESS下的偏移#define _OFFSET_ ...原创 2020-04-14 22:36:38 · 872 阅读 · 0 评论 -
进程相关的函数
得到当前进程进程的EPROCESS、当进程的ID、当前进程的句柄FORCEINLINEPKTHREADKeGetCurrentThread(VOID){ return (struct _KTHREAD *)__readgsqword(0x188);}FORCEINLINEPEPROCESS_PsGetCurrentProcess(VOID){ /* Get the...原创 2020-04-14 21:04:04 · 574 阅读 · 0 评论 -
对IRP知识总结(壹)(Windows内核学习笔记)
用户模式下对所有驱动程序的I/O请求都会,全部由操作系统转化为一个叫做IRP(I/O Request Package)的数据结构,不同的IRP数据结构会被派遣到不同的派遣函数中进行请求的处理。在一个驱动程序中对应的DriverObject中,有个函数指针数组MajorFunction,里面存放的是派遣函数的地址,通过这个数组,可以将IRP请求与对应的派遣函数关联起来。...原创 2020-04-15 16:24:07 · 736 阅读 · 0 评论 -
用户内核模式切换(Windows内核学习笔记)
Inter x86将处理器执行模式分为4层环,我们平时说的用户层程序处于3环(Ring3),内核层代码处于0环(Ring0),而Ring3的地址空间是各进程之间独立的,Ring0层是进程之间共享,不同进程会由进程上下背景文的切换来实现对Ring0层访问。Windows中并没有使用Ring1和Ring2层。...原创 2020-03-24 16:01:17 · 811 阅读 · 1 评论 -
RtlAnsiStringToUnicodeString源码实现
BOOLEAN NlsMbCodePageTag = FALSE; /* exported *///全局导出NTSTATUSNTAPIRtlAnsiStringToUnicodeString( IN OUT PUNICODE_STRING UniDest, IN PANSI_STRING AnsiSource, IN BOOLEAN AllocateDestinationString){ NTSTATUS Status; ULONG Length;原创 2020-10-02 22:15:15 · 550 阅读 · 0 评论 -
浅谈MDL(贰)(Windows内核学习笔记)
VOIDNTAPIMmProbeAndLockPages(IN PMDL Mdl, IN KPROCESSOR_MODE AccessMode, IN LOCK_OPERATION Operation){ PPFN_NUMBER MdlPages; PVOID Base, Address, Las...原创 2020-04-10 19:30:10 · 605 阅读 · 0 评论 -
Office复合文件格式(贰)
我们从现在开始,就一个ole文件的解析展开来说下里面具体涉及到的知识点,以及恶意代码可能出现的地方。解析文件的头部是我们首先要做的工作,上一篇博客给大家说了这个结构体,我们来拿一个sample看看里面的数据:...原创 2020-10-03 21:44:23 · 386 阅读 · 0 评论 -
Office复合文件格式(壹)
之前说好的更新,因为私人原因,有点事所以耽搁了,没能去及时的更新,今天先更新一下,下周可能要回趟学校,又无法更新了。今天我想说的是Office复合文件格式,之前一直在学习PE方面的知识(有关PE的那些博客,我之后也会抽空更新,今天想说说非PE),所以研究的文件格式主要集中在PE文件方面,最近有幸接触到非PE文件格式,想和大家一起分享学习一下这个格式,之所以进行这个文件的学习,因为其也是病毒的载体文件中的一种,非PE文件格式太多太杂,我们就先从最常见的Office文件类型开始。因为对非PE感兴趣的人可能不是原创 2020-09-12 20:58:39 · 788 阅读 · 0 评论 -
WindowsIPC机制--DLL全局变量共享
正常来说,一个可执行文件运行多个实例,这些实例不会共享可执行文件中的全局和静态变量。因为Windows通过写时复制机制来保证各个进程的全局静态区互相独立,当然DLL中的全局和静态变量也是被这样处理的。当不同的进程将DLL映射到自己的内存空间时,系统会为那些全局和静态变量创建不同的实例。...原创 2020-03-18 21:56:40 · 865 阅读 · 0 评论 -
WindowsIPC机制--剪切板(小测试)
剪切板相信大家都不陌生,我们平时都会使用Ctrl+C/V来解决一些相同内容的复制粘贴工作,而我们在不经意间就已经跨进程操作了,比如从word复制一段文字到notepad,这自然也属于进程间通信得一种方法。剪切板说白了就是一块所有进程共享的内存区域,里面存放的数据会随着每一次的剪切板内容变化而变化,也就是说里面的内容是暂时存储,而每当我们打开剪切板(OpenClipboard)进行操作时候,其实都是...原创 2020-03-17 21:21:08 · 414 阅读 · 0 评论