Windows驱动开发:内核特征码搜索函数封装
本章内容中将重点分析,并实现一个通用特征定位函数。如下是一段特征码搜索片段,可以看到其实仅仅只是将上章中的搜索方式变成了一个SearchSpecialCode函数,如下函数,用户传入一个扫描起始地址以及搜索特征码的字节数组,即可完成搜索工作,具体的参数定义如下。
pSearchBeginAddr 扫描的内存(内核)起始地址
ulSearchLength 需要扫描的长度
pSpecialCode 扫描特征码,传入一个UCHAR类型的字节数组
ulSpecialCodeLength 特征码长度,传入字节数组长度
// By: LyShark
PVOID SearchSpecialCode(PVOID pSearchBeginAddr, ULONG ulSearchLength, PUCHAR pSpecialCode, ULONG ulSpecialCodeLength)
{
PVOID pDestAddr = NULL;
PUCHAR pBeginAddr = (PUCHAR)pSearchBeginAddr;
PUCHAR pEndAddr = pBeginAddr + ulSearchLength;
PUCHAR i = NULL;
ULONG j = 0;
for (i = pBeginAddr; i <= pEndAddr; i++)
{
// 遍历特征码
for (j = 0; j < ulSpecialCodeLength; j++)
{
// 判断地址是否有效
if (FALSE == MmIsAddressValid((PVOID)(i + j)))
{
break;
}
// 匹配特征码
if (*(PUCHAR)(i + j) != pSpecialCode)
{
break;
}
}
// 匹配成功
if (j >= ulSpecialCodeLength)
{
pDestAddr = (PVOID)i;
break;
}
}
return pDestAddr;
}
**** Hidden Message *****
页:
[1]