当前位置: 首页 > news >正文

南昌市,做网站的公司河北三河建设厅网站

南昌市,做网站的公司,河北三河建设厅网站,开源站群cms,做网站最便宜多少钱模块是程序加载时被动态装载的#xff0c;模块在装载后其存在于内存中同样存在一个内存基址#xff0c;当我们需要操作这个模块时#xff0c;通常第一步就是要得到该模块的内存基址#xff0c;模块分为用户模块和内核模块#xff0c;这里的用户模块指的是应用层进程运行后…模块是程序加载时被动态装载的模块在装载后其存在于内存中同样存在一个内存基址当我们需要操作这个模块时通常第一步就是要得到该模块的内存基址模块分为用户模块和内核模块这里的用户模块指的是应用层进程运行后加载的模块内核模块指的是内核中特定模块地址本篇文章将实现一个获取驱动ntoskrnl.exe的基地址以及长度此功能是驱动开发中尤其是安全软件开发中必不可少的一个功能。 关于该程序的解释官方的解析是这样的ntoskrnl.exe是Windows操作系统的一个重要内核程序里面存储了大量的二进制内核代码用于调度系统时使用也是操作系统启动后第一个被加载的程序通常该进程在任务管理器中显示为System。 使用ARK工具也可看出其代表的是第一个驱动模块。 那么如何使用代码得到如上图中所展示的基地址以及大小呢实现此功能我们需要调用ZwQuerySystemInformation这个API函数这与上一篇文章《判断自身是否加载成功》所使用的NtQuerySystemInformation只是开头部分不同但其本质上是不同的如下是一些参考资料 从内核模式调用Nt和Zw系列API其最终都会连接到nooskrnl.lib导出库: Nt系列API将直接调用对应的函数代码而Zw系列API则通过调用KiSystemService最终跳转到对应的函数代码。重要的是两种不同的调用对内核中previous mode的改变如果是从用户模式调用Native API则previous mode是用户态如果从内核模式调用Native API则previous mode是内核态。如果previous为用户态时Native API将对传递的参数进行严格的检查而为内核态时则不会检查。 调用Nt API时不会改变previous mode的状态调用Zw API时会将previous mode改为内核态因此在进行Kernel Mode Driver开发时可以使用Zw系列API可以避免额外的参数列表检查提高效率。Zw*会设置KernelMode已避免检查Nt*不会自动设置如果是KernelMode当然没问题如果就UserMode就挂了。 回到代码上来下方代码就是获取ntoskrnl.exe基地址以及长度的具体实现核心代码就是调用ZwQuerySystemInformation得到SystemModuleInformation里面的对比部分是在比较当前获取的地址是否超出了ntoskrnl的最大和最小范围。 #include ntifs.hstatic PVOID g_KernelBase 0; static ULONG g_KernelSize 0;#pragma pack(4) typedef struct _PEB32 {UCHAR InheritedAddressSpace;UCHAR ReadImageFileExecOptions;UCHAR BeingDebugged;UCHAR BitField;ULONG Mutant;ULONG ImageBaseAddress;ULONG Ldr;ULONG ProcessParameters;ULONG SubSystemData;ULONG ProcessHeap;ULONG FastPebLock;ULONG AtlThunkSListPtr;ULONG IFEOKey;ULONG CrossProcessFlags;ULONG UserSharedInfoPtr;ULONG SystemReserved;ULONG AtlThunkSListPtr32;ULONG ApiSetMap; } PEB32, *PPEB32;typedef struct _PEB_LDR_DATA32 {ULONG Length;UCHAR Initialized;ULONG SsHandle;LIST_ENTRY32 InLoadOrderModuleList;LIST_ENTRY32 InMemoryOrderModuleList;LIST_ENTRY32 InInitializationOrderModuleList; } PEB_LDR_DATA32, *PPEB_LDR_DATA32;typedef struct _LDR_DATA_TABLE_ENTRY32 {LIST_ENTRY32 InLoadOrderLinks;LIST_ENTRY32 InMemoryOrderLinks;LIST_ENTRY32 InInitializationOrderLinks;ULONG DllBase;ULONG EntryPoint;ULONG SizeOfImage;UNICODE_STRING32 FullDllName;UNICODE_STRING32 BaseDllName;ULONG Flags;USHORT LoadCount;USHORT TlsIndex;LIST_ENTRY32 HashLinks;ULONG TimeDateStamp; } LDR_DATA_TABLE_ENTRY32, *PLDR_DATA_TABLE_ENTRY32; #pragma pack()typedef struct _RTL_PROCESS_MODULE_INFORMATION {HANDLE Section;PVOID MappedBase;PVOID ImageBase;ULONG ImageSize;ULONG Flags;USHORT LoadOrderIndex;USHORT InitOrderIndex;USHORT LoadCount;USHORT OffsetToFileName;UCHAR FullPathName[256]; } RTL_PROCESS_MODULE_INFORMATION, *PRTL_PROCESS_MODULE_INFORMATION;typedef struct _RTL_PROCESS_MODULES {ULONG NumberOfModules;RTL_PROCESS_MODULE_INFORMATION Modules[1]; } RTL_PROCESS_MODULES, *PRTL_PROCESS_MODULES;typedef enum _SYSTEM_INFORMATION_CLASS {SystemModuleInformation 0xb, } SYSTEM_INFORMATION_CLASS;// 取出KernelBase基地址 // By: lyshark PVOID UtilKernelBase(OUT PULONG pSize) {NTSTATUS status STATUS_SUCCESS;ULONG bytes 0;PRTL_PROCESS_MODULES pMods 0;PVOID checkPtr 0;UNICODE_STRING routineName;if (g_KernelBase ! 0){if (pSize)*pSize g_KernelSize;return g_KernelBase;}RtlInitUnicodeString(routineName, LNtOpenFile);checkPtr MmGetSystemRoutineAddress(routineName);if (checkPtr 0)return 0;__try{status ZwQuerySystemInformation(SystemModuleInformation, 0, bytes, bytes);if (bytes 0){DbgPrint(Invalid SystemModuleInformation size\n);return 0;}pMods (PRTL_PROCESS_MODULES)ExAllocatePoolWithTag(NonPagedPoolNx, bytes, lyshark);RtlZeroMemory(pMods, bytes);status ZwQuerySystemInformation(SystemModuleInformation, pMods, bytes, bytes);if (NT_SUCCESS(status)){PRTL_PROCESS_MODULE_INFORMATION pMod pMods-Modules;for (ULONG i 0; i pMods-NumberOfModules; i){if (checkPtr pMod[i].ImageBase checkPtr (PVOID)((PUCHAR)pMod[i].ImageBase pMod[i].ImageSize)){g_KernelBase pMod[i].ImageBase;g_KernelSize pMod[i].ImageSize;if (pSize)*pSize g_KernelSize;break;}}}}__except (EXCEPTION_EXECUTE_HANDLER){return 0;}if (pMods)ExFreePoolWithTag(pMods, lyshark);return g_KernelBase; }VOID UnDriver(PDRIVER_OBJECT driver) {DbgPrint((Uninstall Driver Is OK \n)); }NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) {DbgPrint((hello lyshark \n));PULONG ulong 0;UtilKernelBase(ulong);DbgPrint(ntoskrnl.exe 模块基址: 0x%p \n, g_KernelBase);DbgPrint(模块大小: 0x%p \n, g_KernelSize);Driver-DriverUnload UnDriver;return STATUS_SUCCESS; }我们编译并运行上方代码效果如下
http://wiki.neutronadmin.com/news/162008/

相关文章:

  • 来个网站吧好人一生平安2022网站跟系统的区别是
  • wordpress搭建外贸网站网页制作动画怎么做
  • jsp做门户网站网站建设 会议主持稿
  • 微网站 网页早晨设计 做网站设计吗
  • 网站模板预览长沙做手机网站
  • 网站百度排名丽水房产网站建设
  • 网页制作与网站建设从入门到精通 下载wordpress好看的背景图片
  • 怎么做彩票平台网站做电影网站的服务器
  • 企业黄页平台西安百度seo排名软件
  • 网站关键词排名手机优化软件中小企业公司
  • 唐山网站怎么做seo新像素ui设计官网
  • 浙江华企网站做的咋样企业注册号怎么查询
  • 迅速上排名网站优化专门做岛屿的网站
  • 新开传奇网站发布站建设网站五个步骤
  • 做网站 转行网站seo外包技术资源
  • 网站建设名词做外贸网站服务
  • 深圳市建设科技促进中心网站装修设计网站排行
  • 有哪些做数据分析的网站怎么自己做一个网址
  • 杭州网站建设费用价格为什么网站开发成本高
  • 网站静态和动态wordpress 添加gif
  • 郑州市做网站湖南seo网站多少钱
  • 做网站需要学多久天津网站优
  • 网站制作公司哪家价钱合理html5手机app网站模板
  • 多语言网站(如何实现网站的多语言版本 )win7系统优化工具
  • 肥西县市建设局网站学校网站建设总结报告
  • 广州 深圳 外贸网站建设最好用的素材网站
  • 关注公众号领红包上海seo优化培训机构
  • 企业网站优化要多少钱茶叶网站建设
  • 电子商务网站建设与全程实例周口网站建设
  • 义乌外贸网站建设来啦网页升级访问中自动跳转中