레지스트리파일을 배치파일로 변환하기 - WindowexeRegToBat
복잡한 레지스트리값을 간단히 명령줄로 변환하는 WindowexeRegToBat 프로그램입니다.
레지스트리파일을 명령줄로 변환하는 프로그램은 아주 예전부터 필요로 했던 프로그램인데 필요한 사람이 우물을 판다고 결국에는 이런 프로그램을 직접 만들게 되네요.
단순 문자열들은 명령줄로 변환하는 건 그리 어렵지 않은데 바이너리 값, dword 값, 다중문자열 값, 확장문자열 값은 데이타 변환이 필요합니다.,
이 데이타들을 진수에 맞게 변환하고, 문자를 찾아서 나누고 다시 합치려면 상당한 지식과 계산이 필요하며, 변환할 문자에 특수문자가 포함된 경우 매번 \"(이스케이프문자)를 써줘야 하는 불편함도 있습니다.
처음에 만들기 시작할때는 그리 어렵지 않게 만들 수 있을줄 알았는데 확장문자열 변환하는 부분에서 시간꽤나 잡아먹었네요. 이건 검색해도 딱히 나오지 않는 부분이라.
관련자료를 찾다가 [Reg To bat 변환하기]라는 글 말고는 도움이 되는 글이 하나도 없더군요. 이것도 제가 수년전에 작성했던 글인데 출처도 없이 이곳저곳 떠돌아다니고 있네요.
인터넷에 많이 돌아다니는 [RegToBat]라는 레지스트리 변환 프로그램의 데이타구조를 참고하려고 했는데 이건 데이타를 변환하는 게 아니고 파일을 처음부터 끝까지 읽어서 그대로 다시쓰는 방식이라서 전혀 도움이 안되더군요.
배치파일 보자마자 바로 휴지통으로 버렸습니다. 아이디어는 좋으나 그냥 쓰레기임.
확장문자열의 배열과 중간에 있는 특수문자의 배열을 뽑아서 다시 조인하는 부분에서 시간이 많이 걸렸습니다. 이거 해결하느라 머리터지는줄 알았네요.ㅎㅎ
버그가 있을 수 있으니 데이타값이 이상하게 등록되거나 명령줄에 오류가 있는 경우 레지스트리값과 함께 댓글남겨주세요.
댓글 양식
레지스트리키 :
데이타이름 이나 데이타값 :
잘못 들어간 데이타이름 이나 데이타값 :
검색패턴에 맞지않는 라인은 출력되지 않고 적색으로 표시됩니다.
[레지스트리키]가 선언되지 않으면 HKCU\Software\test 키를 기본으로 합니다
클립보드 붙여넣기, 또는 레지스트리 경로를 입력한 후에 키 읽기 클릭.
아래쪽에 있는 등록변환하기 버튼을 누르면 메모장으로 명령줄이 출력됩니다.
레지스트리값을 실제 명령줄로 변환한 내용입니다. (등록변환)
echo ######################################################################
echo Created by Windowexe.com , WindowexeRegToBat
echo ######################################################################
echo Start
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "AutoRestartShell" /t REG_DWORD /d "1" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "DefaultDomainName" /d "VMWARE" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "DefaultUserName" /d "Administrator" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "LegalNoticeCaption" /d "" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "LegalNoticeText" /d "" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "PowerdownAfterShutdown" /d "0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "ReportBootOk" /d "1" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "Shell" /d "Explorer.exe" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "ShutdownWithoutLogon" /d "0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "System" /d "" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "Userinit" /d "C:\WINDOWS\system32\userinit.exe," /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "VmApplet" /d "rundll32 shell32,Control_RunDLL \"sysdm.cpl\"" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "SfcQuota" /t REG_DWORD /d "4294967295" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "PreloadFontFile" /d "gulim" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "cachedlogonscount" /d "10" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "forceunlocklogon" /t REG_DWORD /d "0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "passwordexpirywarning" /t REG_DWORD /d "14" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "scremoveoption" /d "0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "UIHost" /t REG_EXPAND_SZ /d "logonui.exe" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "LogonType" /t REG_DWORD /d "1" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "Background" /d "0 0 0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "DebugServerCommand" /d "no" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "SFCDisable" /t REG_DWORD /d "0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "WinStationsDisabled" /d "0" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "HibernationPreviouslyEnabled" /t REG_DWORD /d "1" /f
reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "ShowLogonOptions" /t REG_DWORD /d "0" /f
echo End
삭제변환은 해당 값을 명령줄에서 삭제할 수 있도록 출력합니다.
위에서 등록한 레지스트리값을 한번에 삭제할 수 있습니다.(키 제외)
echo ######################################################################
echo Created by Windowexe.com , WindowexeRegToBat
echo ######################################################################
echo Start
echo default system32 directory & cd %windir% & cd system32
echo - reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "AutoRestartShell" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "DefaultDomainName" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "DefaultUserName" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "LegalNoticeCaption" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "LegalNoticeText" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "PowerdownAfterShutdown" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "ReportBootOk" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "Shell" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "ShutdownWithoutLogon" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "System" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "Userinit" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "VmApplet" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "SfcQuota" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "PreloadFontFile" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "cachedlogonscount" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "forceunlocklogon" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "passwordexpirywarning" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "scremoveoption" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "UIHost" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "LogonType" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "Background" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "DebugServerCommand" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "SFCDisable" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "WinStationsDisabled" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "HibernationPreviouslyEnabled" /f
reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /v "ShowLogonOptions" /f
echo End
삭제변환시 레지스트리키의 삭제명령도 포함되어 있으나 기본적으로 주석처리가 되어있고 레지스트리키가 시작되는 첫번째 명령줄에서 echo - 를 삭제하면 키도 삭제할 수 있습니다.
예제)
기본 출력 :
echo - reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /f
키를 삭제하려면 echo - 삭제 :
echo xxx & reg.exe delete "HKEY_LOCAL_MACHINE\SOFTWARE\test" /f
파일명은 변경하지 마세요.
WindowexeRegToBat.exe 그대로 사용하세요.
관리자권한이 없는 사용자라면 마우스 우클릭해서 관리자 권한으로 실행하세요.
버그
확장문자열이나 바이너리의 길이가 10만자리가 넘으면 변환할 수 없습니다.
레지스트리키 또는 레지스트리값에 줄바꿈 문자가 포함되어 있는 경우도 변환할 수 없습니다.
값이 존재하지 않는 문자열 + hex(0): 또는 기본값 + hex(0): 값은 널(Null)이 아닌 00 00 으로 들어갑니다.
bad value 로 표시되는 hex(4): 값은 보류중입니다. 아무리 봐도 이건 문제가 있는 데이타형식으로 보입니다.
REG_RESOURCE_LIST형식 (hex(8):) 레지스트리도 변환할 수 없습니다. (귀차니즘으로 보류중)
변환 후에 레지스트리가 정상적으로 들어가는지 확인해보세요. 웬만한 버그는 다 잡았는데 확장문자열의 특수문자 및 줄바꿈이 잘 안먹히는 버그가 있습니다.
set default value
체크를 하지 않으면 이름 또는 값이 존재하는 것만 출력을 하고, 체크를 하면 값이 존재하지 않는 빈 레지스트리키까지 모두 출력합니다. 키를 생성할 때 기본값이 없어지는 문제로 추가하였습니다.
이 블로그는 더이상 업데이트를 하지않는 관계로 프로그램은 배포하지 않습니다.
아래 블로그에서 다운로드 받으세요.
https://pcwindows.tistory.com/277
바이러스토탈 검진 결과 링크