当前位置:中国星空学习网首页>实用技术>注册表>正文  
对一个windows2000注册表项的粗略分析

 
  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]
  
   注册表的这个项大家可能还不太熟悉,因为这个主要是用来调试程序用的,对一般用户意义不大。默认是只有管理员和local system有权读写,一般user只读。
  
  先做个实验:在这个项下新建一个子项“test.exe”,再建一个字串值“Debugger”,数值数据设为“cmd.exe /c echo”,随便把一个EXE文件改名为“test.exe”,然后在命令行调用“test.exe”,得到的屏幕输出不是test.exe的输出,而会是这样:
  
  E:\>test
  test
  
  E:\>test.exe
  test.exe
  
  Windows NT系统在执行一个从命令行调用的可执行文件运行请求时,首先会检查这是否是一个可执行文件,如果是,又是什么格式的,然后就会检查是否存在:
  
  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
  
  如果存在,首先会试图读取这个键值:
  
  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
  "Debugger"="debug_prog"
  
  如果存在,就执行“debug_prog ImageName”,刚才的例子中,其实系统真正执行的是:
  
  cmd.exe /c echo test
  cmd.exe /c echo test.exe
  
  如果“debug_prog”设为一个不在搜索路径中的程序,会得到一个很有趣的提示:“系统找不到文件 E:\test.exe”。而事实上test.exe就在当前目录下,这里所谓找不到的其实是那个“debug_prog”。而只要设置了test.exe这个项,既使test.exe不存在,也不会提示“系统找不到文件”,控制台上不会返回任何输出。
  
  系统在运行任何一个可执行程序时都会先检查这个键值。这个特性可以被用来放置后门。这一点,在以往的Windows 安全资料中尚未提到过。如果你有一个Windows 2000安全检查列表,请把它加进去。
  
  这个项支持的值,在Windows 2000下我找到的有:
  
  ApplicationGoo
  Debugger
  PageHeapFlags
  DisableHeapLookAside
  DebugProcessHeapOnly
  PageHeapSizeRangeStart
  PageHeapSizeRangeEnd
  PageHeapRandomProbability
  PageHeapDllRangeStart
  PageHeapDllRangeEnd
  GlobalFlag
  BreakOnDllLoad
  
  这些项的工作都只与文件名有关,与路径无关。
  
  其中,Debugger上面讲过了。DisableHeapLookAside可以用来纠正一些应用程序运行时的问题。从Windows NT SP4开始,Windows 系统使用了新的堆(heap)管理机制,新的动态内存分配使得应用程序占用更少的内存(也使写Exploit更加困难:-)),但是也有些应用程序在这种机制下无法正常运行,会挂起或出错。这种情况下,以该文件名建一个项,并把DisableHeapLookAside 设为“1”,会强迫系统对此应用程序不使用新的堆管理机制。(基于一般系统的堆溢出 Exploit,在应用程序改变了运行方式后是不是会失效?那么,对关键程序使用这一手段,在某种意义上,也是一种抵御溢出攻击的方法。)
  
  关于DisableHeapLookAside更多的信息请参考微软知识库:Q252902,Q195008,Q195009。
  
  有趣的是,Windows 2000在安装的时候,就预设了这几个文件名的DisableHeapLookAside:
  
  enc98.EXE
  f32main.exe
  prwin8.EXE
  ps80.EXE
  qfinder.EXE
  qpw.EXE
  ua80.EXE
  wpwin8.EXE
  
  大概是微软收到了有关这些应用程序运行异常的报告吧:-)。
  
  BreakOnDllLoad 是用来调试DLL的,譬如某个ISAPI。可以在DLL刚一装入就设置断点。
  ApplicationGoo我没有找到相关资料,但从微软预设的值来看,这个项里存放的是文件的版本信息。我猜想是否用这个来匹配特定版本的文件。
  
  剩下来的这几个值虽然我知道它们是确实存在的,却无法找到任何有关的资料,甚至在MSDN里也只字未提,还好它们的名称基本上已经把用处说清楚了:-),都是用来控制heap 的。希望这几个值对正在埋头研究Windows堆溢出的朋友们能有一点点帮助。
  
  附加信息:
  
  在XP中,这个项下面还支持ShutdownFlags这个值。下面是微软的描述:
  
  Leak Detection when the Process Is Exiting
  
  Leak detection is made every time a process is cleanly exiting.
  It doesn't work if the process is terminated with TerminateProcess()
  or TerminateThread() / ExitThread() for the last thread in the process;
  but for most applications this is not a problem.
  
  To enable leak detection when the process is exiting, set the registry key as follows:
  
  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ImageName]
  "ShutdownFlags"="3"

 

上一篇: Win2000注册表应用四则
下一篇: “控制面板”与注册表的关联
站内公告
栏目导航
 Windows系统
 Linux/DOS
 办公应用
 工具软件
 图形图象
 网络应用
 安全防御
 网络编程
 软件教程
 实用技术
最新文章
中国星空图片网
·人体艺术
·性感美眉
·生活自拍
·幽默搞笑
·超级帅哥
·精彩万花筒
·梦幻景色
中国星空探索网
·神秘追踪 灵异接触
·鬼故事 灵异空间 图片
·未解之谜 探索宇宙
中国星空两性网
·两性图文 我的性事 情人 成人幽默
·性爱技巧 两性测试 性爱误区
·性事花边 生育避孕 性保健 性疾病
·两性生理 文化 讨论 心理 知识
·爱人同志 非常男女 一夜情
中国星空算网命
·手机吉凶 QQ号码吉凶 周公解梦
·塔罗牌测试 狗年运程
·关公灵签 紫薇斗数 八字排盘
·测试:你的成功指数有多少
·测验你的家庭是否美满?
·面相: 面型 眼睛 耳朵 口唇
·手相:拉你一把奶油桂花手
·测试:你能成为大富翁吗?
联系方式 设为首页
中国星空旗下---中国星空学习网    Copyright 2005-2050 Year   xx.happy369.com  Networks.All rights reserved
中国星空网所有内容均来源于网络,版权属于原作者,如侵犯到您的权益,请与我们联系,我们将尽快予以删除或处理。
中国星空不承担由于内容的合法性及健康性所引起的一切争议和法律责任。
陕ICP备05011765号 联系我们