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