Security/Reversing

코드엔진 Basic RCE L04

bonggang 2020. 3. 12. 17:45

문제


https://codeengn.com/challenges/

 

CodeEngn.com [코드엔진] - Challenges

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.

codeengn.com

 

문제풀이


이번에도 먼저 실행부터 해본다. 특별한 기능은 보이지 않고 디버깅 당함이라는 글씨가 반복해서 뜨는 것을 확인할 수 있다.

 

L03처럼 사용하는 함수 목록부터 확인해보겠다.

 

이번에도 함수 목록에서 수상해 보이는 함수명을 찾았다.

IsDebuggerPresent라니 누가봐도 디버거 프로그램을 탐지하는 기능을 가지고 있을 것 같다.

 

더블 클릭해서 함수를 자세히 살펴보자!

먼저 IsDebuggerPresent 함수에서 F8 키를 눌러 Step over를 해봤는데 디버깅 당함이 나오지 않는다.

정작 디버깅 당함은 call 04.408190 이후 디버깅 당함이 표시된다.

push에 있는 주소를 따라가니 디버깅 당함이라는 글자가 보인다. 

 

그리고 난 뒤 다시 끝난 것을 확인해보니

이 구문이 반복된다.

 

이 부분을 확인해보면

1. 1초 쉰다.

2. call 함수 실행

3. IsDebuggerPresent 디버그 모드인지 확인

4. call 함수 실행

5. "정상" 혹은 "디버깅 당함" 문자열 받아옴

6. 문자열을 콘솔 창에 출력

으로 추측.

 

EAX 값을 0으로 바꿔주면 정상으로 표시된다.

 

이 문제의 정답은 IsDebuggerPresnet다.