| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- 크랙미
- x64
- rev
- image section header
- Rich Header
- pe format
- x32
- 리치헤더
- Python
- __fastcall
- 32bit
- stack frame
- Programmers
- ABI
- __stdcall
- Reversing
- Dos Stub
- Image dos header
- 실행파일
- __vectorcall
- __cdecl
- RVA
- CodeEngn
- 함수 호출 규약
- 리버싱
- 프로그래머스
- crackme
- Calling Convention
- 파이썬
- 코드엔진
- Today
- Total
kj0on
[RCE] Basic L01 본문
0. 실행환경
0-1. 운영체제 (1)

0-2. 툴 (2)


1. 파일

password : codeengn

2. 프로그램 동작


프로그램을 실행했을 때의 동작이다. 두 개의 팝업 창을 띄워주는 것을 볼 수 있다. 나타나는 메시지를 확인해 보면 문제에서 무엇을 요구하는지를 알 수 있다. 첫번째 팝업 메시지를 보면 프로그램을 실행했을 때 하드디스크가 CD롬으로 인식하기를 요구하고 있다. 이후 Error 팝업이 나타나는 것을 봐서 CD-ROM으로 인식이 되지 않았다는 것을 알 수 있다.
3. Detect It Easy

32비트 실행파일, 델파이로 작성된 프로그램인 것을 알 수 있다.
4. 분석

EP 근처에서 GetDriveTypeA함수를 확인할 수 있다.

인자로 0x402094에 있는 데이터("c:\\")가 인자로 사용된다.

다음 동작으로 레지스터 값을 연산하는 코드를 볼 수 있다. ESI값을 3번 inc, EAX값을 2번 dec하고 cmp한다. 이후 조건부 분기 후 메시지를 출력하고 프로그램이 종료된다.
5. 풀이

ESI의 값은 3번 증가하기 때문에 0x401003이 된다. EAX의 값은 2번 감소하기 때문에 GetDriveTypeA의 반환 값은 0x401005가 되야한다. 윈도우 버전에 따라 EP 접근 전 ESI 초기화 방식이 달라진다. 초기 값이 0x401000으로 나타나는 이유 또한 윈도우 버전이 높기 때문이다. 이전 버전을 고려하면 GetDriveTypeA의 반환값은 0x5가 돼야한다.
자세한 분석 내용은 https://kj0on.tistory.com/1 참고
'Reversing > CodeEngn' 카테고리의 다른 글
| [RCE] Basic L06 (0) | 2025.06.29 |
|---|---|
| [RCE] Basic L05 (0) | 2025.06.29 |
| [RCE] Basic L04 (0) | 2025.06.29 |
| [RCE] Basic L03 (0) | 2025.06.28 |
| [RCE] Basic L02 (0) | 2025.06.28 |