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

'CodeEngn Write Up > Basic' 카테고리의 다른 글

CodeEngn Basic RCE L16 Write Up  (0) 2022.03.31
CodeEngn Basic RCE L15 Write Up  (3) 2022.03.11
CodeEngn Basic RCE L13 Write Up  (0) 2022.03.11
CodeEngn Basic RCE L12 Write Up  (1) 2022.02.21
CodeEngn Basic RCE L11 Write Up  (0) 2022.02.17