CodeEngn Write Up/Basic

CodeEngn Basic RCE L14 Write Up

서원근양학계정 2022. 3. 11. 18:28

Name이 CodeEngn 일때 Serial을 구하시오
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)
Ex) 11111

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

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

ch.codeengn.com

 

먼저 프로그램을 실행시켜보겠습니다.

 

이름과 시리얼을 입력할 수 있는 칸이 있는 창이 뜹니다.

임의의 값을 넣고 CHECK버튼을 눌러보겠습니다.

 

당연하게도 실패 메시지가 출력됩니다.

이제 프로그램을 OllyDBG로 열어보겠습니다.

 

PUSHAD가 보이네요.

이 명령어가 처음에 보이면 이 프로그램은 패킹되어있다고 추측할 수 있습니다.

패킹에 대한 내용은 여기를 참고해주세요.

https://brainfreeee.tistory.com/33

 

패킹(Packing)에 대하여

패킹(Packing)이란? 패킹(Packing)은 실행압축이라는 뜻을 가지고 있습니다. 실행압축이란 말 그대로 압축을 푸는 과정 없이 바로 실행시킬 수 있는 압축방법입니다. 실행압축은 일반적인 압축인 Z

brainfreeee.tistory.com

 

자세한 정보를 얻기 위해 PEiD를 통해서 확인해보니 UPX로 언패킹 된 것을 확인할 수 있습니다.

수동으로 언패킹을 할 수도 있겠지만 편하게 UPX언패킹 도구를 이용하겠습니다.

언패킹에 대한 내용은 여기를 참고해주세요.

https://brainfreeee.tistory.com/34

 

언패킹(Unpacking)에 대하여

언패킹(Unpacking)이란? 언패킹이란 패킹의 반대되는 개념으로, 패킹했던 파일의 패킹을 푸는 것을 의미합니다. 패킹된 프로그램이 실행되면 먼저 패킹이 된 원본 코드를 언패킹시키는 해제하는

brainfreeee.tistory.com

 

 

언패킹이 되었으니 이제 Ollydbg로 분석해보겠습니다.

문자열 검색 기능을 이용해서 실패 메시지와 성공 메시지를 출력하는 부분을 찾을 수 있었습니다.

 

분기문과 비교하는 부분이 있으니 비교할 때의 레지스터의 값을 확인하면 답을 구할 수 있을 것으로 생각됩니다.

F9를 이용해서 실행시키고 임의의 값을 넣은 뒤 레지스터의 값을 확인해보았습니다.

 

EAX에 0x4D2라는 값이 들어있습니다.

0x4D2는 10진수로 1234입니다.

따라서 EAX의 값이 저희가 입력한 값이라는 것을 알 수 있습니다.

ESI에 들어있는 값은 0x129A1이고 이 값을 10진수로 변환하면 76193입니다.

76193을 프로그램에 입력하니 성공 메시지가 출력됩니다.

 

Flag: 76193