探索黑客技术攻防,实战研究与安全创新

导航菜单

禁用 USB软件的破解分析

在学校机房上机时,发现USB设备被禁用了。插入USB设备后,电脑仍然会有相应的提示,但是找不到相应的驱动程序,因而可以判断,机房管理员并没有在BIOS中禁用USB设备,而应该是使用了相应的软件来禁用USB设备了,也就是说,只要我们找到了这个软件,就有可能将禁用USB的限制解除。于是,探寻解除之道的旅程由此开始。

在本地电脑以“USB”为关键字搜索,发现了一个叫禁用USB的软件,打开该可执行文件的“属性”,其中出现了“XXXXX学校”的字样,猜测可能是机房管理员自己写的一个小软件。运行该软件,界面如图1所示。

图片1.png

看到的第一眼,想到了批处理,尝试按了Ctrl+C使它暂停,软件果然暂停了。这时,在本地文件搜索中发现了一个文件——禁用USB.bat,在系统临时文件里,应该是禁用USB.exe在运行过程中产生的,用记事本打开,果真如此。软件可能是学校机房管理员自己编写的,使用的是批处理,并通过加密软件加密成EXE可执行文件。

下面是源码分析,“//”部分是我添加的注释信息。


//关闭回显
echo off
//备份原USB驱动至WINDOWS文件夹,文件后缀为Bakcopy %WINDIR%\inf\usbstor.inf %WINDIR%\usbstorinf.bak /ycopy %WINDIR%\inf\usbstor.PNF %WINDIR%\usbstorPNF.bak /y
//删除原USB驱动del /q /f %WINDIR%\inf\usbstor.infdel /q /f %WINDIR%\inf\usbstor.PNF
//建立USB驱动文件PNFmd %WINDIR%\inf\usbstor.PNF
//建立带斜杠文件夹,利用畸形文件夹阻止驱动文件复制到该文件夹md %WINDIR%\inf\usbstor.PNF\1..\
//更改USB驱动文件PNF的属性attrib +a +s +h +r %WINDIR%\inf\usbstor.PNF /s /d
//建立USB驱动文件infmd %WINDIR%\inf\usbstor.inf
//建立带斜杠文件夹,利用畸形文件夹阻止驱动文件复制到该文件夹md %WINDIR%\inf\usbstor.inf\11..\
//更改USB驱动文件inf的属性attrib +a +s +h +r %WINDIR%\inf\usbstor.inf /s /d
//更改文件修改权限echo y|cacls %WINDIR%\inf\usbstor.PNF /c /t /P everyone:necho y|cacls %WINDIR%\inf\sbstor.inf /c /t /P everyone:nreg  add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR"  /vStart /t reg_dword /d 4 /f
//注册表信息写入c:\windows\jy.ini,该配置文件的内容为:echo HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR [2 19] >>c:\windows\jy.ini
//注册配置文件regini c:\windows\jy.ini明白了软件的运行原理,破解的思路也就有了。其实很简单,只需要执行与上面的程序相反的操作就可以了。(如果只需要看重要的部分,可略过本部分,参阅下面的精简版本)。


启用USB的源码如下:


@echo off
echo
echo
echo
*
*
*
*
***********************************************************************
echo
echo
echo
*
*
*
*


本程序用于启用USB设备,针对【XXXXXXXXXXXXXXXXX】机房有效,   *

软件测试成功,其他地域请自测。任何Bug或建议,提交至作者邮箱。*


echo
*
*
echo
echo
echo
echo
echo
echo
echo
echo
echo
Pause
*************************************************************
*
*
*
*
Name
By
:启用USB小工具
:BadTudou
Email
Date
:BadTudou@xxxx.com
:2013-04-23
Waring :因使用本程序而带来的任何法律责任由使用者自行承担!
echo ____________________________________________________________________
echo正在更改目标文件文件属性
echo ____________________________________________________________________
pause
attrib -a -s -h -r %WINDIR%\inf\usbstor.inf /s /d
attrib -a -s -h -r %WINDIR%\inf\usbstor.PNF /s /d
echo正在尝试清除驱动文件保护机制
pause
rd %WINDIR%\inf\usbstor.PNF\1..\
rd %WINDIR%\inf\usbstor.PNF\
rd %WINDIR%\inf\usbstor.inf\11..\
rd %WINDIR%\inf\usbstor.inf\
echo正在写入驱动文件
pause
del /q /f %WINDIR%\inf\usbstor.inf
del /q /f %WINDIR%\inf\usbstor.PNF
copy %WINDIR%\usbstorinf.bak %WINDIR%\inf\usbstor.inf /y
COPY %WINDIR%\usbstorPNF.bak %WINDIR%\inf\usbstor.PNF /y
echo尝试将启用信息写入注册表,如果本步骤失败,使用管理员权限手工修改如下注册表键值:echo注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR
echo键名
echo键值
pause
:Start
:3
reg  add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR"  /v
Start /t reg_dword /d 3 /f
pause
echo Done!
Pause


启动USB精简版源码:


@echo off
//更改目标文件文件属性
attrib -a -s -h -r %WINDIR%\inf\usbstor.inf /s /d
attrib -a -s -h -r %WINDIR%\inf\usbstor.PNF /s /d
//尝试清除驱动文件保护机制
rd %WINDIR%\inf\usbstor.PNF\1..\
rd %WINDIR%\inf\usbstor.PNF\
rd %WINDIR%\inf\usbstor.inf\11..\
rd %WINDIR%\inf\usbstor.inf\
//删除原无效的USB驱动配置文件
del /q /f %WINDIR%\inf\usbstor.inf
del /q /f %WINDIR%\inf\usbstor.PNF
//复制原来有效的USB驱动配置文件至驱动文件夹
copy %WINDIR%\usbstorinf.bak %WINDIR%\inf\usbstor.inf /y
copy %WINDIR%\usbstorPNF.bak %WINDIR%\inf\usbstor.PNF /y
//尝试将启用信息写入注册表
//注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR
//键名
:Start
:3
//键值
reg  add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR"  /v
Start /t reg_dword /d 3 /f


运行自己写的启用USB.bat,最后将启用USB的信息写入注册表时出现错误,原因是未能取得管理员权限。使用Win+R快捷键打开“运行”窗口,输入“regedit”打开注册表编辑器,找到出现在代码中相应的注册表项和键名,勾选相应的权限,输入键值:3,如图1所示。此时再插入USB设备,电脑正确识别了。

图片2.png

软件分析重点:能够破解该软件,主要是我们获取了它的源码,否则,将很难破解。注意看以下源代码:


//建立带斜杠文件夹,利用畸形文件夹阻止驱动文件复制到该文件夹md %WINDIR%\inf\usbstor.PNF\1..\
//建立带斜杠文件夹,利用畸形文件夹阻止驱动文件复制到该文件夹md %WINDIR%\inf\usbstor.inf\11..\再看看我们是如何破解它的。
rd %WINDIR%\inf\usbstor.PNF\1..\
rd %WINDIR%\inf\usbstor.inf\11..\


重点是畸形文件。我们需要将usbstor.inf复制至系统盘的Windows\inf文件夹下,如果我们直接用它覆盖原文件,会失败,因为目录已经存在文件usbstor.inf。准确的说,是存在usbstor.inf这个文件夹。当我们把usbstor.inf复制到目标文件夹时,系统判定目标文件夹下是否存在同名文件,在处理过程中,文件夹usbstor.inf被当作了文件(文件名:usbstor扩展名:.inf)。注意禁用usb中的这段代码:md %WINDIR%\inf\usbstor.inf\11..\

此处建立了一个带.的畸形文件夹,下面的讲解若不是很清楚,读者可以百度“畸形文件”。系统尝试删除目标文件夹下的usbstor.inf文件时(实际上是一个文件夹),会删除该文件夹下的所有文件夹及文件,但是由于畸形文件 11.的存在,\inf\usbstor.inf\11..

最后的一个.被解析成了文件夹,而该文件是 11..,系统会提示因找不到文件而无法删除,因而目标文件是不会被删除的。

如果软件的作者将“ md  %WINDIR%\inf\usbstor.inf\11..\ ”改为“md%WINDIR%\inf\usbstor.inf\xx..\”,其中xx为任意字母或数字,或者建立多级文件夹,然后再这些文件夹下随机建立畸形文件,那么启用USB就变得更难了。

本文为网络安全技术研究记录,文中技术研究环境为本地搭建或经过目标主体授权测试研究,内容已去除关键敏感信息和代码,以防止被恶意利用。文章内提及的漏洞均已修复,在挖掘、提交相关漏洞的过程中,应严格遵守相关法律法规。