반응형

문제는 남은 군생활이 며칠인지 원하고 있다. 

 

Die로 열어본다.

UPX로 패킹이 되어 있다. 

 

언패커로 간단하게 언패킹을 진행해준다.

 

 

패킹을 해제한 후, 파일을 실행시켜 본다.

확인을 누르면 1씩 증가하며 새로운 메세지 박스가 뜨게 된다. 

 

 

프로세스를 죽이고 디버거로 열어본다.

디버거로 열어보니 오류 메시지가 뜬다. 안티 디버깅 기법이 적용 되어 있는 것 같다.

jne구문을 je로 바꾸어 간단하게 우회하고 패치해준다.

 

 

패치한 파일을 디버거로 열어보면, 그냥 실행 했을 때와 같이 1씩 늘어나는 메시지 박스가 뜨게 된다.

모든 메시지 박스에 브레이크 포인트를 걸고 확인해본다.

 

메시지박스에 해당하는 구문을 찾았다.

esp+20 주소에는 증가하는 수가 담겨져 있는 것 같다.

 


esp+20을 관찰하고 있으면, 언제 또 다른 이벤트가 실행 되는지 알 수 있을 것이다.

1이 들어있다.

다음 구문을 F8로 한줄씩 실행시켜보며 확인 하였는데, 굉장히 많은 구문을 거쳐 다음 수를 출력 하였다. 

 

다른 방법으로 찾아보기로 하였다.

메시지 박스를 실행 할 때마다 확인을 눌러서 다음 구문으로 가면, 시간이 오래 걸리기 때문에 메시지 박스 부분을 없애주겠다.

메시지 박스를 없애주고 F9로 다른 이벤트가 언제 실행 되는지 확인해보면,

 

다른 이벤트 없이 어느순간 그냥 프로그램이 종료 되어 버린다.

 

더욱 편하게 답을 찾기 위해 다른 방법을 생각 했는데, MessageBox가 호출되는 횟수는 메시지 박스에 보여지는 수와 동일 할 것이다. 

nop으로 처리한 메시지 박스 아래에 브레이크 포인트에 옵션을 주고, 중단 조건이 0이면 브레이크하지 않는다는 것이다 대신 카운트는 올라간다.

 

프로그램 종료 직전에 브레이크 포인트를 걸어주고 이 함수를 몇번 호출 했는지 알아보자.

종료되는 함수에 브레이크 포인트를 걸어준 다음 F9로 확인해보면,

messagebox구문쪽은 총 790번 실행 되었다. 군 생활이 790일 남은 것일까? MD5로 바꾸어 인증해본다.

 

 

 

정답!

반응형

'Reversing 문제 풀이 > CodeEngn.com_Advance' 카테고리의 다른 글

codeengn-advance-L08 풀이  (0) 2022.05.12
codeengn-advance-L07 풀이  (0) 2022.05.11
codeengn-advance-L05 풀이  (0) 2022.05.06
codeengn-advance-L04 풀이  (0) 2022.05.04
codeengn-advance-L03 풀이  (0) 2022.05.04