Не, я на гитхабе наткнулся практически случайно:)
Чем меньше маркеров будет, тем лучше. Например в у вас в форке есть кусок:
auto mdl = (LDR_MODULE*)mlink;
do
{
mdl = (LDR_MODULE*)mdl->e[0].Flink;
if (mdl->base != nullptr)
{
if (!lstrcmpiW(mdl->dllname.Buffer, L"kernel32.dll")) //сравниваем имя библиотеки в буфере с необходимым
{
break;
}
}
}
Что не есть гуд. Ибо в макете его можно юзать для демонстрации, а в реале не стоит юзать lstrcmpiW. Лучше накастылять что то вроде:
do
{
mdl = (LDR_MODULE*)mdl->e[0].Flink;
if (mdl->base != NULL)
{
if ((GetHashBase(mdl)) == (0x5d23cc39)) // KERNEL32.DLL
{
break;
}
}
} while (mlink != (INT_PTR)mdl);
DWORD GetHashBase(LDR_MODULE* mdll)
{
char name[64];
size_t i = 0;
while (mdll->dllname.Buffer[i] && i < sizeof(name) - 1)
{
name[i] = (char)mdll->dllname.Buffer[i];
i++;
}
name[i] = 0;
return MURMUR_HASH(name, API_STRLEN(name), HASHING_SEED);
}
ЗЫ
Сорьте за качество кода, я его рипаю и пытаюсь просто суть показать.