※ 작년에 작성한 라이트업입니다. ※ 

 

 

 

Basic RCE L19

이 프로그램은 몇 밀리세컨드 후에 종료되는가 

 

 

1.     우클릭>search for>all intermodular calls를 선택해서 모든 명령들을 확인한다.

 

 

2.     F9를 눌러보면 제대로 실행이 되지 않는데 함수 목록을 살펴보면 IsDebuggerPresent 함수를 확인할 수 있고, 이 함수 때문에 디버깅이 제대로 되지 않는 것을 확인할 수 있다.

 

 

3.     TEST EAX, EAX CMP EAX, EAX로 고쳐서 IsDebuggerPresent 함수가 제대로 동작하지 못하도록 한다. 

 

 

4.     디버깅이 이제 제대로 되므로 프로그램의 실행 시간과 관련 있는 함수들을 탐색해본다. timeGetTime 함수는 프로그램의 실행 시간을 구하는 함수이다.

 

 

5.     timeGetTime 함수에 모두 BP를 걸어준다.

 

 

6.     Disassembly 부분을 살펴보면 CALL EDI만 다른 값을 갖는 것을 확인할 수 있다. 이것을 더블 클릭한다.

 

 

7.     F8로 하나씩 실행하다 보면 이 부분을 반복하는 것을 볼 수 있다. 이 부분이 프로그램의 실행 시간과 관련이 있는 부분이다.

 

 

8.     0044D3A까지 내려가면 CMP 명령어를 볼 수 있다.

 

 

9.     우클릭>Follow in Dump>Memory address를 클릭한다.

 

 

10.  70 2B라는 값을 확인할 수 있다. 이 값을 10진수로 변환하면 11120이라는 값을 얻을 수 있다. 이 값이 프로그램의 실행 시간이 된다.

 

728x90

'CTF > 리버싱' 카테고리의 다른 글

CodeEngn(코드엔진) advance 01  (0) 2020.06.25
CodeEngn(코드엔진) basic 20  (0) 2020.06.25
CodeEngn(코드엔진) basic 18  (0) 2020.06.25
CodeEngn(코드엔진) basic 17  (0) 2020.06.25
CodeEngn(코드엔진) basic 16  (0) 2020.06.25