서브웨이

CodeEngn Basic RCE L19 풀이 본문

Reverse Engineering/CodeEngn

CodeEngn Basic RCE L19 풀이

샌드위치메이커 2020. 1. 23. 17:11

일단 뭔가 간단해보인다.

UPX로 패킹이 되어있다. 매번 하던대로 OEP를 찾아서 분석을 하자.

OEP로 점프하는 부분을 찾았다.

근데 분석하다보니 이상한 메시지가 뜬다.

디버거인지 확인하는 함수가 들어있는것 같다. 분석하기 귀찮아 졌으니 일단 언패킹을 해놓자.

역시나 있다....

귀찮으니 그냥 패치해놓자.

분석을 하다보니 이 부분을 지나면

이런 메시지가 뜨고 몇 초 후에 종료된다. 일단 저기가 핵심인 것 같다.

몇 밀리세컨 뒤에 종료되는지를 보는거니 sleep이 쓰인곳을 찾자.

그냥 sleep이 쓰이는 곳에 다 중단점을 걸어봤지만 하나도걸리지 않는다.

한번 time을 키워드로 찾아보자.

timeGetTime이라는 것이 자주 쓰이는 것을 알 수 있는데 이는 운영체제 시작 이후 흐른 시간을 가져오는 함수이다. 따라서 저 함수가 쓰이는 곳에 전부 중단점을 걸어보자.

딱 한곳에서 걸립니다. 이곳을 중점적으로 봅시다.

간단히 보면 timeGetTime함수에서 받아온 값을 esi에 저장하고  다시 timeGetTime함수를 불러서 반환값과 아까 esi에 저장한 값을 비교해서 eax가 esi보다 크거나 같으면 444D38로 점프한다.

444D38로 가보면

eax와 esi의 차이가

2B70보다 크거나 같으면 종료가 되고 작다면 다시 저 과정을 반복한다.

따라서

10진수로 바꾼 저 값이 정답.

'Reverse Engineering > CodeEngn' 카테고리의 다른 글

CodeEngn Basic RCE L20 풀이  (0) 2020.01.28
CodeEngn Basic RCE L18 풀이  (0) 2020.01.21
CodeEngn Basic RCE L17 풀이  (0) 2020.01.20
CodeEngn Basic RCE L16 풀이  (0) 2020.01.17
CodeEngn Basic RCE L15 풀이  (0) 2020.01.16
Comments