- 注册时间
 - 2021-4-16
 
- 最后登录
 - 2024-8-22
 
- 在线时间
 - 5 小时
 
 
 
 
 
编程入门 
  
	- 龙马币
 - 116 
 
 
 
 
 | 
 
本章内容中将重点分析,并实现一个通用特征定位函数。 
 
如下是一段特征码搜索片段,可以看到其实仅仅只是将上章中的搜索方式变成了一个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[j])
 
 -       {
 
 -         break;
 
 -       }
 
 -     }
 
  
-     // 匹配成功
 
 -     if (j >= ulSpecialCodeLength)
 
 -     {
 
 -       pDestAddr = (PVOID)i;
 
 -       break;
 
 -     }
 
 -   }
 
 -   return pDestAddr;
 
 - }
 
 
  复制代码 
 
 
 |   
 
 
 
 |