關於createfile("\\.\trw2000")檢測trw2000的一些研究;期待與高人探討! (2千字)

看雪資料發表於2015-11-15

論“createfile("\\.\trw2000")不能檢測trw2000 1.23版本之存在”

    自從用API函式createfile("\\.\Sice")能有效檢測softice存在與否的方法被揭示以來,此方法被推而廣之,廣泛運用於各種anti技術中。比如大家很熟悉的
createfile("\\.\trw2000")    //檢測trw2000
createfile("\\.\trwdebug")  //檢測trw2000
createfile("\\.\filemon")    //檢測filemon
createfile("\\.\regmon")    //檢測regmon
等等。
    特別是createfile("\\.\trw2000")更是被多個國產軟體所運用,來對付trw2000。但是,實驗發現,這種方法不能檢測到trw2000 1.23版本,其餘版本可以檢測到。


    自從見到createfile("\\.\Sice")檢測softice後,我當然也舉一反三,大肆試驗,用此函式檢測其它程式,但是檢測filemon、regmon都成功,唯獨不能檢測到trw2000(我是1.23版本)存在;我也詢問其它人,部分人與我有同感;難道這個方法有限制,此疑惑一直存於我心。
    直到最近,我從一些vxd教程中知道createfile("\\.\Sice")檢測的原理,並作了一些試驗。

    在win9x下,win32程式與vxd程式彼此溝通分2部分:1部分是應用程式到vxd通訊;另一層是vxd至應用程式通訊。
    win32程式對vxd程式通訊時,是透過呼叫DeviceIoControl函式進入vxd,此函式的一個引數就是由createfile獲得的裝置控制程式碼。這樣,同樣生成或開啟檔案的呼叫也能夠開啟一個到vxd的通道。要用createfile開啟一個vxd,而不是一個通常的檔案,在檔名的地方必須使用特殊形式
createfile("vxdname")
  (摘自《windows vxd與裝置驅動程式權威指南》第二版)

    如此,很顯然了,createfile("\\.\Sice")能檢測是因為sice駐留後記憶體中有個vxd叫sice形成(當然,實際硬碟上不存在一個叫sice.vxd的程式)。
   
    各位可以從以下網址下載一個軟體vxdview,它用來顯示記憶體中駐留的vxd
http://www.tssc.de/download/prods/vxdview.exe
    其結果顯示trw2000 1.23版本執行前、後系統中vxd沒有改變;
              trw2000 1.22、1.03版本執行前、後比較,系統中增加一個vxd,名字為trwdebug
          再用filemon測試,顯示增加一個vxd,名字為filemon。

    結論1、trw2000 1.23版本執行後(但沒有啟用中斷情況下),沒有生成vxd,所以createfile("\\.\trw2000")不能成功。

    但是用ctrl-N啟用trw2000 1.23版本後,下命令
vxd  //顯示所有vxd
可以見到trw2000名字,說明只有在trw2000啟用,接手系統後才會生成vxd,來實行跟蹤、顯示等功能;可是此時,createfile("\\.\trw2000")已經無能為力,因為一切在trw掌握中;等到用F5結束trw2K的啟用,vxd也就消失了。

    結論2、trw2000 1.23版只有在啟用後才生成vxd。

    所以。最後結論是:“createfile("\\.\trw2000")不能檢測trw2000 1.23版本之存在,但可以用來檢測低階版本”。

    也許劉滔滔在1.23版本中用了wdm程式設計技術導致不能檢測?但是1.22版本也是wdm程式設計,為什麼可以檢測?或者,作者在1.23版本中才完全實現了wdm程式設計?那麼基於wdm在win2K的通用性,也許可以期待trw2000 for win2k的出現!

    以上是我的研究過程,不管是贊同還是反對,都請各位提出觀點及相應的論據;並請指出我表達中的錯誤。

謝謝

相關文章