Name이 CodeEngn 일때 Serial을 구하시오
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)
Ex) 11111
먼저 프로그램을 실행시켜보겠습니다.
이름과 시리얼을 입력할 수 있는 칸이 있는 창이 뜹니다.
임의의 값을 넣고 CHECK버튼을 눌러보겠습니다.
당연하게도 실패 메시지가 출력됩니다.
이제 프로그램을 OllyDBG로 열어보겠습니다.
PUSHAD가 보이네요.
이 명령어가 처음에 보이면 이 프로그램은 패킹되어있다고 추측할 수 있습니다.
패킹에 대한 내용은 여기를 참고해주세요.
https://brainfreeee.tistory.com/33
자세한 정보를 얻기 위해 PEiD를 통해서 확인해보니 UPX로 언패킹 된 것을 확인할 수 있습니다.
수동으로 언패킹을 할 수도 있겠지만 편하게 UPX언패킹 도구를 이용하겠습니다.
언패킹에 대한 내용은 여기를 참고해주세요.
https://brainfreeee.tistory.com/34
언패킹이 되었으니 이제 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 |