ytn2001 发表于 2023-11-12 19:56:58

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]
查看完整版本: Windows驱动开发:内核特征码搜索函数封装