自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zyorz的博客

自娱自乐

  • 博客(21)
  • 收藏
  • 关注

原创 驱动理解备忘录

驱动层次结构NT式以及WDM驱动都可以分层,即设备创建时,先创建底层PDO(物理设备对象,PNP管理器创建),随后创建高层FDO(功能设备对象,IoCreateDevice创建)。垂直遍历设备对象: 底层设备对象寻找上一层设备对象,通过对象结构体内AttachedDevice成员从下往上寻找上一层设备对象。若想从上向下寻找,则需要在自定义设备扩展中保存低一层设备对象。水平遍历设备对象: 同一...

2020-06-01 18:29:49 252

原创 驱动开发笔记

gayhub:https://github.com/JKornev/hidden进程保护进程保护通过ObRegisterCallbacks进程线程对象回调实现。在进程对象Pre回调中获取打开进程句柄的进程ID(PsGetCurrentProcessId())以及被打开的进程ID(PsGetProcessId(OperationInformation->Object)),根据规则决定是否放...

2020-04-25 11:14:56 305

原创 Windows内核函数命名

Ex:管理层Ke:核心层Hal:硬件抽象层Ob:对象管理Mm:内存管理Ps:进程管理Se:安全管理Io:I/O管理Fs:文件系统Cc:文件缓存管理Cm:系统配置管理Pp:即插即用管理Rtl:运行时程序库Ki:中断相关...

2020-03-25 00:03:09 182

转载 关键寄存器备忘录

gs 寄存器fs寄存器在x64下变为gs寄存器R3下gs存放的是TEBR0下存放的是KPCR(记录每个CPU的状态,结构体中存储了GDT,IDT等重要的信息),MSR 寄存器MSR 总体来是为了设置CPU 的工作环境和标示CPU 的工作状态,包括温度控制,性能监控等可以分别通过RDMSR 和WRMSR 两条指令进行读和写的操作,可通过其0xC0000082找到syscall获取SSDT...

2019-11-28 14:19:50 252

原创 API备忘录

R0常用API备忘录字符类型转换Ring3 MultiByteToWideChar() WideCharToMultiByte()Ring0 RtlUnicodeToMultiByteN() RtlMultiByteToUnicodeN()格式化字符串Ring0 //RtlStringCbPrintfW(wstr, 260, L"%hs", pProcName); //R...

2019-11-14 12:28:09 227

原创 R3注入的四种方式

DLL注入1.首先要获取想要注入的进程句柄(OpenProcess) 2.从要注入的进程的地址空间中分配一段内存(VirtualAllocEx) 3.往分配的内存位置写入要注入的DLL名称(WriteProcessMemory) 4.从kernel32.dll中找到LoadLibrary(A或W)函数地址(GetModuleHandle+GetProcAddress) 5.创建远程线程执行加

2017-09-27 19:00:46 2775

原创 MFC界面编写

主要函数MFC建立后默认生成三个类,分别为CxxxApp、CxxxDlg和一个固定名称的类【xxx为项目名称】CxxxApp程序类 InitInstance函数为程序最早执行的入口【用于初始化】 ExitInstance函数为程序退出时执行的方法【用于收尾,使用时需要用类向导自己创建】 CxxxDlg界面类 OnInitDialog函数为对话框最早执行的入口【用于初始化控件】 MFC Ma

2017-07-16 11:25:38 1293

原创 注册表R0监控

函数//注册一个可监控注册表操作的函数CmRegisterCallback(回调函数地址,NULL,&返回的handle);//或CmRegisterCallbackEx,可设置高度NTSTATUS MyRegistryCallback( __in PVOID CallbackContext, __in_opt PVOID Argument1,//标识操作类型 REG_NOTIFY_CLA

2017-05-17 18:52:19 617

原创 Minifilter文件系统过滤框架

原理正常的IRP流程是R3 API调用时,会将请求封装成一个IRP经过IO管理器到达文件系统,然后在发往磁盘存储系统,最后到达硬件。使用MiniFilter后会在IO栈中添加MiniFilter管理器。当IRP到达文件系统之前时,首先会被该管理器拦截。管理器会将IRP封装成CALLBACK_DATA,由管理器中存在的多个minifilter驱动依次处理。这些驱动位置是固定的,位置由altitude属

2017-05-11 19:20:30 1613

原创 NT驱动加载与卸载

流程加载NT驱动可使用LoadDriver,该函数通过服务、注册表等操作加载sys文件注意:使用代码时要修改路径和名称,如果有控制码则需要与NT驱动控制码相同。代码//路径#define DRIVER_NAME "ntmodeldrv"#define DRIVER_PATH ".\\ntmodeldrv.sys"//控制码#define IOCTRL_BASE 0x800#define MY

2017-05-08 20:10:35 648

原创 NT驱动框架及主要函数、宏

主要函数DriverEntry和DriverUnload在单线程环境运行,处于System进程上下文。IRP分发函数DispatchCreate()对应IRP_MJ_CREATE DispatchRead()对应IRP_MJ_READ DispatchWrite()对应IRP_MJ_WRITE DispatchControl()对应IRP_MJ_DEVICE_CONTROLDispatchCl

2017-05-08 20:03:39 1225

原创 Sfilter过滤驱动框架

原理Sfilter是设备栈绑定的形式绑定的,驱动自己生成一个设备(过滤设备对象),调用系统提供的绑定API,绑定到目标设备上。并返回一个在未绑定之前目标设备所在设备栈的最顶层设备。这样发往下层的IRP或者发往上层的数据都会被过滤设备截获。实现绑定API: IoAttachDevice() IoAttachDeviceToDeviceStackSafe(2000 SP4以及XP以上) IoAtt

2017-05-07 01:01:51 1432

转载 IRP HOOK

流程相比较R3 HOOK,R0的HOOK还是比较简单的(毕竟共享一块内存)直接IoGetDeviceObjectPointer根据名称获取驱动对象,然后更改分发函数数组元素即可HOOK指定IRP分发函数实现NTSTATUS InstallTCPDriverHook(){ NTSTATUS ntStatus; UNICODE_STRING deviceTCPUnicode

2017-05-04 20:28:19 778

原创 R3进程DLL注入HOOK

工具DLL中可使用三种HOOK引擎实现HOOK,分别为开源引擎nthookengine、mhook和微软的Detour流程本进程HOOK可直接导入引擎DLL调用API实现注入其他进程HOOK通过编写一个实现了HOOK本进程的DLL然后将其注入到目标进程实现 注入实现:http://blog.csdn.net/zyorz/article/details/71153713引擎APImhook引擎HOO

2017-05-04 19:42:53 1073

转载 R3注入

流程DLL注入: 1.提升注入者权限(AddDebugPrivilege添加一个Debug权限)2.打开被注入的目标进程获取句柄(OpenProcess传入目标进程ID)3.在目标进程中分配内存(VirtualAllocEx传入句柄分配内存)4.将DLL路径写入到目标内存中(WriteProcessMemory传入分配后返回的地址)5.获取kernel32中LoadLibraryA地址,调用Cre

2017-05-03 20:25:44 592

原创 SetWindowsHookEx设置全局钩子

用途该函数可以在R3下钩子,可监控键盘、鼠标、窗口等各种消息。监控到后调用指定的回调函数。函数原型HHOOK WINAPI SetWindowsHookEx(__in int idHook, \\钩子类型__in HOOKPROC lpfn, \\回调函数地址__in HINSTANCE hMod, \\包含函数的实例句柄,GetModuleHandleW(0)即可。__in DWORD d

2017-05-02 19:43:17 3717 1

原创 DLL开发与使用

原理Win32系统内存中只有一份DLL,将其存放于Win32系统的全局堆栈中。当进程调用时,每个进程会收到DLL的一份映像。使用1.存在lib+dll+头文件:当编译器编译DLL文件后会生成3个文件,当全都拥有时可通过包含直接使用其函数#pragma comment(lib,"libname.lib")#include "libname.h"func();/*.lib文件:存放库文件包含被D

2017-05-02 10:56:12 514

转载 获取进程全路径

先获取进程PID,通过PID获取eprocess结构后调用KeStackAttachProcess附加到该结构上,然后调用ZwQueryInformationProcess查询进程ProcessImageFileName结构找到进程全路径。封装函数如下,调用入口为GetProcessFullNameByPidNTSTATUS GetProcessFullNameByPid(HANDLE nPid,

2017-04-19 18:25:57 1709

转载 内核文件路径正则匹配

使用函数FsRtllsNameInExpression即可实现第一个参数为正则式,类型是UnicodeString 第二个参数为字符串 第三个参数表示是否区分大小写,如果为T(不区分,此时正则式必须全大写) 第四个参数传NULL即可。匹配成功返回T?表示0或1个任意字符 *表示0到n个任意字符

2017-04-19 18:11:56 433

转载 盘符设备名互相转换

主要实现函数为ZwOpenSymbolicLinkObject和ZwQuerySymbolicLinkObject。第一个函数用于打开符号链接,第二个函数将设备名保存到缓冲区中。函数入口为QuerySymbolicLink#include <ntddk.h>#include <windef.h>#include <ntstrsafe.h>//输入\\??\\c:-->\\device\\\har

2017-04-19 17:26:56 2874

转载 文件短名转长名

主要实现函数为ZwQueryDirectoryFile,如果要转换一个文件名称为”c:\progam\a~1\b~1\hi~1.txt”的短名,需要先打开”c:\progam”获取其句柄作为函数第一个参数传入,之后将”a~1”作为函数倒数第二个参数传入,从函数第六个参数传入的缓冲区获取长名之后继续获取下一层短名,直至获取完成。通过cmd命令 dir /x 可查询短名封装函数如下,ConverSho

2017-04-19 16:45:12 502

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除