无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
楼主: 仙乃日
打印 上一主题 下一主题

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

    [复制链接]
31#
发表于 2010-7-26 15:41:32 | 只看该作者
好东西,楼主 辛苦了.
下载试用了一下,能够解决srs问题,只是不支持驱动压缩,要是能够支持*.SY_就更方便了。谢谢...
回复

使用道具 举报

32#
发表于 2010-7-26 16:49:15 | 只看该作者
好啊,这个东东好!谢谢分享
回复

使用道具 举报

33#
发表于 2010-7-26 17:18:28 | 只看该作者
原帖由 kgb3000 于 2010-7-25 22:08 发表
好东西,建议楼主加入以下功能:PE下安装XP,XP安装程序复制完文件后,加入SRS驱动注入功能,这样就很方便了。

这时还没有普通注册表供注入。这时的“注入”更多地类似于集成。

一种现成的办法是,PE下安装原版XP,XP安装程序复制完文件后,重启时启动F6模块:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=169137&extra=page%3D2

选“仿真F6驱动软盘后串接菜单”,待完成驱动软盘仿真后,选有关转硬盘启动的适当菜单项转到硬盘启动即可。
如此免集成、免注入,不动原版、不动硬盘。
回复

使用道具 举报

34#
发表于 2010-7-26 18:17:23 | 只看该作者
要是能够支持*.SY_就更好了,因很多PE,包括如水的14。66版,都没有vmscsi.sys文件,期待啊。。。。。。
回复

使用道具 举报

35#
发表于 2010-7-26 18:40:25 | 只看该作者
支持鲜奶。
回复

使用道具 举报

36#
发表于 2010-7-26 18:59:13 | 只看该作者
感谢仙大
收藏了
回复

使用道具 举报

37#
发表于 2010-7-26 19:06:29 | 只看该作者
原帖由 <i>pseudo</i> 于 2010-7-26 17:18 发表
这时还没有普通注册表供注入。这时的“注入”更多地类似于集成。<br />
<br />
一种现成的办法是,PE下安装原版XP,XP安装程序复制完文件后,重启时启动F6模块:<br />
http://bbs.wuyou.net/forum.php?m ... tid=169137&extr ...
<br />

p大说过要提供一个通用PE SRS注入工具的,一直在等
回复

使用道具 举报

38#
发表于 2010-7-26 19:09:01 | 只看该作者
问个问题,如果PE未包含新式硬盘的驱动,那PE还能启动吗?或者只是PE能启动但看不到硬盘
回复

使用道具 举报

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


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

使用道具 举报

40#
发表于 2010-7-26 19:37:36 | 只看该作者
原帖由 <i>peace</i> 于 2010-7-26 12:47 发表
这个就是你需要的...<br />
95707<br />
http://peace.edudisk.cn/down_34942.aspx
<br />

谢谢,收藏备用。
很多时候安装原版XP时用得着
回复

使用道具 举报

41#
发表于 2010-7-26 20:24:34 | 只看该作者
原帖由 快雪时晴 于 2010-7-26 19:06 发表
p大说过要提供一个通用PE SRS注入工具的,一直在等

我也在等高人出手,拿现成的。
原帖由 yigeren 于 2010-7-25 18:23 发表
这种可以简单操作的不错,0PE的太麻烦,要提取出来到别的PE用也麻烦

0PE在PE下注入驱动用的是一个几KB的图形界面程序,单击快捷方式运行,点一次鼠标确定即完成,何来麻烦?

说麻烦估计是没用过,或者跟别的注入程序搞混了。

当然,要提取出来到别的PE运行,离开0PE环境,是有点麻烦。
回复

使用道具 举报

42#
发表于 2010-7-26 21:18:29 | 只看该作者
原帖由 快雪时晴 于 2010-7-26 19:09 发表
问个问题,如果PE未包含新式硬盘的驱动,那PE还能启动吗?或者只是PE能启动但看不到硬盘

没驱动,可以启动PE
看不见硬盘,可以在PE下安装驱动,这类工具我收集整理过,并提供了
使用说明.
回复

使用道具 举报

43#
发表于 2010-7-26 22:01:47 | 只看该作者
支持楼主,以前用楼主的系统
回复

使用道具 举报

44#
发表于 2010-7-26 22:12:15 | 只看该作者

回复 #41 pseudo 的帖子

P大说得很对,0PE在PE下注入驱动,只要单击快捷方式就可以,但很多时候要点多次继续。。。。
回复

使用道具 举报

45#
发表于 2010-7-26 22:23:52 | 只看该作者
原帖由 peace 于 2010-7-26 12:47 发表


这个就是你需要的...
95707
http://peace.edudisk.cn/down_34942.aspx

Thank you!对PE没什么要求吧?骨头版2003 PE不知行不行?

[ 本帖最后由 kgb3000 于 2010-7-26 22:29 编辑 ]
回复

使用道具 举报

46#
发表于 2010-7-28 20:04:04 | 只看该作者
等待楼主完善版本,的确很实用
回复

使用道具 举报

47#
发表于 2010-7-28 20:09:40 | 只看该作者
骨头版可以用,包括前面那个集成工具,
需要先启动MMC
回复

使用道具 举报

48#
发表于 2010-7-28 23:21:00 | 只看该作者
原帖由 dvd008 于 2010-7-28 20:09 发表
骨头版可以用,包括前面那个集成工具,
需要先启动MMC

经试验,骨头版直接可用,缺少一个attrib.exe文件而已。
回复

使用道具 举报

49#
发表于 2010-7-28 23:26:52 | 只看该作者
原帖由 pseudo 于 2010-7-26 17:18 发表

这时还没有普通注册表供注入。这时的“注入”更多地类似于集成。

一种现成的办法是,PE下安装原版XP,XP安装程序复制完文件后,重启时启动F6模块:
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=169137&extr ...

这个工具不错,如果能够支持直接从PE提取驱动那就更完美了,还有xp安装程序复制完文件后,c盘根目录有一个txtsetup.sif文件,
c:\$win_nt$.~bt目录下也有一个txtsetup.sif,以那一个为准?

[ 本帖最后由 kgb3000 于 2010-7-28 23:29 编辑 ]
回复

使用道具 举报

50#
发表于 2010-7-29 09:29:41 | 只看该作者
支持一下原创,希望分享一下原理
回复

使用道具 举报

51#
发表于 2010-7-29 09:52:52 | 只看该作者

回复 #49 kgb3000 的帖子

不知道以那一个txtsetup.sif为准。此法不看硬盘内容,也不主动去修改硬盘的东西。

把pe的txtsetup.sif文件和drivers目录直接打包为zip格式文件即成可用驱动包。
如果某pe认硬盘,用其驱动包仿真驱动软盘,一般也能使安装程序认硬盘。还能使其它原来不认硬盘的pe变得认硬盘。
回复

使用道具 举报

52#
发表于 2010-8-5 16:37:51 | 只看该作者
原帖由 仙乃日 于 2010-7-25 18:32 发表

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

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

使用道具 举报

53#
 楼主| 发表于 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
复制代码
回复

使用道具 举报

54#
 楼主| 发表于 2010-8-5 16:59:02 | 只看该作者
原帖由 bwfj 于 2010-8-5 16:37 发表

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

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

使用道具 举报

55#
发表于 2010-8-5 19:05:48 | 只看该作者
那个注册表重定向的资料我早已翻译了,在这
http://bbs.wuyou.net/forum.php?mod=viewthread&tid=133391&highlight=
如果直接用devcon用注册表重定向的技术删除驱动应该不能实现,还是自己分析注册表吧
回复

使用道具 举报

56#
 楼主| 发表于 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
的功能。
回复

使用道具 举报

57#
发表于 2010-8-5 20:53:08 | 只看该作者

回复 #56 仙乃日 的帖子

莫非你有方法,而且用au3编写?
如果是那强烈支持。
而且不但是注册表重定向,还有文件重定向

不过你应该要用到HOOK

[ 本帖最后由 zhhsh 于 2010-8-5 20:54 编辑 ]
回复

使用道具 举报

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

不过你应该要用到HOOK

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

使用道具 举报

59#
发表于 2010-8-5 21:01:43 | 只看该作者

回复 #58 仙乃日 的帖子

或许吧,runscanner要hook哪些函数可以通过用runscanner运行sreng
sreng会自动检测win32 api 是否正常,会有提示
回复

使用道具 举报

60#
发表于 2010-8-6 21:38:48 | 只看该作者
前来膜拜支持.......
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-27 09:46

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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