如何注册表封U盘,又不会被手动更改?
最近想封U盘,但是苦于要用USB键盘不能封BIOS只能注册表下手,但是有些人可以记下来注册表的键值。所以有什么办法能封住USB,又能防止手动改注册表的键值呢? USB鼠标键盘在BIOS中设置时分开的吧,可以单独设置在WINDOWS中,USB可移动磁盘也是可以查出来的,具体可以看pursole发的UDF,有专门的例子,包括检查是否有USB设备和卸载之,更简单的AU3自带函数查移动磁盘,有则杀之。。
修改注册表停用U盘,然后禁用注册表,太容易被破了 禁用U盘的父设备就好了啊~ 禁用U盘的父设备就好了啊~
pusofalse 发表于 2010-3-9 13:36 http://www.autoitx.com/images/common/back.gif
能详细说明一下吗? 我现在想把regedit.exe这个文件删除,但发现WIN会自己把这个文件恢复... 请问有什么办法吗? 还有 没有regedit.exe 会不会影响winxp和office的正常运行? 本帖最后由 pusofalse 于 2010-3-9 14:28 编辑
#include <SetupApi.au3>
Local $sDrive, $sDescr, $sDescr1, $sClassGuid, $sDevicePath
Local $hDevInst, $hDevs, $tDevInfo, $tDevIfInfo, $iIndex, $iMask, $iDisk
$sDrive = "H:" ; 要禁用的U盘。
$iDisk = _CM_Get_Drive_Disk_Number($sDrive) ; 获取U盘所在物理磁盘序号。
$sClassGuid = $GUID_DEVINTERFACE_DISK
$iMask = bitOR($DIGCF_PRESENT, $DIGCF_DEVICEINTERFACE)
$hDevs = _SetupDiGetClassDevs($iMask, $sClassGuid) ; 获取包含所有磁盘的设备集合句柄。
; 枚举系统中的所有物理磁盘,并找到指定物理磁盘的设备句柄。
While _SetupDiEnumDeviceInterfaces($hDevs, 0, $sClassGuid, $iIndex, $tDevIfInfo)
$iIndex += 1
; 获取物理磁盘的物理路径。
$sDevicePath = _SetupDiGetDeviceInterfaceDetail($hDevs, $tDevIfInfo, $tDevInfo)
$sDevicePath = StringTrimLeft($sDevicePath, 4)
; 获取磁盘序号,判断是否是U盘所在的磁盘。
If (_CM_Get_Drive_Disk_Number($sDevicePath) <> $iDisk) Or (@extended <> 7) Then
ContinueLoop
EndIf
; 获取设备描述。
$sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, 0xC)
If ($sDescr = "") Then
$sDescr = _SetupDiGetDeviceRegistryProperty($hDevs, $tDevInfo, 0)
EndIf
; 设置寻找标识并跳出循环。
ExitLoop _CM_Assign_Var($sDevicePath, "\\?\" & $sDevicePath, 1)
WEnd
; 销毁信息集合句柄。
_SetupDiDestroyDeviceInfoList($hDevs)
_SetupDiApiBufferFree($tDevIfInfo)
; 判断是否找到指定物理磁盘的设备句柄。
If (StringLeft($sDevicePath, 4) <> "\\?\") Then Exit
; 获取设备句柄。
$hDevInst = DllStructGetData($tDevInfo, "DevInst")
; 获取父设备句柄。
$hDevInst = _CM_Get_Parent($hDevInst)
; 获取设备DevNode标识。
$iMask = _CM_Get_DevNode_Status($hDevInst)
; 获取设备描述名称。
$sDescr1 = _CM_Get_DevNode_Registry_Property($hDevInst, 1)
If ($sDescr1 = "") Then
$sDescr1 = _CM_Get_DevNode_Registry_Property($hDevInst, 0xD)
EndIf
; 判断父设备是否支持禁用操作。
If bitAnd($iMask, $DN_DISABLEABLE) <> $DN_DISABLEABLE Then
Exit(Msgbox(48, $sDescr1, "Not support to disable~"))
EndIf
; 确认。
$iMask = Msgbox(49, $sDrive & " (" & $sDescr & ")", "Are you sure to disable '" & $sDescr1 & "'?")
If ($iMask = 2) Then Exit
; 根据设备句柄创建设备集合,并返回其句柄。
_CM_Create_Device_Devs($hDevInst, $hDevs, $tDevInfo)
; 禁用。
If _SetupDiDisableDevice($hDevs, $tDevInfo, 1) Then
Msgbox(64, "Succeeded~", "Done~")
Else
Msgbox(48, "Failed~", "Error code: " & @error)
EndIf
; 销毁设备集合。
_SetupDiDestroyDeviceInfoList($hDevs)
_SetupDiApiBufferFree($tDevInfo) regedit.exe 你要不用可以删除,应该没问题,删了自动恢复估计是系统文件保护所为,删了DLLCACHE里的REGEDIT试试
不过要达到你的目的,最好如楼上所为 regedit.exe 你要不用可以删除,应该没问题,删了自动恢复估计是系统文件保护所为,删了DLLCACHE里的REGEDIT试试
不过要达到你的目的,最好如楼上所为 最近想封U盘,但是苦于要用USB键盘不能封BIOS只能注册表下手,但是有些人可以记下来注册表的键值。所以有什么办法能封住USB,又能防止手动改注册表的键值呢?因为这个需求才想到写这个的,如果有更好的办法请告诉我。因为这个办法是下策。
运行程序后,你的regedit.exe(注册表管理器)会被改名,输入密码123会进行正常的U盘开关。输入1234会将regedit.exe(注册表管理器)的名字改回来。
文件在 http://www.autoitx.com/thread-13439-1-1.html
脚本功能:利用密码判定的方式开关U盘,利用更改regedit.exe(注册表管理器)名称的方式禁止手动更改注册表设置
工作原理:
1.程序驱动
2.更改regedit.exe的名称造成用户找不到regedit.exe文件
3.判定密码
4.通过密码来设定不同的注册表和是否还原regedit.exe
计划完善
1.测试可行性
2.win会自行报错
3.360会报危险#NoTrayIcon
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_icon=..\..\..\图标\优化图标\winxp\toolbar\Toolbar _ Delete.ico
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_UseAnsi=y
#AutoIt3Wrapper_Res_Fileversion=1.0.0.2
#AutoIt3Wrapper_Res_Fileversion_AutoIncrement=p
#Obfuscator_Parameters=123
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#Region AutoIt3Wrapper 预编译参数(常用参数)
;#AutoIt3Wrapper_Res_Field=AutoIt Version|%AutoItVer% ;自定义资源段
;#AutoIt3Wrapper_Run_Tidy= ;脚本整理
;#AutoIt3Wrapper_Run_Obfuscator= ;代码迷惑
;#AutoIt3Wrapper_Run_AU3Check= ;语法检查
;#AutoIt3Wrapper_Run_Before= ;运行前
;#AutoIt3Wrapper_Run_After= ;运行后
#EndRegion AutoIt3Wrapper 预编译参数(常用参数)
#cs ____________________________________
AutoIt 版本: 3.2.12.0 (第一版)
脚本作者:
Email:
QQ/TM:
脚本版本:
脚本功能:利用密码判定的方式开关U盘,利用更改regedit.exe(注册表管理器)名称的方式禁止手动更改注册表设置
工作原理:
1.程序驱动
2.更改regedit.exe的名称造成用户找不到regedit.exe文件
3.判定密码
4.通过密码来设定不同的注册表和是否还原regedit.exe
计划完善
1.测试可行性
2.win会自行报错
3.360会报危险
#ce _______________脚本开始_________________
Select
Case FileExists(@WindowsDir&"\regedit.exe") = 1
;MsgBox(4096, @WindowsDir&"\regedit.exe 文件", "存在")
FileMove(@WindowsDir&"\regedit.exe", @WindowsDir&"\reg.iog")
DirCreate(@WindowsDir&"\regedit.exe")
;MsgBox(4096, @SystemDir&"\dllcache\regedit.exe", "存在")
FileMove(@SystemDir&"\dllcache\regedit.exe", @SystemDir&"\dllcache\reg.iog")
DirRemove(@WindowsDir&"\regedit.exe", 1)
Case FileExists(@WindowsDir&"\regedit.exe") = 0
;MsgBox(4096, @WindowsDir&"\regedit.exe 文件", "不存在")
Case Else
;MsgBox(4096, @WindowsDir&"\regedit.exe 文件", "错误")
EndSelect
Dim $var,$state,$issue
$var = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start")
Select
Case $var = 3
$state = "保护现在处于关闭状态"
$issue = "打开"
Case $var = 4
$state = "保护现在处于打开状态"
$issue = "关闭"
Case Else
$state = "保护现在处于未知错误状态"
$issue = "关闭"
EndSelect
#Region --- CodeWizard generated code Start ---
;InputBox features: Title=Yes, Prompt=Yes, Default Text=No
If Not IsDeclared("sInputBoxAnswer") Then Local $sInputBoxAnswer
$sInputBoxAnswer = InputBox("移动设备安全开关", $state & ",如果要" & $issue & "请输入安全密码.", "", "*", "-1", "-1", "-1", "-1")
Select
Case @error = 0 ;OK - The string returned is valid
if $sInputBoxAnswer = "1234" Then
FileMove(@SystemDir&"\dllcache\reg.iog", @SystemDir&"\dllcache\regedit.exe")
Sleep(2000)
FileMove(@WindowsDir&"\reg.iog", @WindowsDir&"\regedit.exe")
MsgBox(0,"","注册表加密保护已经卸载")
EndIf
If $sInputBoxAnswer = "123" Then
Select
Case $var = 3
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start", "REG_DWORD", "00000004")
Sleep(200)
$var1 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start")
If $var1 <> 4 Then
MsgBox(0, "错误", "操作失败")
;### Tidy Error: If/ElseIf statement without a then..
ElseIf $var1 = 4 Then
MsgBox(0, "成功", "保护已打开")
EndIf
Case $var = 4
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start", "REG_DWORD", "00000003")
$var1 = RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start")
If $var1 <> 3 Then
MsgBox(0, "错误", "操作失败")
;### Tidy Error: If/ElseIf statement without a then..
ElseIf $var1 = 3 Then
MsgBox(0, "成功", "保护已关闭")
EndIf
Case Else
RegWrite("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\USBSTOR", "Start", "REG_DWORD", "00000004")
;### Tidy Error -> "endselect" is closing previous "case"
EndSelect
;### Tidy Error -> "elseif" is closing previous "select"
ElseIf $sInputBoxAnswer <> "ootc" Then
MsgBox(4096, "", "密码错误,操作未被执行")
;### Tidy Error -> "endif" is closing previous "select"
EndIf
Case @error = 1 ;The Cancel button was pushed
Case @error = 3 ;The InputBox failed to open
;### Tidy Error -> "endselect" is closing previous "case"
EndSelect
#EndRegion --- CodeWizard generated code Start --- 本帖最后由 shqf 于 2010-3-11 22:11 编辑
一方要禁用,一方要启用,双方比的是智慧。技术很重要,有时换个思路也能取到不错的效果。10楼的方法我曾用过,但插入U盘后会在设备管理器中出现一个问号,只要重新安装一下就可启用USB移动存储设备,所以很快被人破解了。还有他人或从网上下个regedit.exe,或从网上邻居拷一个,再在注册表相应位置把4改成3就行了。7楼的代码对我而言有点深了,看不大懂,而我的系统把硬盘是当作一个移动盘的,不敢试。还有要禁用的U盘盘符是固定的? 如果是的话,那要是有多台电脑要禁就不方便了,或插入两个U盘会怎样呢?。
以下是我用AU3编的一个USB移动存储设备管理程序,不影响USB鼠标、键盘、打印机等设备的接入。就技术而言比以上两个程序要简单多,只是改注册表两处。要是你能找到这二个修改处,就破解了,不过你能找到吗?或化多少时间才能找到?不要用反编译的方法,因为谁要是需要,我可以公开思路或源码的(注意禁用后重启系统再看看禁用的效果,启用的口令是456789,郁闷的是360杀毒最近把它报为Gen:Trojan.Heur.AutoIT.Oq3@b4tlMcbj木马了)。
..如果只是注册表操作禁用USB的话,用监控注册表的办法,不就直接找到修改过的地方了么。。 这个程序是菜鸟编的,用来对付菜鸟。找到答案的人是我这个菜鸟眼中的高手,但要等真正找到以后。从思路到找到答案有时也不是一帆风顺的。 回复 13# shqf
O-0 3-4 呵呵 回复 2# llztt
pursole - -||| 这果真算是一个无聊的名字,但比起pusofalse,离“至极”的境界还差得远。无聊至极的人总该有一个无聊至极的名称相配,我决定无视pursole~
页:
[1]
2