解析映像劫持技術第1/3頁

詭異的中毒現象 一. 詭異的中毒現象

  在成品檢驗科文員辦公室的一臺電腦上折騰半個小時後,計算機維護部門的技術員只覺得眼皮不停狂跳,因爲從剛開始接手這個任務開始,他就一直在做無用功:他隨身帶的U盤裏引以爲豪的衆多維護工具包在這臺機器上全軍覆沒,無論他直接在U盤上運行還是隨便複製到哪個目錄裏,系統都是報告“找不到文件”或者直接沒有運行起來的反應,他第一次感受到了恐懼,文件分明就好好的在眼皮底下,可它們就是“找不到”或死活不肯執行,莫非是在這臺機器上被病毒破壞了?他只好打開網頁嘗試重新下載,但是他很快就絕望了,剛下載的查殺工具同樣也不能使用。

  無奈之下他只好在衆多文員的期待下說出了大部分號稱上門維護電腦的高手們常用的一句話,一般情況下這句話馬上能讓大部分用戶接受殘酷的現實,允許其重裝系統,併爲這次重裝系統付出50元的價格,這句話就是:“系統文件嚴重損壞了,沒法修了,只能重裝。”

  裝完系統和常用辦公軟件後,他像一個賊似的趕緊離開了辦公室,生怕多呆一會兒就會惹來什麼麻煩似的,而他卻不知道,“麻煩”早已在他剛纔使用的U盤上安家了。回到自己的電腦前,他剛右鍵點擊U盤,就看見鼠標忙碌的狀態比平時久了點,然後托盤區裏的殺毒軟件和網絡防火牆都消失了,他心裏一慌張,趕緊運行超級巡警,系統卻報告“找不到文件”,他一下子呆在了電腦前:瘟神跟上門來了……

  古語云:道高一尺,魔高一丈。這句經典哲理在網絡上得到了迅速的延伸應用。今年初,一種早已有之的系統調試功能被應用到病毒技術上,從而搖身一變成爲惡魔的代言人,普通用戶很快就面臨了一場莫名其妙的病毒災難,這就是“映像劫持”。

  二. 我本將心向明月,奈何明月照……

  “映像劫持”,也被稱爲“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指定了對一個名爲“小金.EXE”的可執行程序文件進行控制,那麼無論它在哪個目錄下,只要它名字還叫“小金.EXE”,它就只能在IFEO的五指山裏打滾了。

  說了半天都只是純粹的概念,那麼IFEO到底是怎麼樣發揮作用的呢?例如有一個程序文件名爲“lk007.exe”,由於使用了舊的堆管理機制,它在新系統裏無法正常運行甚至出現非法操作,爲了讓系統爲其提供舊的堆管理機制,我們需要IFEO來介入,則需執行以下步驟:

  1. 確保在管理員狀態下執行regedit.exe,定位到以下註冊表項:

  
Quote:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options


  2. 在“Image File Execution Options”下建立一個子鍵,名爲“lk007.exe”,不區分大小寫。現在確保位於HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\lk007.exe\下,建立一個字符串類型的註冊表項,名爲“DisableHeapLookAside”,值爲“1”

  3. 再次運行lk007.exe查看運行情況,如果真的是由於堆管理機制引發的問題,則程序得以正常運行,否則該程序問題不屬於IFEO能夠干涉的範圍,或者需要嘗試搭配其他的參數使用。

  目前已知的IFEO參數有:

    
Quote:
  ApplicationGoo 
  Debugger 
  PageHeapFlags 
  DisableHeapLookAside 
  DebugProcessHeapOnly 
  PageHeapSizeRangeStart 
  PageHeapSizeRangeEnd 
  PageHeapRandomProbability 
  PageHeapDllRangeStart 
  PageHeapDllRangeEnd 
  GlobalFlag 
  BreakOnDllLoad 
  ShutdownFlags 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章