因为公司要封USB口存储设备,同事随便找了这款免费软件测试了一下,下载的是1.0版,测试以后告诉我说很奇怪,非要使用过一次的U盘才能被软件禁用,新来的U盘可以照常使用。于是我对照微软官方提供禁用USB存储设备的方法(http://support.microsoft.com/kb/823732/zh-cn#top),简单拆解了一下该软件,结论如下。
该程序采用易语言编写,所有后缀名为fnr、fne的文件都是易语言运行时库文件(暂时发现不需要eAPI.fne、eCalc.fne、spec.fne等3个文件)。程序运行后隐藏Pxqdqgl.exe进程,这是通过调用IO.dll的HideProcess接口来实现。程序首次运行时会在system32目录下创建cysys.ocx和ie32.inf等2个文件,其中ie32.inf文件实际上是用来加密存储软件的密码,如果程序运行时删除了该文件则只有重启动系统才能恢复该文件;卸载时ie32.inf文件会自动删除。
程序实现了在单机上对USB存储设备的禁用控制,用FileMon&RegMon监视分析发现,其基本原理是修改注册表相关键值,详见KB823732《如何禁用 USB 存储设备》。当程序运行时,执行以下操作:
1.修改HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Userinit,在userinit.exe后增加Pxqdqgl.exe(开机运行);
2.修改HKLM\SYSTEM\CurrentControlSet\Services\USBSTOR\Start,如果是禁用USB就设为4,如果是启用就设为3;
程序反复执行1、2步骤(大概半秒钟一次),控制方式够简易的。
当卸载程序时,首先恢复注册表键值,然后退出程序。
这种修改注册表的方法只能禁用曾经在该计算机上使用过(已安装过)的设备,新的(未安装过的)USB存储设备至少可以使用一次,这就是该程序的缺陷。既然都做到这一步了,干嘛不绑个xcacls.exe,调命令行把驱动文件的权限也一并设了呢,或者干脆把驱动文件重命名,并每半秒检查一次该位置是否存在同名文件。。。说的太多,打住。