之前ida+windbg调内核发现内核的地址和ida中不匹配....搞了半天,终于发现是这个原因:
我ida是ntoskrnl.exe .... 而windows中加载的版本是
ntkrpamp.exe
忘了操作系统会根据处理器型号加载不同版本内核了....
正好看到高端调试上有关于这个的讨论:
http://advdbg.org/forums/2142/ShowPost.aspx
但是我的分析是基于ntoskrnl的,没办法,只好强制指定系统加载ntosknrl了,得做以下几个工作
1 把vm的processor调成单核单处理器
2 开windows虚拟机, 为了告诉系统现在是单核单处理器模式,得跑一下这个命令 rundll32.exe setupapi,InstallHinfSection ACPIAPIC_UP_HAL 131 %windir%\inf\hal.inf
参考: 如何修改Windows XP系统的内核类型 http://blog.sina.com.cn/s/blog_5918846401000bik.html
3 当然,这里还没结束,如果处理器支持PAE 那么系统会加载ntoskrnla 所以还得禁用PAE. 到
BOOT.INI里面, 启动设置中如果有/noexecute=optin就替换改成/execute,没有的话就加上/execute
完了后就会加载ntoskrnl了,效果图:
指定其它系统方法类似,在此仅抛砖引玉