У меня есть очень простой сканер сигнатур (шаблонов), который ищет сигнатуру в диапазоне памяти.
Аргументы функции в значительной степени говорят сами за себя.
Функция предназначена для go в модуль, который будет загружен в процесс и ищет сигнатуры изнутри.
Как всегда - иногда не всегда , функция cra sh всего процесса.
Я перебирал это снова и снова и не мог найти проблему.
Процесс, который вызвал проблему, сильно упакован и получил много анти-отладочных трюков, так что это кошмар для отладки.
Может, мне не хватает чего-то простого
__int64 FindPattern(__int64 range_start, __int64 range_end, const char* pattern)
{
const char* pat = pattern;
__int64 firstMatch = NULL;
__int64 pCur = range_start;
__int64 region_end;
MEMORY_BASIC_INFORMATION mbi{};
while (sizeof(mbi) == VirtualQuery((LPCVOID)pCur, &mbi, sizeof(mbi))) {
if (pCur >= range_end - strlen(pattern))
break;
if (!(mbi.Protect & (PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE))) {
pCur += mbi.RegionSize;
continue;
}
else
region_end = pCur + mbi.RegionSize;
while (pCur < region_end)
{
if (!*pat)
return firstMatch;
if (*(PBYTE)pat == '\?' || *(BYTE*)pCur == getByte(pat)) {
if (!firstMatch)
firstMatch = pCur;
if (!pat[1] || !pat[2])
return firstMatch;
if (*(PWORD)pat == '\?\?' || *(PBYTE)pat != '\?')
pat += 3;
else
pat += 2;
}
else {
if (firstMatch)
pCur = firstMatch;
pat = pattern;
firstMatch = 0;
}
pCur++;
}
}
return NULL;
}
Спасибо!