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