yon11b

[SK 쉴더스 루키즈] PE 구조 실습- 손상된 notepad 파일 복구하기 본문

보안/SK 쉴더스 루키즈

[SK 쉴더스 루키즈] PE 구조 실습- 손상된 notepad 파일 복구하기

yon11b 2026. 5. 27. 20:45
반응형

환경: Windows XP

1번: 시그니처 수정

메모장이 안 열린다.

 

HxD로 보자.

MZ 시그니처가 뒤에 가 있다.

 

왼: 헤더가 손상된 파일 / 오: 정상 메모장 파일

16bytes 만큼 차이가 난다.

 

아까 MZ 시그니처 전에 있던 게 이상한 데이터가 삽입된 것이라고 추측할 수 있다.

 

그래서 그 데이터를 지워준다.

 

성공!

 

 

2번: 시그니처, 주소 위치 수정

이번에는 파일 크기는 똑같다.

 

 

1. MZ도 없고 2. PE 시그니처도 없다.

 

3. IMAGE DOS Header가 F0 00 00 00 을 가리킨다.

그런데 그 위치에는 아무것도 없다. 00 00 00 00 이다. 저 자리에 PE를 기대할 수 있다.

그런데 원본 메모장 파일과 비교해보면, F0 00 00 00 자리에 PE가 있는게 아니라 E0 00 00 00 자리에 있고,  IMAGE DOS Header 도  E0 00 00 00 을 가리킨다.

원본 메모장

빨간색으로 밑줄 친 부분을 똑같이 3군데를 수정해주면 된다.

 

3번: Subsystem 값 수정

이번에는 HxD의 편리한 비교 기능을 사용해서 문제를 풀어보자.

analysis에서 data comparision > compare 클릭하고 비교할 두 개의 파일을 선정한다.

화면이 로딩된 후, F6을 누르면 해당 커서 다음 부분 중에서 두 파일이 서로 다른 부분을 찾아준다.

 

왼쪽이 손상된 파일 / 오른쪽이 원본 파일이다.

저 주소는 PE Subsystem 이 들어가는 자리이다.

 

PE Subsystem 값

의미
0 IMAGE_SUBSYSTEM_UNKNOWN → 알 수 없음
1 IMAGE_SUBSYSTEM_NATIVE → 커널/드라이버 계열
2 IMAGE_SUBSYSTEM_WINDOWS_GUI → 일반 GUI 윈도우 프로그램
3 IMAGE_SUBSYSTEM_WINDOWS_CUI → 콘솔 프로그램(cmd 형태)

 

원본 notepad.exe는 GUI(Subsystem=2) 환경에서 실행되도록 만들어졌는데, 손상 파일에서 Subsystem을 Native(1)로 바꾸면 Windows가 다른 실행 환경으로 처리하려 하므로 프로그램이 기대하는 환경과 실제 실행 환경이 달라져 정상 실행되지 않았던 것이다.

해결: 01 을 02로 바꿔주면 된다.

 

4번: Image base 값 수정

저 영역이 다르다고 한다. 뭔지 봐보자.

손상된 파일

딱 봐도 image base가 비정상적으로 큰 것을 확인할 수 있다. HxD에서 저 부분을 1000으로 수정해준다.

 

5번: 수정 안 해도 실행은 됨 

얘는 확인해보니 O/S Version, Image Version 이 다르다.

원본 파일

그런데 얘는 수정해주지 않아도 실행이 잘 된다.

=> 운영체제 정보가 없어도(틀려도) 실행은 된다.

 

Major O/S Version 이란?

이 PE 파일이 최소 어느 정도 Windows 버전을 기대하고 만들어졌는가? 를 나타내는 값

 

Major Image Version이란?

이 프로그램 자체의 버전을 나타내는 값

 

6번: Number of Section, Directories 수정

앞 DOS Header 부분이 다르다.

 

일단 수정하지 말고 뒷부분도 봐보자.

이 부분은 Number of Section 부분이다. 

얘는 꼭 수정해 주어야 할 것 같다. 얘만 수정해주자.

그런데 여전히 실행이 안 된다. 계속해서 뒷부분도 봐주자.

 

 

이 부분은 Number of Data Directories다.

여기도 수정해주자.

그러면 정상적으로 notepad.exe가 실행은 된다.

즉, 앞에서 수정해 주지 않았던 checksum, DoSStub 는 실행에는 영향을 미치지 않는다는 것을 알 수 있다.

728x90