无忧启动论坛
标题:
注册表导入工具,包含PE和挂载的
[打印本页]
作者:
nnkoll
时间:
2025-5-26 17:13
标题:
注册表导入工具,包含PE和挂载的
本帖最后由 nnkoll 于 2025-5-26 17:13 编辑
每次修改PE或者系统,导入的注册表总是需要手动挂载,经过几天的研究,研究出一个程序,具体源码如下:
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.16.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
; 检查 sed.exe 是否存在
Global $sed = @ScriptDir & "\sed.exe"
If Not FileExists($sed) Then
Exit
EndIf
; 自动检测系统盘,在PE下导入修改的注册表
Global $systemDrive = ""
For $i = Asc("A") To Asc("Z")
Local $drive = Chr($i) & ":"
If FileExists($drive & "\Windows\System32\config\SYSTEM") And _
(FileExists($drive & "\bootmgr") Or FileExists($drive & "\Windows\System32\winload.efi")) Then
$systemDrive = $drive
ExitLoop
EndIf
Next
If $systemDrive = "" Then
Exit
EndIf
; 加载注册表
Global $regSystem = $systemDrive & "\Windows\System32\config\SYSTEM"
Global $regSoftware = $systemDrive & "\Windows\System32\config\SOFTWARE"
Global $regDefault = $systemDrive & "\Windows\System32\config\DEFAULT"
Global $regUserDat = $systemDrive & "\Users\Default\NTUSER.DAT"
RunWait('reg load HKLM\TempSystem "' & $regSystem & '"')
RunWait('reg load HKLM\TempSoftware "' & $regSoftware & '"')
RunWait('reg load HKU\TempDefault "' & $regDefault & '"')
RunWait('reg load HKU\TempUser "' & $regUserDat & '"')
; 创建临时目录存储处理后的 .reg 文件
Global $tmpDir = @TempDir & "\regtemp"
If FileExists($tmpDir) Then DirRemove($tmpDir, 1)
DirCreate($tmpDir)
; 处理注册表文件导入
_RegProcess("system.reg", "s/HKEY_LOCAL_MACHINE\\SYSTEM/HKEY_LOCAL_MACHINE\\TempSystem/g")
_RegProcess("software.reg", "s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\TempSoftware/g")
_RegProcess("default_user.reg", "s/HKEY_USERS\\.DEFAULT/HKEY_USERS\\TempDefault/g")
_RegProcess("default_user.reg", "s/HKEY_CURRENT_USER/HKEY_USERS\\TempUser/g")
_RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_LOCAL_MACHINE\\TempSoftware\\Classes/g")
_RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempDefault\\Software\\Classes/g")
_RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempUser\\Software\\Classes/g")
; 卸载临时注册表
RunWait("reg unload HKLM\TempSystem")
RunWait("reg unload HKLM\TempSoftware")
RunWait("reg unload HKU\TempDefault")
RunWait("reg unload HKU\TempUser")
; 如果 NTUSER.DAT 存在且不是 NTUSER.MAN,则重命名
If FileExists($regUserDat) And Not FileExists($systemDrive & "\Users\Default\NTUSER.MAN") Then
FileMove($regUserDat, $systemDrive & "\Users\Default\NTUSER.MAN", $FC_OVERWRITE)
EndIf
; 注册表处理函数
Func _RegProcess($filename, $sedPattern)
Local $srcFile = @ScriptDir & "" & $filename
If Not FileExists($srcFile) Then Return
Local $outFile = $tmpDir & "" & $filename
RunWait('"' & $sed & '" "' & $sedPattern & '" "' & $srcFile & '" > "' & $outFile & '"', "", @SW_HIDE)
RunWait('regedit /s "' & $outFile & '"', "", @SW_HIDE)
EndFunc
复制代码
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.16.1
Author: myName
Script Function:
Template AutoIt script.
#ce ----------------------------------------------------------------------------
; Script Start - Add your code below here
#include <MsgBoxConstants.au3>
#include <FileConstants.au3>
#include <WinAPIFiles.au3>
#include <File.au3>
; 检查 sed.exe 是否存在
Global $sed = @ScriptDir & "\sed.exe"
If Not FileExists($sed) Then Exit
; 选择挂载系统所在的根目录(如 D:\MountedWindows)
Global $systemFolder = FileSelectFolder("请选择挂载系统的根目录(含 Windows 文件夹)", "", 2)
If @error Or $systemFolder = "" Then Exit
; 构建注册表文件路径
Global $regSystem = $systemFolder & "\Windows\System32\config\SYSTEM"
Global $regSoftware = $systemFolder & "\Windows\System32\config\SOFTWARE"
Global $regDefault = $systemFolder & "\Windows\System32\config\DEFAULT"
; 允许 NTUSER.DAT 或 NTUSER.MAN 任意一个存在
Global $regUserDat = ""
If FileExists($systemFolder & "\Users\Default\NTUSER.DAT") Then
$regUserDat = $systemFolder & "\Users\Default\NTUSER.DAT"
ElseIf FileExists($systemFolder & "\Users\Default\NTUSER.MAN") Then
$regUserDat = $systemFolder & "\Users\Default\NTUSER.MAN"
Else
Exit
EndIf
; 加载脱机注册表
RunWait('reg load HKLM\TempSystem "' & $regSystem & '"')
RunWait('reg load HKLM\TempSoftware "' & $regSoftware & '"')
RunWait('reg load HKU\TempDefault "' & $regDefault & '"')
RunWait('reg load HKU\TempUser "' & $regUserDat & '"')
; 创建临时目录处理 .reg 文件
Global $tmpDir = @TempDir & "\regtemp"
If FileExists($tmpDir) Then DirRemove($tmpDir, 1)
DirCreate($tmpDir)
; 注册表导入映射
_RegProcess("system.reg", "s/HKEY_LOCAL_MACHINE\\SYSTEM/HKEY_LOCAL_MACHINE\\TempSystem/g")
_RegProcess("software.reg", "s/HKEY_LOCAL_MACHINE\\SOFTWARE/HKEY_LOCAL_MACHINE\\TempSoftware/g")
_RegProcess("default_user.reg", "s/HKEY_USERS\\.DEFAULT/HKEY_USERS\\TempDefault/g")
_RegProcess("default_user.reg", "s/HKEY_CURRENT_USER/HKEY_USERS\\TempUser/g")
_RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_LOCAL_MACHINE\\TempSoftware\\Classes/g")
_RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempDefault\\Software\\Classes/g")
_RegProcess("classes_root.reg", "s/HKEY_CLASSES_ROOT/HKEY_USERS\\TempUser\\Software\\Classes/g")
; 卸载注册表
RunWait("reg unload HKLM\TempSystem")
RunWait("reg unload HKLM\TempSoftware")
RunWait("reg unload HKU\TempDefault")
RunWait("reg unload HKU\TempUser")
; 如果使用的是 NTUSER.DAT,重命名为 NTUSER.MAN(仅当 MAN 不存在)
If StringInStr($regUserDat, "NTUSER.DAT") And Not FileExists($systemFolder & "\Users\Default\NTUSER.MAN") Then
FileMove($regUserDat, $systemFolder & "\Users\Default\NTUSER.MAN", $FC_OVERWRITE)
EndIf
; 注册表导入处理函数
Func _RegProcess($filename, $sedPattern)
Local $srcFile = @ScriptDir & "" & $filename
If Not FileExists($srcFile) Then Return
Local $outFile = $tmpDir & "" & $filename
RunWait('"' & $sed & '" "' & $sedPattern & '" "' & $srcFile & '" > "' & $outFile & '"', "", @SW_HIDE)
RunWait('regedit /s "' & $outFile & '"', "", @SW_HIDE)
EndFunc
复制代码
共两个程序,有个是PE下导入,一个是挂载的系统,自行修改一些代码,做不到完美,请指正
作者:
技束源
时间:
2025-5-26 17:36
很不错 谢谢分享
作者:
Bluebells
时间:
2025-5-26 18:03
1. 没看明白为啥一定需要存在 sed.exe 这个文件
2. 为啥要遍历 A~Z 的所有驱动器号, 而不是已使用的驱动器号
3. 判断离线(脱机)系统的驱动器号的逻辑不严谨
4. 好像不需要定义这么多的全局变量吧
...
作者:
小灰兔
时间:
2025-5-26 18:06
谢谢分享
作者:
jho
时间:
2025-5-26 18:59
感谢分享
作者:
jh198354
时间:
2025-5-26 19:00
谢谢分享
作者:
handsome_xiang
时间:
2025-5-26 19:19
感谢分享!
作者:
dnine999
时间:
2025-5-26 21:30
感谢分享
作者:
yc2428
时间:
2025-5-26 21:40
感谢分享
作者:
yaowozhuce
时间:
2025-5-27 00:34
强
作者:
Q646643964
时间:
2025-5-27 03:59
感谢楼主分享
作者:
ajlass
时间:
2025-5-27 07:36
感谢分享。
作者:
wang1126
时间:
2025-5-27 11:30
谢谢楼主分享
作者:
guong
时间:
2025-5-27 14:05
谢谢楼主分享
作者:
燕飞龙
时间:
2025-5-27 15:04
感谢分享
作者:
ebaqiang
时间:
2025-5-28 07:50
感谢楼主分享
作者:
Siya2025
时间:
7 天前
感谢楼主的分享
作者:
neartree
时间:
7 天前
谢谢分享,以我的经验,注册表操作要慎重加慎重,定期备份,如果无备份的情况下,加载配置单元一旦不慎点错,点成导入(如导入PE的software文件),就会成为灾难!!!我就这样弄崩过一次系统,最后各种修复无效,只能重装了。
作者:
790097
时间:
7 天前
谢谢分享
欢迎光临 无忧启动论坛 (http://wuyou.net/)
Powered by Discuz! X3.3