-
-
PsSetLoadImageNotifyRoutine中修改镜像内容
-
发表于:
2011-12-7 10:24
7524
-
PsSetLoadImageNotifyRoutine中修改镜像内容
PsSetLoadImageNotifyRoutine的回调中修改了镜像内容,为什么修改一次,就一直有效了,直到机器重启。
我是想在回调中修改镜像的导入表,比如现在运行记事本,我修改了导入表,注入DLL成功了。
但是我再次运行记事本的时候,发现刚才修改的新的导入表地址已经被修改了。
为什么修改一次就一直有效啊?
修改方法如下:
pbNewIid 是在进程空间分配的虚拟内存地址
gpMyData 是自己构建的导入表地址
gnImportSize 是新导入表的长度
pImageBase 是镜像基址
__asm
{
cli;
mov eax, cr0;
mov oldCr0, eax;
and eax, not 10000h;
mov cr0, eax
}
ProbeForWrite(pbNewIid, gnImportSize, 1);
RtlZeroMemory(pbNewIid, gnImportSize);
RtlCopyMemory(pbNewIid, gpMyData, gnImportSize);
pHeader->IMPORT_DIRECTORY.Size = gnImportSize;
pHeader->IMPORT_DIRECTORY.VirtualAddress = (ULONG)pbNewIid - (ULONG)pImageBase;
__asm
{
mov eax, oldCr0;
mov cr0, eax;
sti;
}
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!