下面是网上找到的一句话:
如果大家写过shellcode一定还记得,shellcode中开头要找kernel32.dll模块的内存加载地址。
同样,如果大家要写一个内核的类似东东的话,第一步也是要找出ntoskrnl.exe模块的内存加载位置。
不懂什么意思ntoskrnl.exe是windows的一个进程文件,在系统经过预启动和启动阶段后进入内核调用阶段时由Ntldr调用Ntoskrnl.exe
我好想还看到过判断系统使用的是ntoskrnl.exe还是其他的n**.exe忘了名字勒还有 怎么去获取?

解决方案 »

  1.   

    内核文件有ntoskrnl.exe, ntkrnlpa.exe, ntkrnlmp.exe, ntkrpamp.exe
    简单来说,是同一套源代码根据编译选项的不同而编译出四个可执行文件,分别用于: 
    ntoskrnl - 单处理器,不支持PAE(物理地址扩展) 
    ntkrnlpa - 单处理器,支持PAE 
    ntkrnlmp - 多处理器,不支持PAE 
    ntkrpamp - 多处理器,支持PAE 
    在Vista之前,安装程序会在安装时根据系统的配置选择两个多处理器或者两个单处理器的版本复制到目标系统中。从Vista开始,会统一使用多处理器版本,因为多处理器版本运行在单处理器上只是效率稍微低一些。
    (如果有《软件调试》,可以读一下8.4节P185)关于获取:
    1.ZwQuerySystemInformation
    2.遍历LDR_DATA_TABLE_ENTRY
    3.从MmSystemRangeStart开始搜索
    4.NtSystemDebugControl(这个没具体研究)
    5.KPCR - 0x34