
驱动篇
驱动学习
txPNDGMCSY
偶尔还是会想起你夏天的笑容
展开
-
应用层InLine HOOK
exe程序在xp下运行需要设置的地方// ConsoleApplication6.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Windows.h>typedef int(__stdcall *MessageBox_type)(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);MessageBox_type old_MessageBoxA; //定原创 2021-02-28 21:02:28 · 120 阅读 · 0 评论 -
IAT HOOK编程
// ConsoleApplication4.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <Windows.h>VOID __stdcall mySleep(DWORD m); //要跳转到HOOK函数PVOID EnumAPI(); //枚举IAT表中的API函数int _tmain(int argc, _TCHAR* argv[]){ EnumAPI(); Sleep(111); system("pause原创 2021-02-28 17:23:26 · 203 阅读 · 0 评论 -
驱动程序文件操作
驱动程序文件操作测试.cpp#ifdef _cplusplus{#endifextern "C"#include <ntddk.h>#include<wdm.h>#include "驱动程序文件操作测试.h"#ifdef _cplusplus}#endif// 创建文件函数 1.文件路径字符串NTSTATUS createFile(const PCWSTR fileName){ HANDLE hFile = { NULL }; // 定义一个句柄原创 2021-02-28 15:56:51 · 298 阅读 · 0 评论 -
读取SSDT原函数地址,读取SSDT当前函数地址,检查是否被HOOK
读取SSDT原函数地址#ifdef _cplusplus{#endifextern "C"#include <ntddk.h>#ifdef _cplusplus}#endifnamespace Name2{ typedef struct _ServiceDescriptorTable { PVOID ServiceTableBase; //System Service Dispatch Table 的基地址 PVOID ServiceCounterTable;/原创 2021-02-27 16:23:18 · 259 阅读 · 0 评论 -
驱动过游戏保护基础知识点
A、引用KeServiceDescriptorTable表 B、通过ServiceTableBase+偏移读出当前函数地址 C、用windbg测试读取的值系统服务描述符表 在ntoskrnl.exe导出KeServiceDescriptorTable 这个表typedef struct _ServiceDescriptorTable { PVOID ServiceTableBase; //System Service Dispatch Table 的基地址原创 2021-02-27 16:20:35 · 1977 阅读 · 1 评论 -
驱动下的异常处理
#include <ntddk.h>void assert_test(){ int* p = NULL; ASSERT(p != NULL); //判断条件为假抛出断言,也可以手动强制抛出断言ASSERT(FALSE) return;}void erroe_test(){ int *p = NULL; //空指针只能读不能写 int i = 100; __try { //这里如果出错 发出异常 *p = 1; } __except (1) {原创 2021-02-27 13:59:47 · 270 阅读 · 0 评论 -
驱动中使用链表sys
#include <ntddk.h>//给节点定义一个结构类型,这里定义为结构体类型typedef struct _strNode{ LIST_ENTRY Entry; //Windows自己提供的 LIST_ENTRY结构双向循环链表 int x; //调用LIST_ENTRY 结构时,一定要把它写在第一位,数据域写在它的下面,不然会导致蓝屏!! int y;}Node, *pNode;//建立链表pNode SetNode(void){原创 2021-02-27 11:14:08 · 144 阅读 · 0 评论 -
认识链表结构exe
A、链表结构B、链表的初始化C、在链表中插入数据(结点)D、链表的遍历链表:链表有单向链表,也有双向链表,有循环的(环形),在这里我们只讨论 双向循环链表。双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。认识链表结构 typedef struct node{ struct node R; struct node L; i原创 2021-02-27 10:19:35 · 94 阅读 · 0 评论 -
内核操作相关API
1、RtlCopyMemory 、RtlCopyBytes、RtlMoveMemory;2、RtlZeroMemory、RtlFillMemory;3、RtlEqualMemory;4、ExAllocatePool、ExFreePool;5、New(重载)、Delete操作符一、内存的复制与移动1、RtlCopyMemory作用:把一个缓冲区的内容复制到另一一个缓冲区。VOID RtlCopyMemory( IN VOID UNALIGNED *Destination, IN原创 2021-02-26 23:47:38 · 912 阅读 · 0 评论 -
驱动中的内存管理
A、 物理内存B、 虚拟内存C、 Ring0地址和Ring3地址D、 驱动程序和进程的关系E、 分页和非分页内存F、 分配内核内存以下概念针对 32位Windows操作系统(32位及以上的CPU)A物理内存:(Physical Memory Address)目前主流的操作系统还是32位的XP,而32位的系统提供的寻址能力是232个字节,用户最多可以使用4GB的真实物理内存。0-0xFFFFFFFF 2G+0.5G+0.1 (2.75-3.25) 2GB虚拟内存:(Virtual Memo原创 2021-02-26 22:42:50 · 725 阅读 · 0 评论 -
NT式驱动的卸载
NT式驱动的卸载A、卸载驱动流程B、内核函数DeleteServiceC、内核函数ControlServiceD、构建UnLoadSys函数E、测试并查看调试信息一、卸载驱动流程1、用OpenSCManager函数打开 服务控制管理器,取得SCM句柄,如果返回NULL,则结束,否则继续2.//hSCM2、用OpenService打开相应的服务,如果返回NULL,则结束,否则继续3.hSerVice3、用ControlService停止驱动服务,如果返回NULL,只有重新启动才能,再动态加载原创 2021-02-26 22:29:50 · 240 阅读 · 0 评论 -
NT式驱动的安装-1
一丶加载内核驱动的常用API介绍.加载内核驱动,使用我们的ring3下的API即可完成.API分别是:OpenSCManager 打开设备(服务)管理器CreateService 创建服务(或者设备,根据参数不同而不同)OpenService 打开设备或者服务.StartService 启动服务,启动设备.ControlService 控制设备或者服务的状态.CloseServiceHandle 关闭服务或者设备的句柄DeleteService原创 2021-02-26 21:30:24 · 486 阅读 · 0 评论