본문 바로가기

Reversing/CodeEngn

[CodeEngn] Basic RCE L01풀이

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com


문제를 보니 CD-Rom으로 인식하려면 GetDriveTypeA의 리턴 값이 무엇이 되어야 하냐고 한다.

그림 1

일단 GetDriveTypeA를 찾아보았다

 

그림 2

그림 2를 보니 CD-Rom으로 인식되려면 5가 되어야 한다고 한다.

 

이제 다운로드한 파일을 실행시켜보았다.

확인을 누르면 너는 CD-ROM이 아니라는 명령어가 나오고 종료된다.

 

그림 3

X32 디버거를 통해 분석해보았다.

일단 제일 처음에 문자열 찾기를 통해 확인할 수 있는 문자열이 있나 보았다.

 

그림 4

우리는 YEAH! 쪽으로 가야하는 것 같다.

 

함수를 클릭해서 들어가 보았다.

그림 5

그래프 모드로 전체적인 흐름이 안보이길래 어차피 짧으니까 한 줄씩 분석해보았다.

 

위에서 GetDriveTypeA라는 함수를 호출한다.

그러고 나서 esi 값을 하나 증가시키고, 반환 값인 eax는 감소시킨다.

의미 없는 점프문이 나오고, 다시 esi는 두 번 증가, eax는 1번 감소시킨다.

 

그리고 eax와 esi를 비교하여서 두 값이 같으면 성공 flag를 출력시켜주는 것 같다.

 

일단 정리해보면 esi는 총 3번 증가, eax는 총 2번 감소시킨다.

 

브레이크 포인트를 걸어서 esi에 어떤 값이 들어가 있나 확인해보았다.

 

그림 6

레지스터 부분을

보니 esi에는 401000이라는 값이 들어있다.

 

그럼 결국

Eax-2 = 401000+3이 되므로

Eax = 401005가 된다.

 

이제 eax 값을 00401005로 수정하고 실행시켜보면 이제 내 하드웨어가 CD-ROM이라고 생각한다고 한다!!

 

그림 7

 

'Reversing > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L06풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L05 풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L04풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L03풀이  (0) 2021.08.01
[CodeEngn] Basic RCE L02풀이  (0) 2021.07.31