상세 컨텐츠

본문 제목

[Write-up] CodeEngn Basic RCE 19

Reversing Write-Up/02.CodeEngn Basic

by RACC8N 2020. 1. 22. 16:17

본문

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

 

풀이 : 

프로그램을 실행시키면 다음과 같은 창이 뜨고 몇 초뒤에 꺼진다.

 

디버거를 실행시켜 해당 메세지를 출력해주는 곳으로 가보자.

 

근데 계속 이러한 문구가 뜬다.

 

원인을 찾아보자.

 

해당 메세지에 관련된 문자열을 찾았다. 이 메세지박스를 출력해주는 분기문을 찾아 올라가봤다.

 

IsDebugger함수를 찾았고, 밑에 JNE 4338DE 분기문을 확인하였다. 

 

이부분을 우회하기위해 JNE 분기문을 JE로 바꿔주겠다.

 

해당 분기문을 우회하였고, MessageBox는 더이상 생기지 않았다. 계속 분석해보자.

 

처음 실행했을때 나온 MessageBox를 출력해주는 위치를 찾았다.

 

원래 실행을 하면 MessageBox를 출력하고 몇 초뒤에 창이 꺼지는데, 창이 꺼지는 부분에 대한 정보는 없는것 같다.

 

함수를 검색해보자.

 

Sleep 함수에 BP를 걸고 확인해보자.

 

많은 Sleep에 BP를 걸었지만 444C59에 제일 먼저 걸렸다.

 

Sleep 함수 호출 후 jae 분기문으로 인해 444D38로 점프하게 된다.

 

또한 Sleep 함수 위에 timeGetTime 함수를 볼 수 있다.

 

이 함수는 시스템 시간을 밀리세컨드로 보내준다.

 

timeGetTime 함수의 리턴값과, Sleep의 리턴값을 비교한다.

 

여기서 분기문에의해 점프하게 된다.

 

여기서 Sleep리턴값과 timeGetTime의 리턴값의 차를 구해서 ebx+0x4의 값보다 크거나 같으면 분기문을 통과하여 프로세스를 종료하게 된다.

 

따라서 종료되는 시점은 ebx+0x4의 값인 2b70임을 알 수 있다.

 

11.12초 이다.

 

 

 

 

관련글 더보기

댓글 영역