0x0102
[CodeEngn] Basic RCE L14 본문
Name이 CodeEngn 일때 Serial을 구하시오
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)
Ex) 11111
먼저 문제에서 bruteforce가 필요하다 했으므로 bruteforce가 무엇인지 알아보자.
브루트 포스(brute force), 즉 무차별 대입은 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 암호를 해독하는 방법이다. 다음과 같은 방법이 필요하다는 것을 인지하고 문제를 풀어야겠다.
문제 파일을 다운로드 받고 PEiD에 넣은 결과 upx 언패킹이 필요해보였다.
명령어를 사용하여 해당 파일을 언패킹 하였다.
이후 이뮤니티 디버거에서 열어보았다.
f8키로 진행시키면 다음과 같은 입력창이 나온다.
두 줄에 거쳐 아무 값이나 입력하고 check를 누르면 시리얼 넘버가 틀렸으니 다시 시도하라는 메시지 창이 뜬다.
아마도 윗줄은 문제에서 알려준 name (CodeEngn) 을 기입하고 밑줄에는 시리얼 넘버를 입력하는 것 같다.
계속해서 코드를 살펴보았다.
004012F6에서 값을 입력받는 것 같다.
해당 줄에 bp를 걸고 다시 실행시킨 다음 입력창에 이름과 아무 숫자를 대입했다.
그리고 다시 코드를 살펴보았다. 내가 입력한 이름과 시리얼 넘버를 확인할 수 있었다.
또한 하단의 명령들에서 분기가 일어나기 전 EAX 값과 ESI 값을 비교하는 것을 확인할 수 있었다.
분기 전 라인에 bp를 걸고 실행시켜보았다.
이후 한줄 더 진행하여 비교대상, 즉 시리얼 값인 ESI 값을 확인할 수 있다.
끝으로 ESI 값은 16진수이므로 10진수로 변환해준다.
다시 돌아가 프로그램을 실행하고 CodeEngn , 76193을 입력해준다.
이후 check 해보면 정답임을 알 수 있다.
따라서 정답은 76193.
'Write Up > CodeEngn' 카테고리의 다른 글
[CodeEngn] Basic RCE L16 (0) | 2022.11.15 |
---|---|
[CodeEngn] Basic RCE L15 (0) | 2022.11.10 |
[CodeEngn] Basic RCE L13 (0) | 2022.11.08 |
[CodeEngn] Basic RCE L12 (0) | 2022.11.03 |
[CodeEngn] Basic RCE L11 (0) | 2022.11.03 |