- 注册时间
- 2021-4-16
- 最后登录
- 2024-7-10
- 在线时间
- 5 小时
编程入门
- 龙马币
- 93
|
本章内容中将重点分析,并实现一个通用特征定位函数。
如下是一段特征码搜索片段,可以看到其实仅仅只是将上章中的搜索方式变成了一个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;
- }
复制代码
|
|