기 타 pureBasic - PE 1회 부팅 프로그램을 만들어 보았습니다.
2024.03.17 14:00
작품 뿐만 아니라 귀한 소스까지 자세한 설명과 함께 베풀어 주신 입니다님께 머리숙여 감사드립니다.
좋은 소스들이 있어서 pureBasic으로 PE 1회 부팅 프로그램을 만들어 볼수 있었습니다
복 많이많이 받으십시요
입니다님의 pureBasic 소스가 없었다면...아예 시작도 못했을것입니다.
소스를 공개하여 주신지 시간이 많이 지났지만 도전을 해볼수 없었던것도 저의 눈에는 외계어로 보여서 였습니다
PE 1회 부팅에 사용된 소스의 99%는 입니다님의 소스에 있는것입니다...다시 한번더 감사드립니다
한가지만은 입니다님 소스에서 방법을 찾지 못했습니다
우클릭 메뉴에 등록하는 레지는 입니다님 소스에 함수가 있어서 활용을 하였습니다. 이 우클릭 메뉴 레지를 삭제를 하는 방법이 입니다님의
소스에는 레지의 항목을 삭제하는것이어서 우클릭 레지 전체를 하는 방법을 몰라서 이 부분은 Reg.exe delete 로 삭제하는 방법을 사용을
하였습니다
자료를 찾는것도 능력이죠.. AI에서 소스를 만드는것도 해봐야할것 같습니다
PE 1회 부팅을 만들면서 아래 부분은 생각이 났습니다
OnceBootBCD로 지정 PE 부팅 cmd 만들어 활용하기 입니다.
https://windowsforum.kr/review/20473021
위의 사용기는 PE 우클릭에서 부팅하는것이 아니라 cmd 파일을 만들어 바탕화면에 두고 pe를 1회 부팅하는것입니다
PE에 따라서 cmd 파일을 각각 만들어야 하는 불편도 있고 cmd가 실행되는 모습이 순간 보입니다
이 당시에는 cmd 이야기가 나와서 이 방법을 사용을 했습니다만 불편하죠...OnceBootBCD 바로가가 파일을 만들고 바로가기 파일 속성에서
옵션을 주면 간단합니다..이때에는 이 생각을 못했네요
바탕화면에 바로가기를 만들고 활용을 하시는것이 편하실것 같습니다
1. 3개 파일이 항상 같이 있어야 합니다..boot.sdi는 없으면 복사해주지 않습니다..
메세지를 컬러바 메세지를 사용을 해서 imageres.dll이 있어야 합니다...버튼에서도 여기 있는 아이콘을 사용합니다
2. 2~5는 버튼에서 사용합니다..등록,삭제 버튼 아이콘과 메세지 아이콘이 일치하도록 하였습니다
3. BCD 등록은 복구시스템에 사용하는 RecooveryPE.wim 파일이 같은 폴더에 있어야 등록을 합니다.
버튼은 입니다님의 전원단추에 있는 GUI를 활용하였습니다
4. BCD 메뉴 등록 완료 메세지입니다
5. 등록이 잘되었습니다
6. BCD 메뉴에서 부팅을 하여 보았습니다
7. 우클릭 등록 완료 메세지입니다. 아니..PE라는 단어가 빠졌습니다.
8. 레지 삭제시 메세지입니다..아이콘은 버튼 아이콘과 일치합니다
9. wim 파일 우클릭 메뉴가 있습니다
10. 1회 부팅 안내 메세지입니다...pe인지 구분은 안합니다.
11. 선택한 PE로 부팅이 되었습니다
12. PE 부팅시에 우클릭 메뉴에 등록을 할수 있습니다
13. 다른 PE로 부팅을 하여 보겠습니다
14. 부팅 메세지입니다
15. PE로 부팅이 되었습니다..
16. 복구시스템용 PE로 부팅을 하여 보겠습니다
17. 부팅이 잘되었습니다
18. 윈도우로 부팅하였습니다 BCD에 등록된 1회 부팅 메뉴는 따로 삭제하지 않습니다...1회 부팅시에 기존값을 지우고 새로 등록을 합니다
프로그램 바로가기를 만들고 원하는 PE 전체 경로를 추가를 하여 주면 바탕화면에서 특정 pe로 1회 부팅을 할수 있습니다
각각 cmd를 만들지 않아도 되고..cmd 실행 모습이 보이지 않아서 간편합니다...그때에는 이생각을 못했습니다.
19. 원하는 것 만큼 바로가기를 만들어 활용하면 됩니다..각각 아이콘을 바꾸는것도 좋죠..
20. 바로가기를 클릭하였습니다...부팅 메세지입니다 그래그도 되고 우클릭 메뉴도 되는것이어서 당연히 되는것이죠..
21. 부팅이 되었습니다
22. 지니제스트님 작품도 바로가기를 만들어 활용을 하시면 됩니다
23. 확인 메세지입니다
24. PE로 부팅이 잘 되었습니다
25. 이 검사를 피해갈수가 없죠...64bit의 경우 1개만 검출이 되었습니다...이정도는 되어야 한는데요 오토잇은 뭔가 믿보였는지..자꾸 증가를
하고 있는 상황입니다
26. 32bit도 검사를 하여 보았습니다..만드는 방식의 차이 일수도 있습니다
저는 그냥 cmd처럼 쭉..나열에서 만듭니다...입니다님의 작품을 보면 고수님의 향기가 나오죠..함수들로 잘 정리가 되어 있습니다..
이런 부분도 영향이 있는것 같습니다
27. 마무리
입니다님께서 아낌없이 베풀어 주시지 않으셨다면..생각도 할수 없었을것입니다.
좋은 소스를 베풀어 주신 덕분에 이렇게 pureBasic 에 입문을 할수 있게 되었습니다
입니다님 마음을 담아 감사인사를 드립니다..
처음 만드는것이어서 모르는 명령어들도 있고해서...기본만 만들어 본것입니다..
pureBasic 설치 프로그램도 사용기에 소개를 해드렸습니다...한번 도전을 해보시는것도 재미가 있으실것 같습니다
즐거운 일요일이 되시길 바랍니다
댓글 [34]
-
lyj 2024.03.17 14:21
-
입니다 2024.03.17 14:26
키 자체를 삭제 하려면 이 함수를 넣고 아래 예제 처럼 하면 됩니다.
Procedure.l RegDeleteKey(HKEY_hKey.l, LPCWSTR_lpSubKey.s)
Protected LSTATUS.l
Protected hDLL.l = OpenLibrary(#PB_Any, "Advapi32.dll")
If hDLL
LSTATUS = CallFunction(hDLL, "RegDeleteKeyW", HKEY_hKey, SysAllocString_(LPCWSTR_lpSubKey))
CloseLibrary(hDLL)
EndIf
ProcedureReturn LSTATUS
EndProcedure
;예제
Debug RegDeleteKey(#HKEY_CURRENT_USER, "Software\WimInfoREG\TEst1")
-
왕초보 2024.03.17 14:38
와...너무너무 감사합니다..이 삭제만 reg.exe를 사용하는것 같아서 몇시간을 헤메였습니다
Registry.pbi를 찾아서 적용을 해보려고 해도 안되고...Registry.pbi에 RegDeleteKey = GetFunction(dll, "RegDeleteKeyExW") 가 있어서
활용을 해볼고 했지만 아는것이 없어서 실패만 하였습니다
이렇게 소스를 알려주셔서 감사합니다...바로 적용을 해보겠습니다.
-
왕초보 2024.03.17 14:57
예제까지 있는데도 제가 잘못하는 부분이 있나 봅니다
1. 결과값이 5가 나왔습니다
2. 레지가 삭제되지 않았습니다
3. 파일 우클릭 메뉴입니다..아래처럼 입력을 했습니다...저도 좀더 확인을 하여 보겠습니다
4. 저는 PESettings 전체를 삭제를 하려고 합니다...알려주신 경로에서 WimInfoREG 자체를 삭제를 해야합니다
레지키값이 삭제가 되는지 테스트 하여 보았습니다 아래처럼 입력을 하였습니다
5. 결과값은 이번에는 2가 나왔습니다
6. 키 값이 삭제되지 않았습니다
7. 입니다님 작품에 있는 소스는 키값은 잘 삭제가 됩니다
8. 키값이 삭제가 되었습니다.. 2번의 PESettings 전체를 삭제를 해야 우클릭 메뉴에서 사라집니다
이것이 안되고 있습니다 불편을 드려서 죄송합니다
-
입니다 2024.03.17 16:01
#HKEY_CLASSES_ROOT
의 레지스트리 삭제는 관리자 권한이 있어야 됩니다.
-
왕초보 2024.03.17 16:06
사용기를 쓸때 BCD 등록에 관리자 권한이 필요해서 관리자 권한을 주고 있습니다
혹시 Debug RegDeleteKey(#HKEY_CURRENT_USER, "Software\WimInfoREG\TEst1") 경로에서 WimInfoREG 자체가 삭제가 되는지요
하부 키값을 원래 있던 소스로도 잘됩니다.
-
입니다 2024.03.17 16:13
-
왕초보 2024.03.17 16:21
이렇게 잘되시는데 저만 안되는것인가 봅니다..
다른 레지키는 잘 삭제가 되었습니다
1. 다른 경로에 있는것을 삭제를 해보려고 합니다
2. 메세지에 작업이 완료가되었다고 나옵니다
3. 삭제를 확인하였습니다
4. 제가 만들 레지에 문제가 있나 봅니다....좀더 테스트를 해보도록 하겠습니다..
도움을 주신 마음에 깊이 감사드립니다
-
입니다 2024.03.17 16:04
Procedure.s GetLastErrorStr(error)
Protected Buffer.i, result.s
If FormatMessage_(#FORMAT_MESSAGE_ALLOCATE_BUFFER | #FORMAT_MESSAGE_FROM_SYSTEM, 0, error, 0, @Buffer, 0, 0)
result = PeekS(Buffer)
LocalFree_(Buffer)
ProcedureReturn result
EndIf
EndProcedure
Procedure.l RegDeleteKey(HKEY_hKey.l, LPCWSTR_lpSubKey.s)
Protected LSTATUS.l
Protected hDLL.l = OpenLibrary(#PB_Any, "Advapi32.dll")
If hDLL
LSTATUS = CallFunction(hDLL, "RegDeleteKeyW", HKEY_hKey, SysAllocString_(LPCWSTR_lpSubKey))
CloseLibrary(hDLL)
EndIf
ProcedureReturn LSTATUS
EndProcedure
Define res = RegDeleteKey(#HKEY_CLASSES_ROOT, "SystemFileAssociations\.wim\shell\TEst1")
Debug GetLastErrorStr(res)
;이렇게 하면 오류 설명까지 나오니 참조 해서 해결을 하면 됩니다.
;5번 에러는 접근이 안되서 발생하는 에러. 주로 관리자 권한 및 특별한 권한을 줘야 동작 합니다.
-
왕초보 2024.03.17 16:16
안보시고도 다 아시네요..
알려주신것으로 확인을 하여 보았습니다...이렇게 나옵니다. 말씀하여 주신것처럼 접근 자체가 되지 않았습니다
어제부터 저녁부터 여기에 매달렸었습니다..결국..reg.exe로 해야 할것 같습니다
자세히 지식을 베풀어 주셔서 감사합니다...
-
입니다 2024.03.17 16:20
소스 자체를 모르니 다른 도움은 못 드리겠네요.
해당 키 접근이 제한 되고 있는데,
관리자 권한이 있어도 어떤 프로세서가 사용하고 있으면 삭제가 안 됩니다.
키를
수동으로 삭제하고
수동으로 만드는 테스트 후
프로그램의 키 삭제를 테스트 해 보세요.
-
왕초보 2024.03.17 18:15
reg 파일로 등록을 해도 같은 현상입니다..
오늘 저때문에 고생이 너무 많으십니다.. 감사합니다
-
시종일관 2024.03.17 14:57
수고 많으셨습니다~~~ ^^
-
소리애드 2024.03.17 14:57
수고하셨습니다 ...
-
상발이 2024.03.17 15:10
수고하셨습니다.
-
광풍제월 2024.03.17 15:38
수고하셨습니다.
-
anh 2024.03.17 15:58
수고하셨습니다.
-
입니다 2024.03.17 16:32
혹시 모르니 전체 시스템에 영향이 가는 작업은
될 수 있으면 로컬 머신으로 지정해서 작업을 하세요.
\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\SystemFileAssociations\.wim
\HKEY_LOCAL_MACHINE
SOFTWARE\Classes\SystemFileAssociations\.wim
#HKEY_CLASSES_ROOT
는 읽기 전용으로 사용하세요.
https://learn.microsoft.com/ko-kr/windows/win32/sysinfo/hkey-classes-root-key
대화형 사용자 이외의 보안 컨텍스트에서 실행되는 프로세스는 레지스트리 함수와 함께 HKEY_CLASSES_ROOT 키를 사용하면 안 됩니다. 대신 이러한 프로세스는 HKEY_LOCAL_MACHINE\Software\Classes 키를 명시적으로 열어 기본 설정에 액세스할 수 있습니다.
-
왕초보 2024.03.17 18:14
cmd에서 사용하던것을 그대로 활용을 하였습니다..
reg.exe에서는 생기지 않은 현상이어서 관리자권한에 대해서 한번도 생각을 해본적이 없습니다
이번에 좋은것드을 배운것 같습니다
앞으로는 레지는 알려주신 경로로 꼭 하도록 하겠습니다
입니다님 감사합니다..
-
삐쟁이 2024.03.17 16:53
수고 많으셨습니다.
-
럭키데이 2024.03.17 17:38
수고하셨습니다.
-
입니다 2024.03.17 17:58
원래는 하위키를 차례대로 제거 해야 됩니다.
command 를 먼저 제거 하지 않으면 에러가 납니다.
자동으로 제거 하는 2종 포함 해서 제거 함수 3종 첨부 합니다.
https://learn.microsoft.com/ko-kr/windows/win32/api/winreg/nf-winreg-regdeletekeyw
https://learn.microsoft.com/ko-kr/windows/win32/api/winreg/nf-winreg-regdeletetreew
https://learn.microsoft.com/ko-kr/windows/win32/api/shlwapi/nf-shlwapi-shdeletekeyw
-
왕초보 2024.03.17 18:17
reg.exe나 오토잇에서는 이런 과정을 알아서 해주고 있어서 어떤 절차로 삭제를 해야하는지 전혀 알지를 못한것이네요
컴퓨터 기본 지식이 너무 없어서..남들을 다 아는것도 모를때가 많습니다.
올려주신 3종을 바로 테스트를 하도록 하겠습니다..
휴일이신데 이렇게 도움을 주신 따뜻한 마음에 머리숙여 감사드립니다
-
입니다 2024.03.17 18:24
아참 쿼터 쓰는 방법 추가 합니다.
자주 쓰는 고정 값은 이렇게 상수로 지정해서 사용 하면 됩니다.
#REG_PE_SETTING$ = "SOFTWARE\Classes\SystemFileAssociations\.wim\shell\PESettings"
; 레지에 우클릭 메뉴 추가
Procedure ReaAdd()
; 실행파일 전체 경로
;MessageRequester("",ProgramFilename())
WriteRegKey(#HKEY_CURRENT_USER, #REG_PE_SETTING$,"", "PE 1회 부팅하기")
WriteRegKey(#HKEY_CURRENT_USER, #REG_PE_SETTING$, "ICON", #DQUOTE$ +ProgramFilename() + #DQUOTE$ )
WriteRegKey(#HKEY_CURRENT_USER, #REG_PE_SETTING$, "Position", "Top")
WriteRegKey(#HKEY_CURRENT_USER, #REG_PE_SETTING$ + "\Command", "", #DQUOTE$ +ProgramFilename() + #DQUOTE$ + " " + #DQUOTE$ + "%1"+ #DQUOTE$)
EndProcedure
-
왕초보 2024.03.17 19:04
컴퓨터를 제각 막 배우게 되어서 체계가 없습니다
입니다님 소스에 있는것을 보면서 이렇게 정리를 해서 깔끔하구나 하면서도 따라하지를 못했습니다
쌍따옴표를 #DQUOTE$로 표할수 있나 봅니다..처음보는 단어여서..제가 쓴 소스인데도 뭐지 하는 생각에 잠시 멍했습니다
오늘 배운것들을 숙지를 해서 잘 활용하도록 하겠습니다..
감사합니다..
-------------------------------------------------------------------------------------------------------
실제 적용시에는 단어들의 컬러가 달라서 눈에 잘 들어옵니다...
앞으로 소스를 간결하게 하도록 노력을 해야 할것 같습니다
-
왕초보 2024.03.17 18:36
첨부하여 주신 2종은 잘 삭제가 됩니다..어제부터..삭제되는것을 보지를 못했었습니다
자료도 찾아보고...수십번 테스트를 해도 답답하기만 했었습니다
입니다님께서 도움을 주신 덕분에 레지가 삭제되는것을 보고 크게 웃었습니다..
가슴이 뻥 뚫리는 기분이었습니다..제가 한것을 없지만..기분은 최고입니다
오랜시간 도움을 주신 덕분에 이런 기쁨을 누릴수 있었습니다...마음을 담아 정중히 감사드립니다
1. 가르쳐 주신 경로로 레지를 등록을 하였습니다..앞으로 레지 등록은 이 경로로 하도록 하겠습니다
2. RegDeleteTree를 적용한 것입니다... 이 단어는 Registry.pbi에 있어서 적용을 해보려고 했었습니다만...계속 에러만 났었습니다
아는것이 없이 막적용을 하니 당연한 결과였을것입니다...dll 적용하는 방식이 다르네요
삭제된 모습이 아주 통쾌합니다.속을 많이 썪혔습니다.
3. 다시 레지를 추가를 하였습니다
4. SHRegDeleteKey를 적용한 결과입니다..레지를 삭제하는 결과는 같은데 dll이 다른것이 신기합니다..
5. 오늘밤은 편안하게 잘수가 있을것 같습니다...어제는...이 문제가 해결이 되지 않아서 머리가 아주 복잡했었습니다
오늘 이렇게 도움을 주신 마음은 잊지 않도록 하겠습니다...진심으로 감사드립니다
복 많이많이 받으십시요...
-
라랑 2024.03.17 18:37
오 수고하셨습니다. 저도 하던 PE 관두고 당장 이걸 따라해봐야겠네요.
-
개골구리 2024.03.17 18:53
수고하셨습니다
-
수리수리 2024.03.17 19:09
수고 하셨습니다^^
-
스마일^_^ 2024.03.17 20:14
감사합니다.
-
엄마갯돈 2024.03.17 21:18 수고하셨습니다
-
단편지식 2024.03.17 21:21
수고하셨습니다.
-
프리네 2024.03.18 03:36
수고 많으셨습니다...^^
-
고감맨 2024.03.18 13:57
수고하셨습니다.
수고하셧습니다.