Здравствуйте!
Возникла проблема. Win XP SP2 32 бита
Необходимо перезаписать байты по адресу переменной pCodeEntryPoint.
Все функции отрабатывают хорошо, но, как показывает сравнение, участок памяти не изменяется.
Что делаю не так?
PsSetLoadImageNotifyRoutine(MonitorLoadImageNotifyRoutine);
VOID MonitorLoadImageNotifyRoutine(IN PUNICODE_STRING FullImageName, IN HANDLE ProcessId, IN PIMAGE_INFO ImageInfo)
{
PMDL mdl;
PVOID MappedImTable;
PVOID pCodeEntryPoint;
UCHAR pNumBuf[16];
if(..)
return;
pCodeEntryPoint = PEFile_GetEntryPointOffset32(ImageInfo->ImageBase, TRUE);
if(pCodeEntryPoint)
{
memcpy(pNumBuf, pCodeEntryPoint, 8);
DbgPrint("ENTRY POINT1: %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X\n",
pNumBuf[0],
pNumBuf[1],
pNumBuf[2],
pNumBuf[3],
pNumBuf[4],
pNumBuf[5],
pNumBuf[6],
pNumBuf[7]);
mdl = MmCreateMdl(NULL, pCodeEntryPoint, 8);
if(mdl)
{
MmBuildMdlForNonPagedPool(mdl);
mdl->MdlFlags = mdl->MdlFlags | MDL_MAPPED_TO_SYSTEM_VA;
MappedImTable = MmMapLockedPages(mdl, KernelMode);
if(MappedImTable)
{
DbgPrint("OK\n");
memcpy(MappedImTable, pShellCode, 8);
MmUnmapLockedPages(MappedImTable, mdl);
}
IoFreeMdl(mdl);
pCodeEntryPoint = PEFile_GetEntryPointOffset32(ImageInfo->ImageBase, TRUE);
memcpy(pNumBuf, pCodeEntryPoint, 8);
DbgPrint("ENTRY POINT1: %02X, %02X, %02X, %02X, %02X, %02X, %02X, %02X\n",
pNumBuf[0],
pNumBuf[1],
pNumBuf[2],
pNumBuf[3],
pNumBuf[4],
pNumBuf[5],
pNumBuf[6],
pNumBuf[7]);
}
}
}