August 5, 2011

映像劫持“IFEO”(Image File Execution Options)詳解

“映像劫持”,也被稱為“IFEO”(Image File Execution Options,其實應該稱為“Image Hijack”,至少也應該稱為IFEO Hijack而不是只有“IFEO”自身!),它的存在自然有它的理由,在WindowsNT架構的系統裡,IFEO的本意是為一些在默認系統環境中運行時可能引發錯誤的程序執行體提供特殊的環境設定,系統廠商之所以會這麼做,是有一定歷史原因的,在Windows NT時代,系統使用一種早期的堆棧Heap,由應用程序管理的內存區域)管理機制,使得一些程序的運行機制與現在的不同,而後隨著系統更新換代,廠商修改了系統的堆棧管理機制,通過引入動態內存分配方案,讓程序對內存的占用更為減少,在安全上也保護程序不容易被溢出,但是這些改動卻導致了一些程序從此再也無法運作,為了兼顧這些出問題的程序,微軟以“從長計議”的態度專門設計了“IFEO”技術,它的原意根本不是“劫持”,而是“映像文件執行參數”!
IFEO 設定了一些與堆棧分配有關的參數,當一個可執行程序位於IFEO的控制中時,它的內存分配則根據該程序的參數來設定,那麼如何使一個可執行程序位於 IFEO 的控制中呢?答案很簡單,Windows NT架構的系統為用戶預留了一個交互接口,位於註冊表的“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options”內,使用與可執行程序文件名匹配的項目作為程序載入時的控制依據,最終得以設定一個程序的堆棧管理機制和一些輔助機制等,大概微軟考慮到加入路徑控制會造成判斷麻煩與操作不靈活的後果,也容易導致註冊表冗余,於是IFEO使用忽略路徑的方式來匹配它所要控制的程序文件名,例如IFEO指定了對一個名為“AAA.EXE”的可執行程序文件進行控制,那麼無論它在哪個目錄下,只要它名字還叫“AAA.EXE”,它就只能在IFEO的五指山裡打滾了。
說了半天都只是純粹的概念,那麼IFEO到底是怎麼樣發揮作用的呢?例如有一個程序文件名為“lk007.exe”,由於使用了舊的堆棧管理機制,它在新系統裡無法正常運行甚至出現非法操作,為了讓系統為其提供舊的堆棧管理機制,我們需要IFEO來介入,則需執行以下步驟:



unlog_NVPO 0