DLL命令代碼
.版本 2.DLL命令 NtQuerySystemInformation, 整數型, "NTDLL.DLL", "NtQuerySystemInformation" .參數 SystemInformationClass, 整數型 .參數 pSystemInformation, 整數型 .參數 SystemInformationLength, 整數型 .參數 ReturnLength, 整數型, 傳址.DLL命令 CopyMemory, , "kernel32", "RtlMoveMemory" .參數 pDst, MODULES, 傳址 .參數 pSrc, 整數型 .參數 ByteLen, 整數型.DLL命令 GlobalSize, 整數型, "kernel32", "GlobalSize", , 返回全局內存塊大小 .參數 hMem, MODULES
自定義數據類型表
.版本 2.數據類型 內核驅動成員 .成員 驅動文件名, 文本型.數據類型 MODULES .成員 dwNumberOfModules, 整數型 .成員 ModuleInformation, INFORMATION.數據類型 INFORMATION .成員 dwReserved, 整數型, , "2" .成員 dwBase, 整數型 .成員 dwSize, 整數型 .成員 dwFlags, 整數型 .成員 Index, 短整數型 .成員 Unknown, 短整數型 .成員 LoadCount, 短整數型 .成員 ModuleNameOffset, 短整數型 .成員 ImageName, 字節型, , "256"
判斷驅動是否存在的代碼
.版本 2.支持庫 spec.程序集 窗口程序集1.子程序 _判斷按鈕_被單擊.判斷開始 (驅動是否存在 (“PCHunter64ao.sys”) = 真 或 驅動是否存在 (“PCHunter32ao.sys”) = 真) 信息框 (“存在”, 64, , ).默認 信息框 (“不存在”, 16, , ).判斷結束.子程序 驅動是否存在, 邏輯型, 公開, 取系統已加載的驅動,成功取到返回真,失敗返回假.參數 驅動名, 文本型.局部變量 驅動成員, 內核驅動成員, , "0".局部變量 循環計次, 整數型枚舉系統驅動 (驅動成員).計次循環首 (取數組成員數 (驅動成員), 循環計次) .如果真 (驅動成員 [循環計次].驅動文件名 = 驅動名) 返回 (真) 跳出循環 () .如果真結束.計次循環尾 ()返回 (假).子程序 枚舉系統驅動, 整數型, , 枚舉驅動,成功返回驅動數量,失敗返回0.參數 驅動文件名, 內核驅動成員, 數組.局部變量 Ret, 整數型.局部變量 ModulesInfo, MODULES.局部變量 i, 整數型.局部變量 x, 整數型.局部變量 驅動名稱, 文本型, , "0".局部變量 位置, 整數型.局部變量 判斷函數, 整數型.局部變量 裝載類型, 內核驅動成員.局部變量 內存申請, 整數型清除數組 (驅動名稱)NtQuerySystemInformation (11, 0, 0, Ret)內存申請 = 申請內存 (Ret × 2, 真)NtQuerySystemInformation (11, 內存申請, Ret × 2, Ret)CopyMemory (ModulesInfo, 內存申請, GlobalSize (ModulesInfo))加入成員 (驅動名稱, 到文本 (ModulesInfo.ModuleInformation.ImageName))i = ModulesInfo.dwNumberOfModules判斷函數 = i.判斷循環首 (i > 1) i = i - 1 內存申請 = 內存申請 + 71 × 4 CopyMemory (ModulesInfo, 內存申請, GlobalSize (ModulesInfo)) 加入成員 (驅動名稱, 到文本 (ModulesInfo.ModuleInformation.ImageName)).判斷循環尾 ().計次循環首 (取數組成員數 (驅動名稱), x) 位置 = 倒找文本 (驅動名稱 [x], “/”, , 假) 裝載類型.驅動文件名 = 取文本右邊 (驅動名稱 [x], 取文本長度 (驅動名稱 [x]) - 位置) 加入成員 (驅動文件名, 裝載類型).計次循環尾 ().如果 (判斷函數 > 1) 返回 (取數組成員數 (驅動名稱)).否則 返回 (0).如果結束釋放內存 (內存申請)
運行結果:
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。
新聞熱點
疑難解答