Windows 11 64bit 환경에서 UPX 3.96-win64 버전을 설치 한 뒤 UPX로 notepad.exe를 패킹한 뒤 패킹된 상태의 PE 파일을 실행하거나 x64dbg와 같은 디버거에 로드하려고 하면 위의 사진과 같은 메시지가 뜨며 실행되지 않거나 로드되지 않는다.
결론부터 말하자면 Windows 7 이후 버전에서는 CFG(Control Flow Guard) 보안 기능으로 인해 안되는 것이다.
https://github.com/upx/upx/issues/398
CFG 기능은 메모리 손상 취약점을 방지하기 위해 만들어진 보안 기능으로 애플리케이션이 코드를 실행할 수 있는 위치를 엄격하게 제한함으로써 Exploit이 BOF와 같은 취약점을 통해 임의의 코드를 실행하는 것을 어렵게 만든다.
Windows 7 이후 버전에서 CFG 기능이 활성화된 PE 파일을 UPX로 패킹하면 사용할 수 없게 된다.
그리고 upx로 패킹한 CFG 기능이 활성화된 PE 파일을 upx -d 옵션으로 언패킹한 후 생성된 파일을 실행하더라도 이 역시 실행되지 않는다.
즉, Windows 7 이후 버전에서는 CFG 기능이 활성화된 PE 파일들을 패킹하지 말라고 한다.
만약 공부 또는 실습 목적으로 notepad.exe와 같은 파일을 upx로 패킹하려는 것이라면
가상머신에 windows 7 이전 버전을 설치한 뒤 가상 머신 환경에서 upx를 설치하고 notepad.exe를 패킹한 뒤 패킹된 해당 파일로 공부하면 된다.
참고 URL
https://github.com/upx/upx/issues/26
https://github.com/upx/upx/issues/154
https://docs.microsoft.com/ko-KR/windows/win32/secbp/control-flow-guard