| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- linux
- 백엔드
- SK쉴더스
- 루키즈 31기
- c
- 애플리케이션 계층
- 레나튜토리얼
- 깃
- sk쉴더스 루키즈
- Dreamhack
- 알고리즘
- 우테코
- SK쉴더스루키즈
- 서울청년문화패스
- 자바
- 트랜스포트 계층
- React
- 루키즈31기
- sk 쉴더스 루키즈
- 우아한테크코스
- 웹개발
- 코리안챔버오케스트라
- 다이나믹 프로그래밍
- 진입차수
- 프리코스
- 프랑스어 #프랑스어배우기 #프랑스어독학 #델프인강 #시원스쿨프랑스어 #delf독학 #델프 #프랑스어기초 #프랑스어공부
- webhacking
- 위상 정렬
- 악성코드 분석
- 예술의 전당
- Today
- Total
yon11b
[SK 쉴더스 루키즈] PE 구조 실습- 손상된 notepad 파일 복구하기 본문
환경: 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 는 실행에는 영향을 미치지 않는다는 것을 알 수 있다.
'보안 > SK 쉴더스 루키즈' 카테고리의 다른 글
| [SK 쉴더스 루키즈] 기초정적분석으로 악성행위 예측하기 (Practical Malware Analysis LAB 01) (0) | 2026.05.28 |
|---|---|
| [SK 쉴더스 루키즈] windows API를 활용한 악성 코드들 (0) | 2026.05.28 |
| [SK 쉴더스 루키즈] 윈도우 API 개념 & ADS 실습 (0) | 2026.05.27 |
| [SK 쉴더스 루키즈] notepad로 알아보는 PE 파일 구조 (feat: PEview) (0) | 2026.05.27 |
| [SK 쉴더스 루키즈] AWS 모니터링 (0) | 2026.05.13 |
