熱點推薦:
您现在的位置: 電腦知識網 >> 操作系統 >> Windows系統管理 >> 正文

對一個windows2000注冊表項的粗略分析

2022-06-13   來源: Windows系統管理 

  [HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options]
  
   注冊表的這個項大家可能還不太熟悉因為這個主要是用來調試程序用的對一般用戶意義不大默認是只有管理員和local system有權讀寫一般user只讀
  
  先做個實驗在這個項下新建一個子項testexe再建一個字串值Debugger數值數據設為cmdexe /c echo隨便把一個EXE文件改名為testexe然後在命令行調用testexe得到的屏幕輸出不是testexe的輸出而會是這樣
  
  E:\>test
  test
  
  E:\>testexe
  testexe
  
  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剛才的例子中其實系統真正執行的是
  
  cmdexe /c echo test
  cmdexe /c echo testexe
  
  如果debug_prog設為一個不在搜索路徑中的程序會得到一個很有趣的提示系統找不到文件 E:\testexe而事實上testexe就在當前目錄下這裡所謂找不到的其實是那個debug_prog而只要設置了testexe這個項既使testexe不存在也不會提示系統找不到文件控制台上不會返回任何輸出
  
  系統在運行任何一個可執行程序時都會先檢查這個鍵值這個特性可以被用來放置後門這一點在以往的Windows 安全資料中尚未提到過如果你有一個Windows 安全檢查列表請把它加進去
  
  這個項支持的值在Windows 下我找到的有
  
  ApplicationGoo
  Debugger
  PageHeapFlags
  DisableHeapLookAside
  DebugProcessHeapOnly
  PageHeapSizeRangeStart
  PageHeapSizeRangeEnd
  PageHeapRandomProbability
  PageHeapDllRangeStart
  PageHeapDllRangeEnd
  GlobalFlag
  BreakOnDllLoad
  
  這些項的工作都只與文件名有關與路徑無關
  
  其中Debugger上面講過了DisableHeapLookAside可以用來糾正一些應用程序運行時的問題從Windows NT SP開始Windows 系統使用了新的堆(heap)管理機制新的動態內存分配使得應用程序占用更少的內存(也使寫Exploit更加困難:))但是也有些應用程序在這種機制下無法正常運行會掛起或出錯這種情況下以該文件名建一個項並把DisableHeapLookAside 設為會強迫系統對此應用程序不使用新的堆管理機制(基於一般系統的堆溢出 Exploit在應用程序改變了運行方式後是不是會失效?那麼對關鍵程序使用這一手段在某種意義上也是一種抵御溢出攻擊的方法
  
  關於DisableHeapLookAside更多的信息請參考微軟知識庫QQQ
  
  有趣的是Windows 在安裝的時候就預設了這幾個文件名的DisableHeapLookAside
  
  encEXE
  fmainexe
  prwinEXE
  psEXE
  qfinderEXE
  qpwEXE
  uaEXE
  wpwinEXE
  
  大概是微軟收到了有關這些應用程序運行異常的報告吧:)
  
  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 doesnt 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=
From:http://tw.wingwit.com/Article/os/xtgl/201311/9171.html
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.