用NtQuerySystemInformation函数暴力枚举驱动

资源介绍:

易代码出于本人之手,另附VB代码注释,VB代码非原创,2年前从看雪某个角落瞄出来翻译的[因为我个人非常喜欢把各种语言互相转换- -],一直把这个功能集成在自己的私人模块里,今天拿出来与大家分享.

因为原代码申请内存释放内存用了自己写的内存控制函数[这个暂且不发了,sorry],我已经换为易语言自己的申请内存[注意,我没有释放],释放内存这些请自行解决,否则查询易论坛,一抓一大把.否则将导致内存大量浪费- -这个你懂的.不过不是经常调用也无所谓,

资源作者:

lms520

资源界面:

.版本 2 .支持库 spec .程序集 窗口程序集1 .子程序 驱动操作_暴力枚举驱动, 整数型, , 暴力枚举驱动,成功返回驱动数量,失败返回0 .参数 驱动文件名, 内核驱动成员, 数组 .局部变量 Ret, 整数型 .局部变量 Buffer, 整数型 .局部变量 ModulesInfo, lms520_MODULES .局部变量 i, 整数型 .局部变量 驱动服务名称, 文本型, , "0" .局部变量 X, 整数型 .局部变量 位置A, 整数型 .局部变量 判断函数, 整数型 .局部变量 装载类型, 内核驱动成员 ' '''''''''定义数据类型SYSTEM_MODULE_INFORMATION' ''''''''' ' Option Explicit ' Private Type SYSTEM_MODULE_INFORMATION ' dwReserved(1) As Long ' dwBase As Long ' dwSize As Long ' dwFlags As Long ' Index As Integer ' Unknown As Integer ' LoadCount As Integer ' ModuleNameOffset As Integer ' ImageName As String * 256 ' End Type ' '''''''''定义数据类型MODULES' ''''''''' ' Private Type MODULES ' dwNumberOfModules As Long ' ModuleInformation As SYSTEM_MODULE_INFORMATION ' End Type ' '''''''''定义API函数''''''''''''''''''' ' Private Declare Function NtQuerySystemInformation Lib "NTDLL.DLL" ( _ ' ByVal SystemInformationClass As Long, _ ' ByVal pSystemInformation As Long, _ ' ByVal SystemInformationLength As Long, _ ' ByRef ReturnLength As Long) As Long ' Private Declare Function VirtualAlloc Lib "kernel32.dll" ( _ ' ByVal Address As Long, _ ' ByVal dwSize As Long, _ ' ByVal AllocationType As Long, _ ' ByVal Protect As Long) As Long ' Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _ ' ByVal pDst As Long, _ ' ByVal pSrc As Long, _ ' ByVal ByteLen As Long) ' '''''''''定义常量''''''''''''''''''' ' Private Const SystemModuleInformation = 11 ' Private Const PAGE_READWRITE = &H4 ' Private Const MEM_RELEASE = &H8000 ' Private Const MEM_COMMIT = &H1000 清除数组 (驱动服务名称) ' Private Sub cmdEnum_Click() ' Dim Ret As Long ' Dim Buffer As Long ' Dim ModulesInfo As MODULES ' Dim i As Long ' NtQuerySystemInformation SystemModuleInformation, 0, 0, Ret meiju_NtQuerySystemInformation (#SystemModuleInformation, 0, 0, Ret) ' Buffer = VirtualAlloc(0, Ret * 2, MEM_COMMIT, PAGE_READWRITE) Buffer = 申请内存 (Ret × 2, 真) ' Buffer = meiju_VirtualAlloc (0, Ret × 2, #MEM_COMMIT, #PAGE_READWRITE) 调试输出 (Buffer) ' NtQuerySystemInformation SystemModuleInformation, Buffer, Ret * 2, Ret meiju_NtQuerySystemInformation (#SystemModuleInformation, Buffer, Ret × 2, Ret) ' CopyMemory ByVal VarPtr(ModulesInfo), ByVal Buffer, LenB(ModulesInfo) meiju_CopyMemory (ModulesInfo, Buffer, meiju_GlobalSize (ModulesInfo)) ' lstModule.Clear '列表框.清空() ' lstModule.AddItem "Total: " & ModulesInfo.dwNumberOfModules & " Modules" ' lstModule.AddItem StrConv(ModulesInfo.ModuleInformation.ImageName, vbUnicode) ' 输出调试文本 (“Total: ” + 到文本 (ModulesInfo.dwNumberOfModules) + “ Modules”) ' 输出调试文本 (到文本 (ModulesInfo.ModuleInformation.ImageName)) 加入成员 (驱动服务名称, 到文本 (ModulesInfo.ModuleInformation.ImageName)) ' i = ModulesInfo.dwNumberOfModules i = ModulesInfo.dwNumberOfModules 判断函数 = i .判断循环首 (i > 1) i = i - 1 Buffer = Buffer + 71 × 4 ' While (i > 1) ' i = i - 1 ' Buffer = Buffer + 71 * 4 meiju_CopyMemory (ModulesInfo, Buffer, meiju_GlobalSize (ModulesInfo)) ' CopyMemory ByVal VarPtr(ModulesInfo), ByVal Buffer, LenB(ModulesInfo) ' 输出调试文本 (到文本 (ModulesInfo.ModuleInformation.ImageName)) 加入成员 (驱动服务名称, 到文本 (ModulesInfo.ModuleInformation.ImageName)) ' lstModule.AddItem StrConv(ModulesInfo.ModuleInformation.ImageName, vbUnicode) ' Wend .判断循环尾 () .计次循环首 (取数组成员数 (驱动服务名称), X) 位置A = 倒找文本 (驱动服务名称 [X], “\”, , 假) 装载类型.驱动文件名 = 取文本右边 (驱动服务名称 [X], 取文本长度 (驱动服务名称 [X]) - 位置A) 装载类型.驱动全路径名 = 驱动服务名称 [X] 加入成员 (驱动文件名, 装载类型) .计次循环尾 () .如果 (判断函数 > 1) 返回 (取数组成员数 (驱动服务名称)) .否则 返回 (0) .如果结束 ' 本源码来自三叶资源网(www.sanye.cx) .子程序 _按钮1_被单击 .局部变量 局_驱动数据, 内核驱动成员, , "0" .局部变量 循环, 整数型 编辑框1.内容 = “” 驱动操作_暴力枚举驱动 (局_驱动数据) .计次循环首 (取数组成员数 (局_驱动数据), 循环) 编辑框1.加入文本 (“驱动文件名:” + 局_驱动数据 [循环].驱动文件名 + #换行符 + “驱动全路径名:” + 局_驱动数据 [循环].驱动全路径名 + #换行符) .计次循环尾 () ' 本源码来自三叶资源网(www.sanye.cx)

资源下载:

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

用NtQuerySystemInformation函数暴力枚举驱动》有0个想法

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注