| 
 | 
 
 本帖最后由 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下导入,一个是挂载的系统,自行修改一些代码,做不到完美,请指正 
 
 |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |