Windows 기본 앱 건드리기
Intro
Windows 기본 앱(mspaint.exe
)을 퍼징하기 위해서 바이너리를 패치하려 하는데, 패치한 바이너리가 실행이 안된다.
내가 시도하던 방법은 두 가지였는데, 다음과 같다.
C:\Windows\System32
디렉토리에 존재하는mspaint.exe
파일을 복사하여 만든mspaint2.exe
로 퍼징하기C:\Windows\System32
에 존재하는mspaint.exe
파일을 수정하기
결과적으로 1번으로 진행한 것이 성공했고, 그에 대한 내용을 정리하려고 한다.
Trouble
Windows에서 기본적으로 C:\Windows\System32
디렉토리는 OS의 커널과 관련된 부분들이 많기 때문에 엄격하게 관리된다. C:\Windows\System32
디렉토리의 경우 읽기 전용으로 설정되어 있으며, 보안정책 역시 TrustedInstaller
를 제외한 일반 사용자 및 관리자 계정은 쓰기 권한이 없다. 따라서 C:\Windows\System32
내에 존재하는 파일을 수정하기 위해서는 해당 디렉토리의 권한을 수정해야 한다.
나는 1번 방법으로 진행했기 때문에, C:\Windows\System32
의 보안 정책을 수정할 필요는 없었다. 다만 2번 방법에도 문제를 겪었던 것이, System32
디렉토리 내에 존재하는 파일의 복사본을 만드는 것은 가능하지만, 해당 파일을 실행할 수는 없었다. 이는 mspaint.exe
에만 해당하는 문제가 아니라 System32
디렉토리에 존재하는 대부분의 응용프로그램들 모두에 해당하는 문제였다.
그에 대한 원인으로써 나는 총 두 가지의 이유를 생각했고, 다음과 같다.
- 응용프로그램이 실행하면서 특정 레지스트리 키를 사용하는 경우
- 응용프로그램이 실행하면서 특정 리소스를 가져오는 경우
위 두 가지의 경우 모두 전제조건이 있는데, "파일의 이름이 경로에 사용된다"라는 점이다. 그게 아니라면 현 상황을 설명하기가 힘들 것 같다.
처음에 그래서 everything
프로그램을 사용하여 이름에 mspaint
가 포함된 리소스 파일을 똑같이 복사하여 mspaint2
를 이름으로 하는 리소스를 생성했다. 윈도우 앱들이 .mui
확장자의 파일을 리소스로 사용한다고 알고 있었기 때문에, System32
디렉토리 내부에 존재하는 ko-KR\mspaint2.exe.mui
와 en-US\mspaint2.exe.mui
를 똑같이 만들어줬는데, 여전히 실행되지 않았다.
방황하던 와중 최근 Windows 는 리소스파일로 C:\Windows\SystemResources
디렉토리에 존재하는 .mun
확장자의 파일을 사용한다는 사실을 전해들었다. (리버싱오픈채팅방은 신이다.) 결국 C:\Windows\SystemResources\mspaint2.exe.mun
파일을 생성하니 mspaint2.exe
가 원본과 마찬가지로 실행가능하게 되었다.
Solution
mspaint2.exe
를 실행시킬 수 있었던 과정은 다음과 같다.
C:\Windows\System32
디렉토리 내에mspaint.exe
를 복사하여mspaint2.exe
를 생성한다.C:\Windows\SystemResources
디렉토리의 읽기 속성을 해제한다.C:\Windows\SystemResources
디렉토리의 소유자를 유저로 변경하고, 유저의 권한에 쓰기 권한을 준다.C:\Windows\SystemResources
디렉토리에mspaint.exe.mun
파일을 복제하여mspaint2.exe.mun
파일을 생성한다.C:\Windows\System32\mspaint2.exe
를 실행한다.
Details
우선 C:\Windows\SystemResources
디렉토리의 속성에 들어가서 읽기 전용을 해제한다.
그리고 보안 탭의 고급 설정으로 들어가면 다음과 같은 창을 볼 수 있는데, 여기서 소유자를 유저로 변경하고 밑의 유저를 더블클릭한다.
유저의 권한에 쓰기를 추가해준다.
이제 해당 C:\Windows\SystemResources
디렉토리에 파일 추가가 가능하다.
리소스를 복사해준다.
mspaint2.exe
를 실행한다.