无忧启动论坛

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

[原创] 注册表导入工具,包含PE和挂载的

  [复制链接]
跳转到指定楼层
1#
发表于 5 天前 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 nnkoll 于 2025-5-26 17:13 编辑

每次修改PE或者系统,导入的注册表总是需要手动挂载,经过几天的研究,研究出一个程序,具体源码如下:
  1. #cs ----------------------------------------------------------------------------

  2. AutoIt Version: 3.3.16.1
  3. Author:         myName

  4. Script Function:
  5.         Template AutoIt script.

  6. #ce ----------------------------------------------------------------------------

  7. ; Script Start - Add your code below here
  8. #include <MsgBoxConstants.au3>
  9. #include <FileConstants.au3>
  10. #include <WinAPIFiles.au3>

  11. ; 检查 sed.exe 是否存在
  12. Global $sed = @ScriptDir & "\sed.exe"
  13. If Not FileExists($sed) Then
  14.     Exit
  15. EndIf

  16. ; 自动检测系统盘,在PE下导入修改的注册表
  17. Global $systemDrive = ""
  18. For $i = Asc("A") To Asc("Z")
  19.     Local $drive = Chr($i) & ":"
  20.     If FileExists($drive & "\Windows\System32\config\SYSTEM") And _
  21.        (FileExists($drive & "\bootmgr") Or FileExists($drive & "\Windows\System32\winload.efi")) Then
  22.         $systemDrive = $drive
  23.         ExitLoop
  24.     EndIf
  25. Next

  26. If $systemDrive = "" Then
  27.     Exit
  28. EndIf

  29. ; 加载注册表
  30. Global $regSystem = $systemDrive & "\Windows\System32\config\SYSTEM"
  31. Global $regSoftware = $systemDrive & "\Windows\System32\config\SOFTWARE"
  32. Global $regDefault = $systemDrive & "\Windows\System32\config\DEFAULT"
  33. Global $regUserDat = $systemDrive & "\Users\Default\NTUSER.DAT"
  34. RunWait('reg load HKLM\TempSystem "' & $regSystem & '"')
  35. RunWait('reg load HKLM\TempSoftware "' & $regSoftware & '"')
  36. RunWait('reg load HKU\TempDefault "' & $regDefault & '"')
  37. RunWait('reg load HKU\TempUser "' & $regUserDat & '"')

  38. ; 创建临时目录存储处理后的 .reg 文件
  39. Global $tmpDir = @TempDir & "\regtemp"
  40. If FileExists($tmpDir) Then DirRemove($tmpDir, 1)
  41. DirCreate($tmpDir)

  42. ; 处理注册表文件导入
  43. _RegProcess("system.reg", "s/HKEY_LOCAL_MACHINE\\SYSTEM/HKEY_LOCAL_MACHINE\\TempSystem/g")
  44. _RegProcess("software.reg", "s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\TempSoftware/g")
  45. _RegProcess("default_user.reg", "s/HKEY_USERS\\.DEFAULT/HKEY_USERS\\TempDefault/g")
  46. _RegProcess("default_user.reg", "s/HKEY_CURRENT_USER/HKEY_USERS\\TempUser/g")
  47. _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_LOCAL_MACHINE\\TempSoftware\\Classes/g")
  48. _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempDefault\\Software\\Classes/g")
  49. _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempUser\\Software\\Classes/g")

  50. ; 卸载临时注册表
  51. RunWait("reg unload HKLM\TempSystem")
  52. RunWait("reg unload HKLM\TempSoftware")
  53. RunWait("reg unload HKU\TempDefault")
  54. RunWait("reg unload HKU\TempUser")

  55. ; 如果 NTUSER.DAT 存在且不是 NTUSER.MAN,则重命名
  56. If FileExists($regUserDat) And Not FileExists($systemDrive & "\Users\Default\NTUSER.MAN") Then
  57.     FileMove($regUserDat, $systemDrive & "\Users\Default\NTUSER.MAN", $FC_OVERWRITE)
  58. EndIf


  59. ; 注册表处理函数
  60. Func _RegProcess($filename, $sedPattern)
  61.     Local $srcFile = @ScriptDir & "" & $filename
  62.     If Not FileExists($srcFile) Then Return
  63.     Local $outFile = $tmpDir & "" & $filename
  64.     RunWait('"' & $sed & '" "' & $sedPattern & '" "' & $srcFile & '" > "' & $outFile & '"', "", @SW_HIDE)
  65.     RunWait('regedit /s "' & $outFile & '"', "", @SW_HIDE)
  66. EndFunc
复制代码
  1. #cs ----------------------------------------------------------------------------

  2. AutoIt Version: 3.3.16.1
  3. Author:         myName

  4. Script Function:
  5.         Template AutoIt script.

  6. #ce ----------------------------------------------------------------------------

  7. ; Script Start - Add your code below here
  8. #include <MsgBoxConstants.au3>
  9. #include <FileConstants.au3>
  10. #include <WinAPIFiles.au3>
  11. #include <File.au3>

  12. ; 检查 sed.exe 是否存在
  13. Global $sed = @ScriptDir & "\sed.exe"
  14. If Not FileExists($sed) Then Exit

  15. ; 选择挂载系统所在的根目录(如 D:\MountedWindows)
  16. Global $systemFolder = FileSelectFolder("请选择挂载系统的根目录(含 Windows 文件夹)", "", 2)
  17. If @error Or $systemFolder = "" Then Exit

  18. ; 构建注册表文件路径
  19. Global $regSystem   = $systemFolder & "\Windows\System32\config\SYSTEM"
  20. Global $regSoftware = $systemFolder & "\Windows\System32\config\SOFTWARE"
  21. Global $regDefault  = $systemFolder & "\Windows\System32\config\DEFAULT"

  22. ; 允许 NTUSER.DAT 或 NTUSER.MAN 任意一个存在
  23. Global $regUserDat  = ""
  24. If FileExists($systemFolder & "\Users\Default\NTUSER.DAT") Then
  25.     $regUserDat = $systemFolder & "\Users\Default\NTUSER.DAT"
  26. ElseIf FileExists($systemFolder & "\Users\Default\NTUSER.MAN") Then
  27.     $regUserDat = $systemFolder & "\Users\Default\NTUSER.MAN"
  28. Else
  29.     Exit
  30. EndIf

  31. ; 加载脱机注册表
  32. RunWait('reg load HKLM\TempSystem "' & $regSystem & '"')
  33. RunWait('reg load HKLM\TempSoftware "' & $regSoftware & '"')
  34. RunWait('reg load HKU\TempDefault "' & $regDefault & '"')
  35. RunWait('reg load HKU\TempUser "' & $regUserDat & '"')

  36. ; 创建临时目录处理 .reg 文件
  37. Global $tmpDir = @TempDir & "\regtemp"
  38. If FileExists($tmpDir) Then DirRemove($tmpDir, 1)
  39. DirCreate($tmpDir)

  40. ; 注册表导入映射
  41. _RegProcess("system.reg", "s/HKEY_LOCAL_MACHINE\\SYSTEM/HKEY_LOCAL_MACHINE\\TempSystem/g")
  42. _RegProcess("software.reg", "s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\TempSoftware/g")
  43. _RegProcess("default_user.reg", "s/HKEY_USERS\\.DEFAULT/HKEY_USERS\\TempDefault/g")
  44. _RegProcess("default_user.reg", "s/HKEY_CURRENT_USER/HKEY_USERS\\TempUser/g")
  45. _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_LOCAL_MACHINE\\TempSoftware\\Classes/g")
  46. _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempDefault\\Software\\Classes/g")
  47. _RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempUser\\Software\\Classes/g")

  48. ; 卸载注册表
  49. RunWait("reg unload HKLM\TempSystem")
  50. RunWait("reg unload HKLM\TempSoftware")
  51. RunWait("reg unload HKU\TempDefault")
  52. RunWait("reg unload HKU\TempUser")

  53. ; 如果使用的是 NTUSER.DAT,重命名为 NTUSER.MAN(仅当 MAN 不存在)
  54. If StringInStr($regUserDat, "NTUSER.DAT") And Not FileExists($systemFolder & "\Users\Default\NTUSER.MAN") Then
  55.     FileMove($regUserDat, $systemFolder & "\Users\Default\NTUSER.MAN", $FC_OVERWRITE)
  56. EndIf

  57. ; 注册表导入处理函数
  58. Func _RegProcess($filename, $sedPattern)
  59.     Local $srcFile = @ScriptDir & "" & $filename
  60.     If Not FileExists($srcFile) Then Return
  61.     Local $outFile = $tmpDir & "" & $filename
  62.     RunWait('"' & $sed & '" "' & $sedPattern & '" "' & $srcFile & '" > "' & $outFile & '"', "", @SW_HIDE)
  63.     RunWait('regedit /s "' & $outFile & '"', "", @SW_HIDE)
  64. EndFunc
复制代码




共两个程序,有个是PE下导入,一个是挂载的系统,自行修改一些代码,做不到完美,请指正

评分

参与人数 1无忧币 +5 收起 理由
某些人 + 5 赞一个!

查看全部评分

2#
发表于 5 天前 | 只看该作者
很不错 谢谢分享
回复

使用道具 举报

3#
发表于 5 天前 | 只看该作者
1. 没看明白为啥一定需要存在 sed.exe 这个文件
2. 为啥要遍历 A~Z 的所有驱动器号, 而不是已使用的驱动器号
3. 判断离线(脱机)系统的驱动器号的逻辑不严谨
4. 好像不需要定义这么多的全局变量吧
...
回复

使用道具 举报

4#
发表于 5 天前 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
发表于 5 天前 | 只看该作者

感谢分享
回复

使用道具 举报

6#
发表于 5 天前 | 只看该作者

谢谢分享
回复

使用道具 举报

7#
发表于 5 天前 | 只看该作者
感谢分享!
回复

使用道具 举报

8#
发表于 5 天前 | 只看该作者
感谢分享
回复

使用道具 举报

9#
发表于 5 天前 | 只看该作者
感谢分享
回复

使用道具 举报

10#
发表于 4 天前 | 只看该作者
回复

使用道具 举报

11#
发表于 4 天前 | 只看该作者
感谢楼主分享
回复

使用道具 举报

12#
发表于 4 天前 | 只看该作者
感谢分享。
回复

使用道具 举报

13#
发表于 4 天前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

14#
发表于 4 天前 | 只看该作者
谢谢楼主分享
回复

使用道具 举报

15#
发表于 4 天前 | 只看该作者
感谢分享
回复

使用道具 举报

16#
发表于 3 天前 | 只看该作者
感谢楼主分享
回复

使用道具 举报

17#
发表于 前天 15:40 | 只看该作者
感谢楼主的分享
回复

使用道具 举报

18#
发表于 前天 17:17 | 只看该作者
谢谢分享,以我的经验,注册表操作要慎重加慎重,定期备份,如果无备份的情况下,加载配置单元一旦不慎点错,点成导入(如导入PE的software文件),就会成为灾难!!!我就这样弄崩过一次系统,最后各种修复无效,只能重装了。
回复

使用道具 举报

19#
发表于 前天 21:35 | 只看该作者
谢谢分享
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2025-5-31 11:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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