摘要:inline int hex_to_str(const unsigned char *hex, int hexlen, char *str, int &strlen){ int outhexlen = hexlen * 2 + 1; if (strlen < outhexlen) { return -1; } strlen = outhexlen; for (int i = 0; i < hexlen; ++i) { _snprintf(str + 2*i, 3, "%02X", (unsigned char)hex[i]); } return strl
阅读全文
摘要:shellcode就是汇编的opcode,一般以子函数形式出现:取得shellcode的方便方式是:1.写一个函数如:void __stdcall code(LONG &a, LONG &b, DWORD &c, LONG &d, DWORD &e)取得它的汇编码:如: push ebp mov ebp,esp sub esp,14h push ebx push esi push edi mov dword ptr [ebp-4],0FFFFFFFFh mov dword ptr [ebp-0...
阅读全文
摘要:上层应用程序和底层驱动程序通信时,应用程序会发出I/O请求,操作系统将I/0请求转化为相应的IRP,不同类型的IRP根据类型传递给不同的派遣函数IRP有两个基本属性,一个是MagorFunction,一个是MinorFunction,分别记录IRP的主类型和子类型,操作系统根据MajorFunction将IRP派遣到不同的派遣函数中,在派遣函数中还可以判断这个IRP属性哪个MinorFunction一般来说,NT式驱动和WDM驱动都是在DriverEntry中注册派遣函数的,在驱动对象中,有个函数指针数组MajorFunction,每个元素记录了一个函数地址,通过设置这个数组,可以把IRP类型
阅读全文
摘要:在ring0 !address不能提供详细的信息了可以尝试用下!vad!vad扩展显示一个或多个虚拟地址详细的虚拟地址描述符(virtual address descriptor (VAD))。语法!vadVAD-Root[Flags]参数VAD-Root 指定要显示的VAD树的根的16进制地址。 Flags 指定显示的格式。可能的值如下:0 显示基于VAD-Root的整个VAD树。(这是默认情况。) 1 仅显示由VAD-Root指定的VAD。这种显示会包含更详细的分析。 使用!process命令可以找到任何进程的VAD的根地址kd> !vad 821b3260 VAD level ..
阅读全文
摘要:6.1.2 ANSI_STRING字符串和UNICOCE_STRING用KdPrint表示分别%Z和%wZ表示如:extern "C" NTSTATUS DriverEntry ( IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath ) { NTSTATUS status; KdPrint(("Enter DriverEntryp RegistryPath:%wZ\n",pRegistryPath) );要注意的是%wZ,w必须是小写,如果是%WZ,是不会打印的.6.1.3字
阅读全文
摘要:5.1.2直接看PAGE_SIZE的大小就可以知道当前分页的大小//// Define the page size//#define PAGE_SIZE 0x20005.1.4驱动程序的不同函数运行在不同的进程中,DriverEntry和AddDevice函数是运行在系统进程中的(system)3: kd> !process sysmtemPROCESS 8a52a830 SessionId: none Cid: 0004 Peb: 00000000 ParentCid: 0000 DirBase: 0aac0020 ObjectTable: e1003e00 Handl...
阅读全文