• 标 题:关于createfile("\\.\trw2000")检测trw2000的一些研究;期待与高人探讨! (2千字)
  • 作 者:小楼
  • 时 间:2002-5-28 17:25:35
  • 链 接:http://bbs.pediy.com

论“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的出现!

    以上是我的研究过程,不管是赞同还是反对,都请各位提出观点及相应的论据;并请指出我表达中的错误。

谢谢