CodeEngn Write Up/Basic

CodeEngn Basic RCE L19 Write Up

서원근양학계정 2022. 5. 13. 18:52

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

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

 

먼저 문제 파일을 실행시켜보겠습니다.

 

이런 창이 뜨고 시간이 지나니 저절로 꺼집니다.

 

OllyDBG를 이용한 동적 분석을 진행하기 전에 PEiD를 이용한 정적 분석을 진행해보겠습니다.

 

보통은 바로 OllyDBG를 이용한 동적 분석을 진행했는데 정적 분석하기를 잘했네요.

OllyDBG에서 수동으로 언패킹을 진행할 수도 있겠지만 분석의 효율을 생각해서 언패킹 도구를 이용하겠습니다.

 

언패킹이 잘 진행되었습니다.

이제 OllyDBG를 이용해서 동적 분석을 진행해보겠습니다.

F9를 이용해서 실행시키니 이런 창이 뜨네요.

 

안티 디버깅 기법이 적용된 것을 확인할 수 있습니다.

함수 검색 기능을 이용해서 IsDebuggerPresent함수를 찾았고

 

TEST EAX, EAX를 CMP EAX, EAX로 바꿔서 무력화시켜주었습니다.

그리고 시간과 관련되어 보이는 함수들에 BP를 걸어주었습니다.

 

그리고 프로그램을 실행시키면

 

이 부분에서 멈추게 됩니다.

먼저 CALL EDI를 통해서 timeGetTime함수를 호출합니다.

이 함수는 운영체제가 실행된 시점부터 지금까지 흐른 시간을 밀리초(ms)로 반환하는 함수입니다.

자세한 정보는 이 링크를 참조해주세요.

https://docs.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi-timegettime

 

timeGetTime function (timeapi.h) - Win32 apps

The timeGetTime function retrieves the system time, in milliseconds. The system time is the time elapsed since Windows was started.

docs.microsoft.com

 

EAX에는 운영체제가 실행된 시점부터 지금까지의 시간이 들어가게 되고 MOV ESI, EAX를 통해서 ESI에 이 값을 복사하게 됩니다.

그리고 0x00444C5F에 있는 CALL EDI를 통해서 다시 한번 timeGetTime 함수를 실행하고 CMP EAX, ESI를 실행합니다.

timeGetTime함수는 운영체제가 실행된 시점부터 지금까지의 시간이 들어있으므로 처음에 호출한 값이 들어있는 ESI의 값이 더 작을 수밖에 없고 따라서 무조건 점프하게 됩니다.

 

먼저 SUB EAX, ESI를 통해서 첫 번째 timeGetTime 함수가 호출된 시간과 두 번째로 호출된 시간의 차를 구합니다.

그리고 그 값과 EBX+4에 있는 값을 비교해서 EAX의 값과 비교합니다.

만약 EAX의 값이 더 작다면 0x00444D4E에 있는 명령어를 통해서 다시 EAX에 timeGetTime함수의 리턴값을 받고 이 과정을 반복합니다.

만약 EAX의 값이 더 크다면 프로그램은 종료됩니다.

그렇다면 EBX+4의 값이 우리가 찾는 값임을 알 수 있습니다.

 

16진수 0x00002B70을 10진수로 바꾸면 11120입니다.

 

Flag: 11120

'CodeEngn Write Up > Basic' 카테고리의 다른 글

CodeEngn Basic RCE L20 Write Up  (1) 2022.05.18
CodeEngn Basic RCE L18 Write Up  (2) 2022.05.12
CodeEngn Basic RCE L17 Write Up  (1) 2022.04.22
CodeEngn Basic RCE L16 Write Up  (0) 2022.03.31
CodeEngn Basic RCE L15 Write Up  (3) 2022.03.11