- 博客(131)
- 收藏
- 关注
原创 IO定时器和DPC定时器
// driver.c#include <ntddk.h>KDPC dpc;KTIMER timer;LARGE_INTEGER timeout;// 卸载函数VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);// 普通分发函数NTSTATUS DispatchRoutine(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);// 时钟处理函数VOID IoTimerTes
2022-04-27 08:53:30
334
原创 IRP取消及StartIO操作
#include <ntddk.h>// 卸载函数VOID DriverUnload(IN PDRIVER_OBJECT pDriverObject);// 派遣函数-常规NTSTATUS DispatchRoutine(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);// 派遣函数-读操作NTSTATUS DispatchRead(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);/
2022-04-26 13:16:13
235
原创 IRP异步完成处理
// driver.c#include <ntddk.h>LIST_ENTRY ListHeader;// 派遣函数-常规NTSTATUS DispatchRoutine(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);// 派遣函数-读操作NTSTATUS DispatchRead(IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp);// 派遣函数-清理NTSTATUS Dispat
2022-04-26 11:24:18
144
原创 IO操作-同步异步
// 同步#include <Windows.h>#include <stdio.h>int main(){ HANDLE hFile = CreateFile(L"Sync.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDL
2022-04-26 10:24:37
162
原创 黑客编程之线程劫持
#include <Windows.h>#include <stdio.h>#pragma pack(1)typedef struct _STCode{ BYTE PushCode; // push指令码 DWORD DllAddress; // 注入的dll字符串地址 USHORT CallCode; // call指令码 DWORD FuncAddress; // LoadLibrary函数地址 BYTE LoopCode[7]; // 循环指令}ST
2022-04-25 11:40:01
741
原创 Windows注入之SetWindowsHookEx
// console#include <Windows.h>#include <stdio.h>typedef LRESULT (*TestHookProc)(int code, WPARAM wParam, LPARAM lParam);int main(){ HWND hwnd = FindWindow(NULL, L"SetWindowHook"); DWORD dwThreadId = 0; DWORD dwProcessId = 0; HMODULE
2022-04-24 13:53:36
1071
原创 Windows驱动开发-串口过滤
// driver.c#include <ntddk.h>typedef struct _DeviceExtension{ PDEVICE_OBJECT AttachDevice; IO_REMOVE_LOCK RemoveLock;} DeviceExtension, *PDeviceExtension;// 卸载函数VOID DriverUnload(IN PDRIVER_OBJECT DriverObject);// 根据名称获取设备对象PDEVICE_OBJEC
2022-04-15 22:23:48
476
原创 Windows驱动开发-IO访问
// 驱动代码#include <ntddk.h>#define CTLBUFFERED CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)#define CTLDIRECTIN CTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_IN_DIRECT, FILE_ANY_ACCESS)#define CTLDIRECTOUT CTL_CODE(FILE_DEVI
2022-04-08 13:34:42
354
原创 Windows驱动开发-使用内存模拟文件读写
// 驱动代码#include <ntddk.h>#define MAX_FILE_LEN 4096// 设备扩展结构体typedef struct _FileExtend{ PCHAR Buffer; ULONG Length;} FileExtend, *PFileExtend;// 卸载函数VOID DriverUnload(IN PDRIVER_OBJECT DriverObject);// 派遣函数-基本操作NTSTATUS DispatchGeneri
2022-04-08 10:35:44
631
原创 Windows驱动开发-驱动与应用通信简单入门
// 驱动代码#include <ntddk.h>VOID DriverUnload(IN PDRIVER_OBJECT DriverObject){ UNICODE_STRING SymbolicLinkName = RTL_CONSTANT_STRING(L"\\??\\HelloDDK"); KdPrint(("驱动卸载\n")); UNREFERENCED_PARAMETER(DriverObject); IoDeleteSymbolicLink(&Symbol
2022-04-07 10:33:07
451
原创 Windows驱动开发-注册表操作
#include <ntddk.h>#include <windef.h>VOID DriverUnload(IN PDRIVER_OBJECT DriverObject){ KdPrint(("驱动卸载\n")); UNREFERENCED_PARAMETER(DriverObject);}VOID RegCreateTest(){ NTSTATUS status = STATUS_SUCCESS; HANDLE hKey = NULL; HANDLE h
2022-04-06 13:42:47
767
原创 Windows驱动开发-文件基本操作
#include <ntddk.h>VOID DriverUnload(IN PDRIVER_OBJECT DriverObject){ KdPrint(("驱动卸载\n")); UNREFERENCED_PARAMETER(DriverObject);}// 创建文件VOID CreateFileTest();// 写入文件VOID WriteFileTest();// 读取文件VOID ReadFileTest();// 读取文件属性VOID ReadF
2022-04-05 11:55:56
935
原创 Windows驱动开发-旁视列表操作
#include <ntddk.h>typedef struct _MYDATA{ int number;} MYDATA, *PMYDATA;VOID DriverUnload(IN PDRIVER_OBJECT DriverObject){ UNREFERENCED_PARAMETER(DriverObject); KdPrint(("驱动卸载\n"));}VOID LookAsideListTest(){ int i = 0; PMYDATA pdata[
2022-04-03 11:05:14
214
原创 Windows驱动开发-键盘驱动过滤
#include <ntddk.h>extern POBJECT_TYPE IoDriverObjectType;#define KDB_DRIVER_NAME L"\\Driver\\Kdbclass"#define DELAY_ONE_MICROSECOND (-10)#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND * 1000)#define DELAY_ONE_SECOND (DELAY_ONE_MILLISECON
2022-03-27 14:12:02
1331
原创 windows驱动过滤-串口过滤
#include <ntddk.h>#include <ntstrsafe.h>// 设定计算机上只有32个串口#define CCP_MAX_COM_ID 32#define DELAY_ONE_MICROSECOND (-10)#define DELAY_ONE_MILLISECOND (DELAY_ONE_MICROSECOND * 1000)#define DELAY_ONE_SECOND (DELAY_ONE_MILLISECOND * 1000)// 保
2022-03-26 11:30:59
485
原创 Windows驱动开发-服务操作
#include <iostream>#include <Windows.h>#define SER_NAME L"FirstDriver"#define SER_DISPLAY_NAME L"第一个驱动"int main(){ SC_HANDLE hSCM = NULL; SC_HANDLE hSer = NULL; do { hSCM = OpenSCManager(NULL, NULL, SC_MANAGER_CREATE_SERVICE
2022-03-23 21:38:25
288
原创 Windows驱动开发-DriverEntry入门
// first.c#include <ntddk.h>VOID DriverUnload(PDRIVER_OBJECT DriverObject){ if (DriverObject != NULL) { DbgPrint("[%ws]Driver upload, Driver Object Address: %p", __FUNCTIONW__, DriverObject); }}NTSTATUS DriverEntry(PDRIVER_OBJECT DriverO
2022-03-23 19:55:58
856
原创 主引导程序示例1-清屏打印字符串
mbr.S;主引导程序;--------------------------------------------------------------------SECTION MBR vstart = 0x7C00 mov ax, cs ; 此时cs为0,此作用是用ax进行段寄存器的清零操作 mov dx, ax mov es, ax mov ss, ax mov fs, ax mov sp, 0x7c00;清屏利用0x06号功能,上卷全
2021-11-02 23:39:11
245
原创 操作系统学习篇-几个基本概念(1)
几个名称解释:1.IO接口:硬件与CPU之间是通过适配器进行通信的,这些适配器就是IO接口。比如:显示器与CPU之间是通过显卡进行通信的。2.CPU访问外设的方式有两个:将某个外设的内存映射到内存中一定范围的地址空间中,CPU通过地址总线访问该内存区域时会落到外设的内存中,这种映射让CPU访问外设的内c存就如同访问主板上的物理内存一样。比如显卡,在显卡上有块存储区域,叫做显存,它被映射到主机物理内存上的低端的1MB的空间。CPU访问这片内存就是访问显存,往这片内存上写字节便是往屏幕上打印内容。通过
2021-10-26 22:32:05
241
原创 模板单例类
// Singleton.h#ifndef SINGLETON_H#define SINGLETON_H// 单例模板类template<typename T>class Singleton{public: static T* getInstance(void) { if (m_pInstance == nullptr) { m_pInstance = new T(); } return m_pInstance; }protected: S
2021-10-26 22:12:24
203
原创 Windows下的U盘监控
// Windows应用程序都是基于消息/事件驱动的,任何一个窗口都能接收消息,并对该消息作出相应的处理。// U盘等移动设备的插入或者移除操作有与之对应的消息-WM_DEVICECHANGE。实现监控U盘的插入和拔出,只需要捕获这个消息并对它进行处理即可实现。// PS:WindowProc函数:// 功能:消息处理回调函数。// 原型:LRESULT CALLBACK WindowProc (// HWND hwnd,// UINT uMsg,//
2021-10-24 14:07:43
1872
原创 windows文件遍历
// 文件遍历用到了WIN32 API中的FindFirstFile、FindNextFile和FindClose函数。// FindFirstFile函数:// 功能:它搜索与特定名称相匹配的文件或子目录。// 原型:HANDLE WINAPI FindFirstFile(_In_ LPCTSTR lpFileName, _Out_ LPWIN32_FILE_DATA lpFindFileData)// 参数:lpFileName:指定目录、路径,以及文件名。文件名可以包括通配符,星号(*)表
2021-10-23 10:23:46
972
原创 进程隐藏之API HOOK
// 在Windows中,用户进程的所有操作都是基于WIN32 API来实现的,例如使用任务管理器来查看进程等操作。// API HOOK技术是一种改变API执行结果的技术。// PS:ZwQuerySystemInformation函数:// 功能:获取指定的系统信息。// 原型:NTSTASTUS WINAPI ZwQuerySystemInformation (// _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass,
2021-10-20 22:52:04
1245
原创 提权技术之Bypass UAC
// UAC(用户账户控制)是微软在Windows VISTA以后版本中引入的一种安全机制。通过UAC,应用程序和任务始终在非管理员权限下的安全上下文中运行。// 除非特别授予管理员权限。UAC可以阻止未经授权的应用程序自动进行安装,并防止无意地更改系统设置。// UAC需要授权的动作包括:配置Windows Update、增加或删除用户账户、更改用户账户的类型、改变UAC设置、安装ActiveX、安装或移除程序、安装设备驱动程序、// 设置家长控制、将文件移动或复制到Program File或Wi
2021-10-19 23:22:35
937
原创 创建系统服务
// 系统进程自启动是通过创建系统服务并设置服务启动类型为自动启动来实现的。// PS:OpenSCManager函数:// 功能:建立一个到服务控制管理器的连接,并打开指定的数据库。// 原型:SC_HANDLE OpenSCManager (// LPCTSTR lpMachineName,// LPCTSTR lpDatabaseName,// DWORD dwDesiredAccess// )// 参数:
2021-10-17 16:50:55
717
原创 自启动技术之计划任务
// Windows系统可以设置计划任务来执行一些定时任务。// 原理:使用Window Shell编程实现创建计划任务时,会设计COM组件接口的调用。计划任务包括三个部分:初始化操作、创建任务计划操作、删除任务计划操作。// PS:初始化操作:// PS:步骤:// 首先,通过CoInitialize函数来初始化COM接口环境。// 其次,调用CoCrateInstance函数创建任务服务对象ITaskService,并将其连接到任务服务上。// 最后,从I
2021-10-16 16:23:35
438
原创 启动技术之快速目录自启动
// 在Windows中,存在着很多可以实现开机自启动的地方,可以利用进程监控器Procmon.exe来监控系统开机启动的过程。// PS:SHGetSpecialFolderPath函数:// 功能:获取指定的系统目录。// 原型:BOOL SHGetSpecialFolderPath (// HWND hwndOwner,// LPTSTR lpszPath,// int nFolder,// BOOL fCreat
2021-10-16 12:41:49
198
原创 突破SESSION 0隔离创建用户进程
// 病毒木马通常会把自己注入系统服务进程或是伪装成系统服务进程,并运行在SESSION 0中。// 处于SESSION 0中的进程能执行普通程序的绝大部分操作,但是不能创建UI界面以及通过消息机制与普通进程进行通信。// 从Vista开始,微软为windows添加了SESSION机制,也叫做会话隔离机制,目的就是将系统服务进程与普通用户进程进行隔离,运行在不同的权限下。// 一般只有服务进程才能运行在SESSION 0中。// 为了让系统进程能创建带UI的、能通信的用户进程,微软提供了以WTS
2021-10-16 12:16:45
810
原创 隐藏技术之进程伪装
// 简单的进程伪装就是修改进程名称,比如svchost.exe、services.exe等系统进程。// 高级的进程伪装就是修改进程的PEB数据,也就是在任务管理器中看到的进程的名称、启动路径等信息。// NtQueryInformationProcess函数// 作用:获取指定进程的信息。// 原型:NSTATUS WINAPI NtQueryInformationProcess(// _In_ HANLDE hProcess;// _In_ PROCESSIN
2021-10-16 11:08:09
1705
原创 开机自启动之注册表操作
// Windows启动后,会根据注册表项中的键值来进行枚举,获取启动程序的路径,根据路径创建进程以启动程序。// 在32系统中,有两个启动注册表项:// HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run// HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows\\CurrentVersion\\Run// 在64位系统下,进行了映射,对应的注册表项为:/
2021-10-14 23:02:16
2097
原创 进程单一运行实例
// 确保运行一个进程实例的方式有很多,可以通过扫描进程列表来实现,也可以通过枚举程序窗口的方式来实现,也可以通过共享全局变量的方式来实现,// 更简单的方式是通过创建系统命名互斥对象来实现。// PS:实现原理:// 通常情况下,系统中的进程是相互独立的,每个进程都有自己的独立资源和地址空间,进程间互不影响。所以同一个进程可以重复运行。对于特殊情况(共享系统资源)下,会有进程互斥现象产生。// 微软提供了CreateMutex函数来创建或者打开一个已命名或未命名的互斥对象,程
2021-10-14 22:44:04
308
原创 文件管理之内核API
// 创建文件或目录// PS:ZwCreateFile函数:// 功能:创建一个新文件/目录或打开一个已存在的文件/目录。// 原型:NTSTATUS ZwCreateFile(// _Out_ HANDLE FileHandle,// _In_ ACCESS_MASK DesiredAccess,// _In_ POBJECT_ATTRIBUTES ObjectAttributes,// _Out_ PIO_STAT
2021-10-12 21:20:46
320
原创 Windows进程遍历
// 进程遍历:获取计算机系统上运行的所有进程的信息,包括用户进程和系统进程。// 进程遍历的方式有很多:// 1.通过进程快照。// 2.使用ZwQuerySystemInformation函数。// 3.使用EnumProcess函数。// 4.通过PowerShell获取。// 5.通过WMI方式获取。// CreateToolhelp32Snapshot函数:// 功能:获取进程信息为指定的进程、进程使用的堆、模块、线程,为其建立一个快照。// 原型
2021-10-12 08:33:07
865
原创 截图代码-窗口截图
bool Tool::capturePicture(QString strWndName, QString strFilepath){ HWND hwnd = ::FindWindowW(NULL, strWndName.toStdWString().c_str()); if (NULL == hwnd ) return false; HDC hdcWindow; HDC hdcMemDC = NULL; HBITMAP hbmScreen = N
2021-10-11 10:53:29
1303
1
原创 WinInet库之Http通信
// 超文本传输协议(HyperText Transfer Protocol)是互联网上应用最广泛的协议,主要是用于网页的浏览。// HTTP采用了请求-应答模式,也就是俗称的客户端/服务器模型,简称C/S模型。// 其中,客户端向服务器发送一个请求,请求一般包括请求行、请求头和请求体三个部分。// 在请求头中包含请求头中包含请求方法、URL、协议版本以及请求修饰符,客户消息和内容的类似于MIME的消息结构。// 服务器以一个状态作为响应,响应的内容包括消息协议的版本,成功或者错误编码加上包含服务器
2021-10-10 11:40:43
553
原创 WinInet库之FTP通信
// 文件传输协议(File Transfer Protocol,简称FTP)用在互联网上文件的双向传输,是主用于文件的上传和下载处理的协议。// 上传是指将文件从本地计算机中复制到远程主机上。下载是指将远程主机上的文件复制到本地计算机上。// FTP是专门为文件传输而生的,传输效率高,稳定性好。公司内部通常会有多个FTP服务器,用于共享公司内部的资料。// 在Windows上,微软提供了WinInet(即Windows Internet)库用于方便网络程序的开发。WinInet支持FTP、HTTP
2021-10-09 23:48:52
624
原创 Crypto++密码库之AES对称加密
Crypto++密码库是开源项目,可以去Github上下载,使用VS2010+进行编译,生成cryptlib.lib库文件,可用在项目中,进行加解密操作。// 对称加密是指加密和解密使用相同的秘钥,比较出名的算法有AES对称加密算法。// AES对称加密就是对16字节(128位)数据进行加密的过程,也就是把这128位数据通过一系列的变化编程另外一个128位数据。// 由于加密的数据的长度是不确定的,不一定是128的整数倍,所以,在处理加密的过程中,要增加补位代码。// 加密步骤:// 1.声明
2021-10-07 17:18:58
1189
原创 设计模式之迭代器模式
迭代器模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。迭代器模式是一种对象行为型模式。行为型模式指的是多个类/对象之间通过协作关系完成某项功能,分为类行为型模式(继承方式实现)和对象行为型模式(组合方式实现)。迭代器模式的优点:访问一个聚合对象的内容而无需暴露它的内部表示。遍历任务交由迭代器完成,这简化了聚合类。它支持以不同方式遍历一个聚合,甚至可以自定义迭代器的子类以支持新的遍历。增加新的聚合类和迭代器类都很方便,无须修改原有代码。封装性良好,为遍历不
2021-09-17 17:58:15
89
原创 设计模式之状态模式
在软件开发过程中,应用程序中的部分对象可能会根据不同的情况作出不同的行为,我们把这种对象称为有状态的对象,而把影响对象行为的一个或多个动态变化的属性称为状态。状态模式:对有状态的对象,把复杂的"判断逻辑"(通常使用switch…case结构)提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。状态模式属于一种对象行为型模式。主要优点:结构清晰,状态模式将与特定状态相关的行为局部化到一个状态中,并且将不同状态的行为分割开来,满足SIP(单一职责原则)。将状态转换显示化,减少对象间
2021-09-16 23:23:58
100
原创 设计模式之观察者模式
观察者模式在实际应用中用到的比较多,比如QT中信号-槽机制,MVC模式中的模型-视图,这些都是基于观察者模式。定义:指多个对象之间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要优点:降低了目标与观察者之间的耦合关系,两者之间是抽象耦合关系。符合依赖倒置原则。目标与观察者之间建立了一套触发机制。UML图如下:示例代码:// 抽象目标abstract class Subject { protected List<Observe
2021-09-16 17:55:12
58
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅