无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 112880|回复: 203
打印 上一主题 下一主题

PE下的驱动注入工具(201000901)更新!

    [复制链接]
跳转到指定楼层
1#
发表于 2010-7-25 16:28:13 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
VER:04 增加从指定目录注入第3方驱动的功能,修正Ver:0.2版本中的注入错误,完整了驱动清除功能。
欢迎使用的朋友报告其错误。最近被迫要完成800份居民健康档案,估计没多少时间去增加新功能啦,但
若的发现错误会尽快更新的。同级目录"NT5MSD"用于放置第3方厂商的大容量控制器驱动文件。












VER:04
离线驱动处理V0.4.part1.rar (185.55 KB, 下载次数: 4032) 离线驱动处理V0.4.part2.rar (185.55 KB, 下载次数: 3545) 离线驱动处理V0.4.part3.rar (47.34 KB, 下载次数: 2876)
==================
本工具是可以将PE中正使用的SRS驱动注入到目标系统中,能解决NT5.X系统启动7B蓝屏的问题。
自己第1次写界面,写得很丑陋。本工具只是自己写的离线部署工具的一个功能。
特别感谢D4llower的无私帮助!

2010_08_27 V0.2更新:
重写了核心代码,增加设备范例ID提示。使用环境不再局限于PE 1.X啦,PE 3.0下也能使用,目标系统支持NT5.0以上的32位系统。
驱动注入.part1.rar (195.31 KB, 下载次数: 5228)
驱动注入.part2.rar (195.31 KB, 下载次数: 4077)
驱动注入.part3.rar (17.77 KB, 下载次数: 2681)

[ 本帖最后由 仙乃日 于 2010-9-2 16:24 编辑 ]

评分

参与人数 4无忧币 +21 收起 理由
2012tlq1994 + 5 很给力!
zqm0550 + 1
2012chenyuwen + 5 赞一个!
66369 + 10 原创内容

查看全部评分

2#
 楼主| 发表于 2010-7-25 17:08:32 | 显示全部楼层
原帖由 haiuyan 于 2010-7-25 16:51 发表
XP和2003都支持吗?

支持Win2000、WINXP、WIN2003。
回复

使用道具 举报

3#
 楼主| 发表于 2010-7-25 18:32:04 | 显示全部楼层
原帖由 pseudo 于 2010-7-25 17:45 发表
这个比0PE半年前提供的PE下驱动注入工具体积大很多啊。

从所贴出的界面图,没看到驱动相关信息,似乎不便于用户了解情况。也许是没贴出来?

这个是用AU3写的所以体积有点大,驱动相关信息是没显示,下次改进一下。
这个工具还支持对目标系统的一些其他操作(如:可以备份或者清除目标系统的驱动,也可以预安装驱动到目标系统),核心写了,只是界面还没写完。
回复

使用道具 举报

4#
 楼主| 发表于 2010-7-26 09:17:21 | 显示全部楼层
原帖由 rabbit2008 于 2010-7-26 08:13 发表
哥们  你不是用程序 调用几个脚本完成的吧
那也太浪费表情了

没有调用任何第3方的程序或者脚本。
回复

使用道具 举报

5#
 楼主| 发表于 2010-7-26 09:21:08 | 显示全部楼层
原帖由 zhhsh 于 2010-7-26 08:17 发表
这个是否从PE直接获取磁盘控制器驱动?

如果是那怎样获取?

是从PE直接获取磁盘控制器驱动的。

具体流程看附件。
主要部份的代码.rar (904 Bytes, 下载次数: 354)
回复

使用道具 举报

6#
 楼主| 发表于 2010-7-26 12:25:09 | 显示全部楼层
原帖由 zhhsh 于 2010-7-26 11:59 发表
谢谢提供。
如果是win7等nt6.x系统应该不能这样获取

要先获取hwid,再从HKLM\SYSTEM\CurrentControlSet\Enum下获取相关服务驱动
像nv磁盘控制器应该不能获取SCSI\*这样硬件ID

嗯是不支持nt6.X系统。hwid和驱动服务是相关的,只要先确定一个就能找到另一个,具体如何找只是方法上的不同。
通过底层的东东来获取hwid,自己不懂,所以只能在注册表中转圈啦。如果你知道如何通过API来获取某一类型的,也希望得你的指教。
对于Win7等nt6.x的系统可以从HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DeviceClasses入手,先获取设备范例ID,再
获取驱动服务名。
回复

使用道具 举报

7#
 楼主| 发表于 2010-7-26 19:32:50 | 显示全部楼层
原帖由 suge 于 2010-7-26 18:17 发表
要是能够支持*.SY_就更好了,因很多PE,包括如水的14。66版,都没有vmscsi.sys文件,期待啊。。。。。。


如水的14。66版在启动时就删除了vmscsi.sys文件,可以自己修改那个配置文件。貌似驱动文件只要正在使用,就不太可能是.SY_格式。
回复

使用道具 举报

8#
 楼主| 发表于 2010-8-5 16:54:56 | 显示全部楼层
原帖由 tegl 于 2010-7-25 19:29 发表
支持原创,请提供源代码,谢谢~

完整的源码

  1. #Region ;**** 参数创建于 ACNWrapper_GUI ****
  2. #AutoIt3Wrapper_Version=Ver:0.1.2010.07.25
  3. #AutoIt3Wrapper_Icon=.\ico\1.ico
  4. #AutoIt3Wrapper_OutFile=C:\Documents and Settings\Administrator\桌面\离线驱动注入工具.exe
  5. #AutoIt3Wrapper_UseUPX=n
  6. #AutoIt3Wrapper_Res_FileVersion=0.1.2010.07.25
  7. #AutoIt3Wrapper_Res_Comment=本工具可将PE系统中正使用的SRS驱动注入到目标系统中。
  8. #AutoIt3Wrapper_Res_Description=本工具只能PE1.X环境下运行!目标系统暂时只支持WIN2000、WINXP、WIN2003。
  9. #AutoIt3Wrapper_Res_LegalCopyright=版权归仙乃日所有!
  10. #AutoIt3Wrapper_Run_Tidy=y
  11. #EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
  12. #include <ButtonConstants.au3>
  13. #include <EditConstants.au3>
  14. #include <GUIConstantsEx.au3>
  15. #include <StaticConstants.au3>
  16. #include <WindowsConstants.au3>
  17. #include <SetupApi.au3>
  18. #include <LocalSecurityAuthority.au3>
  19. If _WinAPI_CreateSemaphore(@ScriptName) <> 0 Then
  20. ;MsgBox(16,"error","程序已经运行!")
  21. Exit
  22. EndIf

  23. Global Const $SE_PRIVILEGE_ENABLED = 0x00000002
  24. Global $SYSTEMROOT, $n, $ControlSet
  25. Global $stp = 1
  26. If Not StringInStr(RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control", "SystemStartOptions"), "MININT") Then
  27. MsgBox(16, "离线驱动注入工具", "该程序只能在 windows PE 下运行!")
  28. Exit
  29. EndIf
  30. $Form1 = GUICreate("离线驱动注入工具  By 仙乃日", 450, 220, -1, -1)
  31. $Label1 = GUICtrlCreateLabel("", 35, 16, 400, 20)
  32. $Label2 = GUICtrlCreateLabel("", 45, 78, 70, 20)
  33. $Edit1 = GUICtrlCreateEdit("", 35, 40, 383, 129, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL), 0)
  34. GUICtrlSetData(-1, "Edit1")
  35. $Button1 = GUICtrlCreateButton("< 上一步[&B]", 200, 185, 89, 25, 0)
  36. $Button2 = GUICtrlCreateButton("下一步[&N] >", 325, 185, 89, 25, 0)
  37. $Button3 = GUICtrlCreateButton("打开", 290, 75, 40, 20)
  38. GUICtrlSetState($Button3, $gui_hide)
  39. $Button4 = GUICtrlCreateButton("确定注入", 150, 65, 150, 90, $WS_GROUP)
  40. GUICtrlSetFont(-1, 25, 400, 0)
  41. GUICtrlSetState($Button4, $gui_hide)
  42. $Input1 = GUICtrlCreateInput("", 105, 75, 180, 20)
  43. GUISetState(@SW_SHOW)
  44. step1(1)
  45. While 1
  46. $nMsg = GUIGetMsg()
  47. Switch $nMsg
  48.   Case $GUI_EVENT_CLOSE
  49.    Exit
  50.   Case $Button1
  51.    Call("step" & $stp, 0)
  52.    $stp -= 1
  53.    Call("step" & $stp, 1)
  54.   Case $Button2
  55.    If GUICtrlRead($Button2) = "完成[&F]" Then
  56.     Exit
  57.    EndIf
  58.    Call("step" & $stp, 0)
  59.    $stp += 1
  60.    Call("step" & $stp, 1)
  61.   Case $Button3
  62.    GUICtrlSetState($Button2, $gui_disable)
  63.    $SYSTEMROOT = FileSelectFolder("请选择目标系统目录,如:C:\Windows", "::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")
  64.    If Not @error Then
  65.     $ROOT = StringLeft($SYSTEMROOT, 2)
  66.     GUICtrlSetData($Input1, $SYSTEMROOT)
  67.     $SYSTEMROOT = GUICtrlRead($Input1)
  68.     If FileExists($SYSTEMROOT & "\system32\config\system") = 1 Then
  69.      GUICtrlSetState($Button2, $gui_enable)
  70.     Else
  71.      MsgBox(16, "提醒您,重新选择!", "貌似您所选择的目录不是有效的系统目录!")
  72.      ContinueLoop
  73.     EndIf
  74.    EndIf
  75.   Case $Button4
  76.    _REGLOADHIVE($SYSTEMROOT & "\system32\CONFIG\SYSTEM", "HKLM\hSYS")
  77.    _REGLOADHIVE($SYSTEMROOT & "\system32\CONFIG\SOFTWARE", "HKLM\xSoft")
  78.    $n = RegRead("HKEY_LOCAL_MACHINE\hSYS\Select", "Current")
  79.    If $n < 10 Then
  80.     $ControlSet = "ControlSet00" & $n
  81.    Else
  82.     $ControlSet = "ControlSet0" & $n
  83.    EndIf
  84.    GET_SCSI_driver()
  85.    _REGUNLOADHIVE("HKLM\hSYS")
  86.    _REGUNLOADHIVE("HKLM\xSoft")
  87.    GUICtrlSetState($Button1, $gui_disable)
  88.    GUICtrlSetState($Button4, $gui_hide)
  89.    GUICtrlSetState($Label1, $gui_hide)
  90.    GUICtrlCreateEdit("恭喜您!" & @CRLF & @CRLF & "驱动注入成功啦!", 35, 25, 250, 120, BitOR($ES_AUTOVSCROLL, $ES_AUTOHSCROLL, $ES_READONLY, $ES_WANTRETURN, $ES_AUTOVSCROLL, $ES_AUTOHSCROLL), 0)
  91.    GUICtrlSetFont(-1, 23, 400, 0)
  92. EndSwitch
  93. WEnd
  94. Func step1($x)
  95. If $x = 1 Then
  96.   GUICtrlSetState($Label2, $gui_hide)
  97.   GUICtrlSetState($Input1, $gui_hide)
  98.   GUICtrlSetState($Button1, $gui_disable)
  99.   GUICtrlSetState($Button2, $gui_disable)
  100.   GUICtrlSetData($Label1, "欢迎访问仙乃日博客(hi.baidu.com/hdj20030403/blog)!")
  101.   GUICtrlSetData($Edit1, @CRLF & "这是一个将PE系统使用中的SRS驱动,注入到目标系统中的工具。如果你" & _
  102.     @CRLF & @CRLF & "所使用的PE在启动时就删除了SRS驱动文件,那么注入将失败。本工具不" & @CRLF & @CRLF & "会改写目标系统即有驱动文件。虽竭诚为之,但限于水平,疏漏、谬误之" & _
  103.     @CRLF & @CRLF & "处在所难免,望使用者见谅。作者不对由此工具引起的任何问题负责。")
  104.   Sleep(900)
  105.   GUICtrlSetState($Button2, $gui_enable)
  106. Else
  107.   GUICtrlSetState($Button1, $gui_enable)
  108. EndIf
  109. EndFunc   ;==>step1
  110. Func Step2($x)
  111. If $x = 1 Then
  112.   GUICtrlSetState($Button3, $gui_show)
  113.   GUICtrlSetState($Button4, $gui_hide)
  114.   GUICtrlSetState($Button2, $gui_disable)
  115.   GUICtrlSetData($Label1, "请选择目标系统所在的目录,默认为C:\Windows")
  116.   GUICtrlSetData($Label2, "系统路径:")
  117.   GUICtrlSetState($Label2, $gui_show)
  118.   GUICtrlSetState($Input1, $gui_show)
  119.   GUICtrlSetState($Edit1, $gui_hide)
  120.   If FileExists("C:\boot.ini") = 1 And FileExists("C:\windows\system32\ntdll.dll") = 1 Then
  121.    $SYSTEMROOT = "C:\Windows"
  122.    GUICtrlSetData($Input1, $SYSTEMROOT)
  123.   EndIf
  124.   Sleep(700)
  125.   $SYSTEMROOT = GUICtrlRead($Input1)
  126.   If FileExists($SYSTEMROOT & "\system32\config\system") = 1 Then
  127.    GUICtrlSetState($Button2, $gui_enable)
  128.   Else
  129.    MsgBox(16, "提醒您,重新选择!", "貌似您所选择的目录不是有效的系统目录!")
  130.   EndIf
  131. Else
  132.   GUICtrlSetState($Edit1, $gui_show)
  133.   GUICtrlSetState($Label2, $gui_hide)
  134.   GUICtrlSetState($Input1, $gui_hide)
  135. EndIf
  136. EndFunc   ;==>Step2
  137. Func step3($x)
  138. If $x = 1 Then
  139.   GUICtrlSetState($Edit1, $gui_hide)
  140.   GUICtrlSetData($Label1, "按“确定注入”键后将自动注入驱动。本工具暂不提供恢复功能!")
  141.   GUICtrlSetState($Label2, $gui_hide)
  142.   GUICtrlSetState($Input1, $gui_hide)
  143.   GUICtrlSetState($Button3, $gui_hide)
  144.   GUICtrlSetState($Button4, $gui_show)
  145.   GUICtrlSetData($Button2, "完成[&F]")
  146. Else
  147.   GUICtrlSetState($Button3, $gui_show)
  148.   GUICtrlSetState($Button2, $gui_disable)
  149.   GUICtrlSetState($Button3, $gui_show)
  150.   GUICtrlSetData($Button2, "下一步[&N] >")
  151.   GUICtrlSetData($Label1, "请选择目标系统所在的目录,默认为C:\Windows")
  152.   GUICtrlSetData($Label2, "系统路径:")
  153.   GUICtrlSetState($Label2, $gui_show)
  154.   GUICtrlSetState($Input1, $gui_show)
  155.   GUICtrlSetState($Edit1, $gui_hide)
  156.   If FileExists("C:\boot.ini") = 1 And FileExists("C:\windows\system32\ntdll.dll") = 1 Then
  157.    $SYSTEMROOT = "C:\Windows"
  158.    GUICtrlSetData($Input1, $SYSTEMROOT)
  159.   EndIf
  160.   $SYSTEMROOT = GUICtrlRead($Input1)
  161.   If FileExists($SYSTEMROOT & "\system32\config\system") = 1 Then
  162.    GUICtrlSetState($Button2, $gui_enable)
  163.   Else
  164.    MsgBox(16, "提醒您,重新选择!", "貌似您所选择的目录不是有效的系统目录!")
  165.   EndIf
  166. EndIf
  167. EndFunc   ;==>step3
  168. Func GET_SCSI_driver()
  169. Local $i = 1
  170. Local $ScsiPort, $scsiname, $ImagePath, $scsienum
  171. While 1
  172.   $ScsiPort = RegEnumKey("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi", $i)
  173.   If @error Then ExitLoop
  174.   $scsiname = RegRead("HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\Scsi" & $ScsiPort, "Driver")
  175.   If $scsiname <> "atapi" Then
  176.    $ImagePath = StringStripWS(RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $scsiname, "ImagePath"), 3)
  177.    If FileExists(@SystemDir & "\DRIVERS" & $ImagePath) = 0 Then
  178.     _REGUNLOADHIVE("HKLM\hSYS")
  179.     _REGUNLOADHIVE("HKLM\xSoft")
  180.     MsgBox(4096, "警告", "PE下的" & @SystemDir & "\DRIVERS" & $ImagePath & "文件不存在,驱动注入失败!")
  181.     Exit
  182.    Else
  183.     FileCopy(@SystemDir & "\DRIVERS" & $ImagePath, $SYSTEMROOT & "\system32\DRIVERS" & $ImagePath, 9)
  184.     $scsienum = StringStripWS(RegRead("HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services" & $scsiname & "\Enum", "0"), 3)
  185.     If StringLeft($scsienum, 4) = "PCI" Then
  186.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "pci#" & StringMid($scsienum, 5, 17), "ClassGUID", "REG_SZ", "{4D36E97B-E325-11CE-BFC1-08002BE10318}")
  187.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "pci#" & StringMid($scsienum, 5, 17), "Service", "REG_SZ", $scsiname)
  188.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "pci#" & StringMid($scsienum, 5), "ClassGUID", "REG_SZ", "{4D36E97B-E325-11CE-BFC1-08002BE10318}")
  189.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "pci#" & StringMid($scsienum, 5), "Service", "REG_SZ", $scsiname)
  190.     ElseIf StringLeft($scsienum, 5) = "SCSI" Then
  191.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "SCSI#" & StringMid($scsienum, 6, 17), "ClassGUID", "REG_SZ", "{4D36E97B-E325-11CE-BFC1-08002BE10318}")
  192.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "SCSI#" & StringMid($scsienum, 6, 17), "Service", "REG_SZ", $scsiname)
  193.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "SCSI#" & StringMid($scsienum, 6), "ClassGUID", "REG_SZ", "{4D36E97B-E325-11CE-BFC1-08002BE10318}")
  194.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & "SCSI#" & StringMid($scsienum, 6), "Service", "REG_SZ", $scsiname)
  195.     Else
  196.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & $scsienum, "ClassGUID", "REG_SZ", "{4D36E97B-E325-11CE-BFC1-08002BE10318}")
  197.      RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Control\CriticalDeviceDatabase" & $scsienum, "Service", "REG_SZ", $scsiname)
  198.     EndIf
  199.     RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Services" & $scsiname, "ImagePath", "REG_SZ", "system32\DRIVERS" & $ImagePath)
  200.     RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Services" & $scsiname, "ErrorControl", "REG_DWORD", "0x00000001")
  201.     RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Services" & $scsiname, "Group", "REG_SZ", "scsi miniport")
  202.     RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Services" & $scsiname, "Start", "REG_DWORD", "0x00000000")
  203.     RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Services" & $scsiname, "Tag", "REG_DWORD", "0x00000001")
  204.     RegWrite("HKEY_LOCAL_MACHINE\hSYS" & $ControlSet & "\Services" & $scsiname, "Type", "REG_DWORD", "0x00000001")
  205.    EndIf
  206.   EndIf
  207.   $i += 1
  208. WEnd
  209. EndFunc   ;==>GET_SCSI_driver
  210. Func _REGLOADHIVE($SFILE, $SKEY)
  211. Local $AVARRAY = SPLIT_SROOTKEY($SKEY)
  212. Local $HKEY = REGCONNECTREGISTRY($AVARRAY[0], $AVARRAY[1])
  213. Local $AVCURR[2][2] = [[$SE_RESTORE_NAME, $SE_PRIVILEGE_ENABLED],[$SE_BACKUP_NAME, $SE_PRIVILEGE_ENABLED]]
  214. Local $AVPREV = _SETPRIVILEGE($AVCURR)
  215. Local $AVRLH = DllCall("Advapi32.dll", "long", "RegLoadKey", "hwnd", $HKEY, "str", $AVARRAY[2], "str", $SFILE)
  216. _SETPRIVILEGE($AVPREV)
  217. REGCLOSEKEY($HKEY)
  218. Return SetError($AVRLH[0], 0, Number($AVRLH[0] = 0))
  219. EndFunc   ;==>_REGLOADHIVE
  220. Func _REGUNLOADHIVE($SKEY)
  221. Local $AVARRAY = SPLIT_SROOTKEY($SKEY)
  222. Local $HKEY = REGCONNECTREGISTRY($AVARRAY[0], $AVARRAY[1])
  223. Local $AVCURR[2][2] = [[$SE_RESTORE_NAME, $SE_PRIVILEGE_ENABLED],[$SE_BACKUP_NAME, $SE_PRIVILEGE_ENABLED]]
  224. Local $AVPREV = _SETPRIVILEGE($AVCURR)
  225. Local $AVRUH = DllCall("Advapi32.dll", "long", "RegUnLoadKey", "hwnd", $HKEY, "str", $AVARRAY[2])
  226. _SETPRIVILEGE($AVPREV)
  227. REGCLOSEKEY($HKEY)
  228. Return SetError($AVRUH[0], 0, Number($AVRUH[0] = 0))
  229. EndFunc   ;==>_REGUNLOADHIVE
  230. Func REGCLOSEKEY($HKEY)
  231. Local $AVRCK = DllCall("Advapi32.dll", "long", "RegCloseKey", "hwnd", $HKEY)
  232. Return SetError($AVRCK[0], 0, Number($AVRCK[0] = 0))
  233. EndFunc   ;==>REGCLOSEKEY
  234. Func REGCONNECTREGISTRY($SCOMPUTER, $HKEY)
  235. Local $AVRCR = DllCall("Advapi32.dll", "long", "RegConnectRegistry", "str", $SCOMPUTER, "hwnd", $HKEY, "hwnd*", 0)
  236. Return SetError($AVRCR[0], 0, $AVRCR[3])
  237. EndFunc   ;==>REGCONNECTREGISTRY
  238. Func SPLIT_SROOTKEY($SROOTKEY)
  239. Local Const $HKEY_CLASSES_ROOT = 0x80000000
  240. Local Const $HKEY_CURRENT_USER = 0x80000001
  241. Local Const $HKEY_LOCAL_MACHINE = 0x80000002
  242. Local Const $HKEY_USERS = 0x80000003
  243. Local Const $HKEY_CURRENT_CONFIG = 0x80000005
  244. Local $AVHKEY[5][3] = [["HKCR", "HKEY_CLASSES_ROOT", $HKEY_CLASSES_ROOT],["HKCU", "HKEY_CURRENT_USER", $HKEY_CURRENT_USER],["HKLM", "HKEY_LOCAL_MACHINE", $HKEY_LOCAL_MACHINE],["HKU", "HKEY_USERS", $HKEY_USERS],["HKCC", "HKEY_CURRENT_CONFIG", $HKEY_CURRENT_CONFIG]]
  245. Local $AVARRAY[3]
  246. If StringInStr($SROOTKEY, "\") = 1 Then
  247.   Local $ASCOMPUTER = StringRegExp($SROOTKEY, "\\\\[^\\]*\", 1)
  248.   If Not @error Then
  249.    $AVARRAY[0] = StringTrimRight($ASCOMPUTER[0], 1)
  250.    $SROOTKEY = StringReplace($SROOTKEY, $ASCOMPUTER[0], "", 1)
  251.   EndIf
  252. EndIf
  253. If StringInStr($SROOTKEY, "") = 1 Or StringInStr($SROOTKEY, "", 0, -1) = StringLen($SROOTKEY) Or StringInStr($SROOTKEY, "\") Then
  254.   $AVARRAY[0] = ""
  255.   Return $AVARRAY
  256. Else
  257.   Local $ASSPLIT = StringSplit($SROOTKEY, "")
  258.   For $i = 0 To UBound($AVHKEY) - 1
  259.    If $ASSPLIT[1] = $AVHKEY[$i][0] Or $ASSPLIT[1] = $AVHKEY[$i][1] Then
  260.     $AVARRAY[1] = $AVHKEY[$i][2]
  261.     ExitLoop
  262.    EndIf
  263.   Next
  264.   If $AVARRAY[1] = "" Then
  265.    $AVARRAY[0] = ""
  266.    Return $AVARRAY
  267.   EndIf
  268.   For $i = 2 To $ASSPLIT[0] - 1
  269.    $AVARRAY[2] &= $ASSPLIT[$i] & ""
  270.   Next
  271.   If $ASSPLIT[0] > 1 Then $AVARRAY[2] &= $ASSPLIT[$ASSPLIT[0]]
  272. EndIf
  273. Return $AVARRAY
  274. EndFunc   ;==>SPLIT_SROOTKEY

  275. Func _SETPRIVILEGE($AVPRIVILEGE)
  276. Local $IDIM = UBound($AVPRIVILEGE, 0), $AVPREVSTATE[1][2]
  277. If Not ($IDIM <= 2 And UBound($AVPRIVILEGE, $IDIM) = 2) Then Return SetError(1300, 0, $AVPREVSTATE)
  278. If $IDIM = 1 Then
  279.   Local $AVTEMP[1][2]
  280.   $AVTEMP[0][0] = $AVPRIVILEGE[0]
  281.   $AVTEMP[0][1] = $AVPRIVILEGE[1]
  282.   $AVPRIVILEGE = $AVTEMP
  283.   $AVTEMP = 0
  284. EndIf
  285. Local $K, $TAGTP = "dword", $ITOKENS = UBound($AVPRIVILEGE, 1)
  286. Do
  287.   $K += 1
  288.   $TAGTP &= ";dword;long;dword"
  289. Until $K = $ITOKENS
  290. Local $TCURRSTATE, $TPREVSTATE, $PPREVSTATE, $TLUID, $HADVAPI32, $HKERNEL32, $AHGCP, $AVOPT, $AIGLE
  291. $TCURRSTATE = DllStructCreate($TAGTP)
  292. $TPREVSTATE = DllStructCreate($TAGTP)
  293. $PPREVSTATE = DllStructGetPtr($TPREVSTATE)
  294. $TLUID = DllStructCreate("dword;long")
  295. DllStructSetData($TCURRSTATE, 1, $ITOKENS)
  296. $HADVAPI32 = DllOpen("Advapi32.dll")
  297. For $i = 0 To $ITOKENS - 1
  298.   DllCall($HADVAPI32, "int", "LookupPrivilegeValue", "str", "", "str", $AVPRIVILEGE[$i][0], "ptr", DllStructGetPtr($TLUID))
  299.   DllStructSetData($TCURRSTATE, 3 * $i + 2, DllStructGetData($TLUID, 1))
  300.   DllStructSetData($TCURRSTATE, 3 * $i + 3, DllStructGetData($TLUID, 2))
  301.   DllStructSetData($TCURRSTATE, 3 * $i + 4, $AVPRIVILEGE[$i][1])
  302. Next
  303. $HKERNEL32 = DllOpen("Kernel32.dll")
  304. $AHGCP = DllCall($HKERNEL32, "hwnd", "GetCurrentProcess")
  305. $AVOPT = DllCall($HADVAPI32, "int", "OpenProcessToken", "hwnd", $AHGCP[0], "dword", BitOR($TOKEN_ADJUST_PRIVILEGES, $TOKEN_QUERY), "hwnd*", 0)
  306. DllCall($HADVAPI32, "int", "AdjustTokenPrivileges", "hwnd", $AVOPT[3], "int", False, "ptr", DllStructGetPtr($TCURRSTATE), "dword", DllStructGetSize($TCURRSTATE), "ptr", $PPREVSTATE, "dword*", 0)
  307. $AIGLE = DllCall($HKERNEL32, "dword", "GetLastError")
  308. DllCall($HKERNEL32, "int", "CloseHandle", "hwnd", $AVOPT[3])
  309. DllClose($HKERNEL32)
  310. Local $ICOUNT = DllStructGetData($TPREVSTATE, 1)
  311. If $ICOUNT > 0 Then
  312.   Local $PLUID, $AVLPN, $TNAME, $AVPREVSTATE[$ICOUNT][2]
  313.   For $i = 0 To $ICOUNT - 1
  314.    $PLUID = $PPREVSTATE + 12 * $i + 4
  315.    $AVLPN = DllCall($HADVAPI32, "int", "LookupPrivilegeName", "str", "", "ptr", $PLUID, "ptr", 0, "dword*", 0)
  316.    $TNAME = DllStructCreate("char[" & $AVLPN[4] & "]")
  317.    DllCall($HADVAPI32, "int", "LookupPrivilegeName", "str", "", "ptr", $PLUID, "ptr", DllStructGetPtr($TNAME), "dword*", DllStructGetSize($TNAME))
  318.    $AVPREVSTATE[$i][0] = DllStructGetData($TNAME, 1)
  319.    $AVPREVSTATE[$i][1] = DllStructGetData($TPREVSTATE, 3 * $i + 4)
  320.   Next
  321. EndIf
  322. DllClose($HADVAPI32)
  323. Return SetError($AIGLE[0], 0, $AVPREVSTATE)
  324. EndFunc   ;==>_SETPRIVILEGE
  325. Func _WinAPI_CreateSemaphore($sName);阻止重复运行
  326. Local $Sema, $Turn
  327. $Sema = DllCall("Kernel32.dll", "ptr", "CreateSemaphore", "ptr", 0, "long", True, "long", True, "str", $sName)
  328. $Turn = DllCall("Kernel32.dll", "int", "WaitForSingleObject", "ptr", $Sema[0], "int", False)
  329. Return $Turn[0]
  330. EndFunc   ;==>_WinAPI_CreateSemaphore
复制代码
回复

使用道具 举报

9#
 楼主| 发表于 2010-8-5 16:59:02 | 显示全部楼层
原帖由 bwfj 于 2010-8-5 16:37 发表

不知楼主什么时候更新可以实现这个功能:清除目标系统的驱动

先前写的是调用第3方软件,现在想更改成纯粹的AU3的,对于自己来说是比较难的。
自己也不知道啥时候才能完成。主要是注册表重定向的技术,很难找着帮助的资料。
如果是在部署的时候来清除幽灵驱动或者残留的无用的驱动自己很早就完成了。
回复

使用道具 举报

10#
 楼主| 发表于 2010-8-5 19:38:07 | 显示全部楼层
原帖由 zhhsh 于 2010-8-5 19:05 发表
那个注册表重定向的资料我早已翻译了,在这
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=133391&highlight=
如果直接用devcon用注册表重定向的技术删除驱动应该不能实现,还是自己分析注册表吧

使用Runscanner的话  已经能实现了,自己现在在写的就是想实现类似Runscanner
的功能。
回复

使用道具 举报

11#
 楼主| 发表于 2010-8-5 20:56:50 | 显示全部楼层
原帖由 zhhsh 于 2010-8-5 20:53 发表
莫非你有方法,而且用au3编写?
如果是那强烈支持。
而且不但是注册表重定向,还有文件重定向

不过你应该要用到HOOK

注册表重定向是要用到hook的,文件重定向不一定要用到hook的。
回复

使用道具 举报

12#
 楼主| 发表于 2010-8-27 17:03:26 | 显示全部楼层
20100827小更新!
1.重写核心代码。
2.增加清除目标系统SRS驱动代码,界面还没写。
3.增加了从指定的驱动包注入的核心代码,界面也还没写。
回复

使用道具 举报

13#
 楼主| 发表于 2010-8-28 12:33:05 | 显示全部楼层
原帖由 66369 于 2010-8-27 17:34 发表



界面下点工夫.

镶嵌"BY 仙乃日"即可...其他可省略.

供参考.


原先的界面是参考别人的,所以文字信息多了一些,等有空自己重写下界面。
回复

使用道具 举报

14#
 楼主| 发表于 2010-8-29 19:48:53 | 显示全部楼层
原帖由 p3506 于 2010-8-29 11:46 发表
下载测试。谢谢分享!

经测试,PE下提示注入成功,但启动XP系统时仍然出现蓝屏


如果能够,请上传能正常启动的驱动和说明所使用的PE。
蓝屏更多的是驱动本身的问题。
回复

使用道具 举报

15#
 楼主| 发表于 2010-8-29 19:52:36 | 显示全部楼层











[ 本帖最后由 仙乃日 于 2010-9-1 21:32 编辑 ]
回复

使用道具 举报

16#
 楼主| 发表于 2010-8-30 16:23:56 | 显示全部楼层
原帖由 vocalsir 于 2010-8-30 15:35 发表
支持,请提供源代码,谢谢~

在53楼有源码。http://bbs.wuyou.net/forum.php?mod=viewthread&tid=172415&extra=page%3D1&page=6
回复

使用道具 举报

17#
 楼主| 发表于 2010-9-1 21:34:46 | 显示全部楼层
原帖由 p3506 于 2010-8-30 07:49 发表

我测试用的PE是H3的全功能版 H3CD100705,主板是P45的.

Ver:0.2时由于重写了核心代码,又生成了些新错误。谢谢反馈。
Ver:04自己已经初步测试通过,欢迎再次试用。
回复

使用道具 举报

18#
 楼主| 发表于 2010-9-5 08:24:05 | 显示全部楼层

回复 #114 12077613 的帖子

VER:0.4改名为“离线驱动处理”工具。
不完全等同于在PE下安装XP的驱动。
第3方驱动是放进“NT5MSD”目录下就可,VM目录是放置vmware驱动。
暂时不完全支持驱动自带的setup.exe安装程序。
回复

使用道具 举报

19#
 楼主| 发表于 2010-9-5 12:21:58 | 显示全部楼层
原帖由 cjzzz 于 2010-9-5 11:24 发表
看上去应该不错, 还没试用,   以前用的 DriverInjection和 Inf2Reg   都不太完美 不能完全自动操作

有个建议,能不能添加个标准的IDE驱动选项

这个功能原本是写好了,只是担心界面太杂就去掉了。通过安装第3方驱动的那候选项也可以安装IDE驱动的。
回复

使用道具 举报

20#
 楼主| 发表于 2010-9-6 09:47:10 | 显示全部楼层

回复 #118 sy235688 的帖子

正注入的时候,将“完成”键设成灰色是可以的。注入的速度一般很快,进度条似乎作用不大。至于第3方的大容量存储控制器驱动可以自己到厂商主页去下载,才是最适合的吧。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-5-3 07:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表