
Windows 레지스트리 내보내기 파일을 NTUSER.MAN을 대체하는 데 사용할 수 있는 Windows 하이브 파일로 변환하는 도구
EDR/AV가 감지하지 못하게 HKCU에 레지스트리 키를 은밀하게 추가하는 도구입니다. 관리자 권한이 없어도 가능합니다.
참고: 이 작업은 한 번만 수행할 수 있습니다. NTUSER.MAN이 새로운 레지스트리 하이브가 된 후에는 관리자가 아니면 변경할 수 없으므로, 첫 번째 시도에서 원하는 모든 변경을 완료해야 합니다.
reg_query BOF의 결과 사용하기req_query BOF를 가져옵니다.execute-bof --opsec Z:\path\to\reg_query.x64.o go z"" i1 z"" z"" i1 명령을 실행합니다.output.txt라고 부릅니다. 모든 타임스탬프를 포함해야 하며, 다음과 같이 HKEY_CURRENT_USER\ 키로 시작해야 합니다.03/18/2025 14:19:51 HKEY_CURRENT_USER\
swarmer.exe 바이너리를 가져와 swarmer.exe --bof --startup-key "WhateverKeyNameYouWant" --startup-value "C:\Path\To\Your\target.exe" output.txt NTUSER.MAN 명령을 실행합니다.C:\Users\MyUserName\NTUSER.MAN과 같은 파일이 생깁니다.시작 시 계산기를 띄우기 위해 HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run에 추가하려는 레지스트리 키가 있다고 가정해 보겠습니다.
먼저 사용하려는 HKCU 키의 레지스트리 덤프가 필요합니다. 이상적으로는 수정하려는 머신에서 가져와야 합니다. reg export HKCU hkcu.reg 명령을 실행하여 생성할 수 있습니다.
그런 다음 원하는 .reg 파일을 수정합니다. 이 예제에서는 메모장으로 파일을 열고 다음과 같이 한 줄을 추가하면 됩니다.

참고: HKEY_CURRENT_USER에 대한 변경만 적용되며, HKLM에는 영향을 미치지 않습니다.
다음으로 이 도구 swarmer.exe를 사용하여 수정된 reg 파일을 바이너리 레지스트리 하이브로 변환해야 합니다. 예제 호출은 다음과 같습니다.
swarmer.exe hkcu.reg NTUSER.MAN
또는 PowerShell 스크립트 내에서 이 작업을 수행하려면 릴리스 섹션에서 swarmer.dll 바이너리를 가져와 다음 명령으로 실행할 수 있습니다.
Import-Module '.\swarmer.dll'
Convert-RegToHive -InputPath '.\hkcu.reg' '.\NTUSER.MAN'
마지막으로 NTUSER.MAN 파일(반드시 이 이름이어야 함)을 %USERPROFILE% 디렉터리(예: C:\Users\MyUserName)에 넣기만 하면 됩니다.
다음에 해당 계정이 로그인하면 레지스트리 변경 사항이 로드됩니다.
Windows는 레거시 결함으로 가득 차 있으며, 이는 Windows 필수 사용자 프로필을 악용합니다. 일반적으로 사용자의 NTUSER.DAT를 NTUSER.MAN으로 이름을 바꾸려면 관리자 권한이 필요하지만, 누군가가 동일한 이름의 파일을 그냥 넣어두고 대신 사용되는 것을 막는 보호 장치는 없는 것으로 보입니다.
"예상되는" 이상한 보안 경계가 있습니다. 머신에서 바이너리 Windows 하이브를 생성하려면 관리자 권한이 필요하지만, 일반적으로 이는 매우 느슨하게 적용됩니다. swarmer는 내보낸 .reg 파일을 구문 분석하면서 오프라인 레지스트리 API를 (악)용하여 바이너리 레지스트리 하이브를 조작합니다. 설명을 인용하자면:
애플리케이션은 오프라인 레지스트리 함수를 사용하여 시스템 레지스트리의 보안 요구 사항을 우회해서는 안 됩니다. 하이브를 로드하기 위해 RegLoadKey 함수에 필요한 특별 권한 없이 실행되는 애플리케이션은 RegLoadAppKey 함수를 사용할 수 있습니다.
당연히 우리는 그 말을 듣지 않을 것이므로, 이제 낮은 권한의 레지스트리 내보내기와 swarmer 도구를 결합하여 "권한 있는" 레지스트리 바이너리 개체를 생성하고, 이를 올바른 위치에 놓아 기존 NTUSER.DAT 레지스트리 하이브를 덮어쓸 수 있습니다.
이 과정에서 전통적인 레지스트리 읽기/쓰기 API를 전혀 사용하지 않으므로, EDR이 이 과정을 잘 인지하지 못할 것입니다. sysinternals procmon에 따르면 이 중 어느 것도 실제 레지스트리 쓰기로 나타나지 않습니다. 특히 paranoid하다면 .reg 파일을 제어하는 머신으로 가져와 이 도구로 하이브 바이너리 파일을 만든 후 호스트에 다시 넣을 수도 있습니다. 레지스트리를 내보내고 나면 NTUSER.MAN 파일을 넣을 때까지 호스트와 상호작용할 필요가 없습니다.
기술적으로 레지스트리를 내보낼 필요조차 없지만, 다른 머신(Windows 환경과 정확히 일치하지 않는)의 레지스트리로 계정의 레지스트리를 교체하는 것은 위험할 가능성이 높으며, 이를 보장하기 어렵습니다.
이 도구는 Apache 라이선스 하에 오픈 소스로 제공됩니다.