kj0on

[RCE] Basic L01 본문

Reversing/CodeEngn

[RCE] Basic L01

kj0on 2025. 6. 28. 14:15
목차 접기

0. 실행환경

 

0-1. 운영체제 (1)

Window 11 Home


0-2. 툴 (2)

x32dbg
Detect it easy


1. 파일

https://codeengn.com/challenge/rce_basic

 

01.7z
0.00MB

 

password : codeengn


2. 프로그램 동작

[이미지1] abex' crackme 1
[이미지2] abex' crackme 1

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


3. Detect It Easy

[이미지3] DIE 실행 결과

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


4. 분석

[이미지4] EntryPoint

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

 

[이미지5] GetDriveTypeA

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

 

[이미지6] 연산 코드

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


5. 풀이

[이미지7] 연산 코드

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