experiment : use Aux Library on R0
来源:互联网 发布:ubuntu torch7 安装 编辑:程序博客网 时间:2024/06/05 00:13
Aux Libray
Aux Libray 是MS提供的内核库, 可以用来查询模块信息, 比如内核模块基址和模块Size.
wdk7600 自带 aux Library, 也可以从MS站点下载.
可以完成和未文档化API ZwQuerySystemInformation 相同的功能.
因为是文档化的API接口, 所以比 ZwQuerySystemInformation 靠谱.
编程环境
win7X64Sp1 + wdk7600 + vs2010
试验环境
vmware9 + winxpSp3
工程下载
srcUseAuxGetKernelModuleInfo.rar
试验截图
R0中的代码片段 - 使用aux库取内核模块信息
NTSTATUSGetKernelModuleInfo( PROCESS_COMMUNICATION_DATA * pCommData);
NTSTATUS GetKernelModuleInfo(PROCESS_COMMUNICATION_DATA * pCommData){ NTSTATUS status = STATUS_SUCCESS; DWORD dwIndex = 0; DWORD dwServiceCntMax = 0; /// KMI means KenelModuleInfo PKERNEL_MODULE_INFO pCommDataKMI = NULL; UCHAR * pMoudleInfo = NULL; AUX_MODULE_EXTENDED_INFO * pAuxModuleExInfo = NULL; DWORD dwLenMoudleInfo = 0; DWORD dwMoudleCnt = 0; size_t nSize = 0; UNICODE_STRING strPathNameW; ANSI_STRING strPathNameA; __try { /// 初始化数据 strPathNameW.MaximumLength = 0; strPathNameW.Length = 0; strPathNameW.Buffer = NULL; /// 取内核模块信息 /// 可以考虑放在 DriverEntry 中 status = AuxKlibInitialize(); if (STATUS_SUCCESS != status) __leave; status = AuxKlibQueryModuleInformation( &dwLenMoudleInfo, sizeof(AUX_MODULE_EXTENDED_INFO), NULL); if (STATUS_SUCCESS != status) __leave; dwMoudleCnt = dwLenMoudleInfo / sizeof(AUX_MODULE_EXTENDED_INFO); /// 这里在DeviceIoControl处理例程中, 可以为分页内存 pMoudleInfo = ExAllocatePoolWithTag(PagedPool, dwLenMoudleInfo, 'aux'); status = AuxKlibQueryModuleInformation( &dwLenMoudleInfo, sizeof(AUX_MODULE_EXTENDED_INFO), pMoudleInfo); if (STATUS_SUCCESS != status) __leave; /// 回答R3 /// pMoudleInfo 第一个模块内容是内核ntos* pAuxModuleExInfo = (AUX_MODULE_EXTENDED_INFO *)pMoudleInfo; pCommDataKMI = &(pCommData->CmdDataKernelMoudleInfo); pCommData->sRc = status; pCommData->qa.dwAnswer = pCommData->qa.dwQestion + 1; pCommDataKMI->dwImgBase = (DWORD)pAuxModuleExInfo->BasicInfo.ImageBase; pCommDataKMI->dwImgSize = pAuxModuleExInfo->ImageSize; RtlInitAnsiString(&strPathNameA, pAuxModuleExInfo->FullPathName); RtlAnsiStringToUnicodeString(&strPathNameW, &strPathNameA, TRUE); nSize = sizeof(pCommDataKMI->szModuleName) / sizeof(wchar_t); RtlStringCchCopyW( pCommDataKMI->szModuleName, nSize, strPathNameW.Buffer); } __finally { if (NULL != pMoudleInfo) ExFreePoolWithTag(pMoudleInfo, 'aux'); /// strPathNameW 需要释放 if (NULL != strPathNameW.Buffer) RtlFreeUnicodeString(&strPathNameW); } return status;}
参考资料
* pediy上kssd中有一篇用Aux Libray 查询模块信息的文章
http://www.pediy.com/kssd/pediy10/74504.html
* MSDN 中 Aux Libray help url
http://msdn.microsoft.com/en-us/library/gg547635(v=vs.85).aspx
- experiment : use Aux Library on R0
- experiment : C mix ASM on x64 r0
- r0 experiment : MDL safe copy
- experiment : use python Script file on IDA6.1
- note: KillProcess On R0
- experiment : thread on drv
- experiment : hook on idapython
- MY experiment on MIS
- experiment : how to use CONTAINING_RECORD
- Boost c++ library experiment summary
- note : IRP hook on R0
- experiment : 字符串分解 on drv
- experiment : use class member function pointer
- experiment: parse crash info on vs2008
- experiment: view ssdt's api on windbg
- experiment : add struct define on IDA6.1
- experiment : judge IRP_MJ_CREATE CreateDisposition on minifilter
- experiment : C mix MASM on x86 r3
- PopWindow在Android 2.3.3 或以下的系统的一个bug 及其解决办法
- suse操作系统对应的内核版本列表
- 理解多线程设计模式
- STDIN_FILENO与stdin 的区别
- 选择排序
- experiment : use Aux Library on R0
- MFC消息顺序
- HTML5 缓存: cache manifest
- hadoop 中hdfs启动出错
- IADORecordBinding
- 超出屏幕的图片随意挪动哦
- 多年上网觅疏7地后一野团圆(图)
- 解线性同余方程 中国剩余定理 和 非互质的中国剩余定理
- JAVA 十六进制与字符串的转换