CodeEngn Write Up/Advance

CodeEngn Advance RCE L01 Write Up

서원근양학계정 2022. 5. 18. 14:45

이 프로그램은 몇 밀리세컨드 후에 종료 되는가
정답인증은 MD5 해쉬값(대문자) 변환 후 인증하시오

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

 

Advance 단계의 문제까지 왔네요.

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

 

어디서 많이 본듯한 창이 뜹니다.

시간이 지나니 저절로 꺼지는 것 역시 확인했습니다.

먼저 ExeinfoPE라는 프로그램을 이용해서 정적 분석을 시도해보겠습니다.

UPX로 패킹된 것을 알 수 있습니다.

언패킹 도구를 이용해서 언패킹을 진행하겠습니다.

 

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

OllyDBG에서 프로그램을 실행시켰더니 이런 창이 뜹니다.

 

아무래도 안티 디버깅 기법이 적용된 것 같습니다.

함수 목록에서 IsDebuggerPresent함수를 찾을 수 있었고 무력화시켜주었습니다.

 

그리고 저희는 알고 있습니다. timeGetTime함수를 찾아야 한다는 사실을.

모든 timeGetTime함수에 BP를 걸어줍니다.

 

그리고 프로그램을 실행시키면 어떤 부분에서 멈추게 됩니다.

 

timeGetTime함수를 2번 호출해서 두 값을 비교하는데 ESI에 있는 값이 더 작을 수밖에 없고 점프합니다. 

 

EAX -= ESI를 해주면서 프로그램이 시작된 시점부터의 시간을 구하고 있습니다.

따라서 아래에서 비교하는 EBX+4의 값이 정답이 될 것을 알 수 있습니다.

 

0x3337 == 13111

 

Flag: 13111

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

CodeEngn Advance RCE L06 Write Up  (2) 2022.05.19
CodeEngn Advance RCE L05 Write Up  (2) 2022.05.19
CodeEngn Advance RCE L04 Write Up  (4) 2022.05.18
CodeEngn Advance RCE L03 Write Up  (4) 2022.05.18
CodeEngn Advance RCE L02 Write Up  (1) 2022.05.18