我想这个用特征搜索函数搜到这个call所在的地址,该怎么用这个函数?已知可以使用下面函数获取PsLookupProcessByProcessId代码所在的地址
//特征码搜索代码
//pSearchBeginAddr 扫描的内存(内核)起始地址
//ulSearchLength 需要扫描的长度
//pSpecialCode 扫描特征码,传入一个UCHAR类型的字节数组
//ulSpecialCodeLength 特征码长度,传入字节数组长度
// By: LyShark.com
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;
}
获取PsLookupProcessByProcessId代码所在的地址
UNICODE_STRING st = { 0 };
RtlInitUnicodeString(&st, L"PsLookupProcessByProcessId");
PVOID PsLookupProcessByProcessIdaddr = MmGetSystemRoutineAddress(&st);