문제를 보니 프로그램이 종료되는데 걸리는 시간을 찾으라고합니다 :D
PUSHAD가 시작되는건 패킹이 되어 있다는 소리이니 편의상 언패킹 후 진행 하겠습니다!
프로그램을 실행시키면 이런 메시지 박스가 뜹니다...!
그래서 뭔가 이상해서 함수가 터지는 곳을 들어가 보았습니다 :D
들어가니 IsDebuggerPresent 함수가 보입니다!
IsDebuggerPresent 함수는 디버깅을 탐지하는 함수로써 디버깅중이면 EAX값을 1로 반환합니다 ㅎㅎㅎ
저는 디버깅하여 분석을 해야하니 여러방법이 있지만
그 중 가장 간단한 방법인 EAX를 0으로 변환시켜 계속 분석을 진행했습니다 :D
그러자 다른 메시지박스가 나오는군요 :D
여기서 계속 갈피를 못잡고 있다가 시간을 찾아야하는데 그에 관한 함수인 timeGetTime 함수가 보였습니다!
그래서 브레이크를 걸고 다시 실행을 해보았습니다 :D
IsdebuggerPresent함수를 우회한 후 [F9]를 눌렀는데 딱 잡히는 부분이 있었습니다!
디버깅 탐지 우회를 하지 않고 실행했을 땐 잡히지 않았는데 우회하니 보이더라구요!
timeGetTime함수를 실행시키고 난 후 어떤 한 분기점을 마주칠 수 있었습니다 :D
EAX와 [EBX+4]의 값을 비교하는 것인데
EAX에는 timeGetTime함수로 현재 시스템 시간을 반환하여 담은 값이고 [EBX+4]에는 어떤 시간값이 담겨져있겠죠 :D?
그래서 [EBX+4]를 확인해보니 2B70이 담겨져 있는 것을 확인해볼 수 있었습니다!
그래서 이게 혹시 프로그램을 종료시키는 값이지 않을까 생각해서 체크해보니
정답이였던 것을 확인해 볼 수 있었습니다 :D
다른 문제에 비해서 갑자기 난이도가 확 올라간 문제가 아닌가 싶네용..!!
좀 엉성하지만 이만 문제풀이를 마치겠습니다 :D
'CTF > CodeEngn.kr' 카테고리의 다른 글
Basic RCE L18 (0) | 2020.04.02 |
---|---|
Basic RCE L17 (0) | 2020.04.01 |
Basic RCE L16 (0) | 2020.03.31 |
Basic RCE L15 (0) | 2020.03.30 |
Basic RCE L14 (0) | 2020.03.28 |