Ring0. Перезапись памяти в пользовательском АП
От: kr4nt  
Дата: 22.03.13 11:12
Оценка:
Здравствуйте!

Возникла проблема. 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]);
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.