0x0102

[CodeEngn] Basic RCE L16 본문

Write Up/CodeEngn

[CodeEngn] Basic RCE L16

jxx_yxjx 2022. 11. 15. 18:44

Name이 CodeEngn일때 Serial을 구하시오

 

먼저 해당 문제 파일의 패킹 여부를 알아보기 위해 PEiD에 넣어보았다.

.text 형식으로 별다른 언패킹은 필요 없어 보인다.

파일을 디버거에서 실행해보면 다음과 같이 name과 password를 입력받는 입력창이 뜬다.

name에는 문제에서 주어진 CodeEngn을 , 패스워드에는 임의의 값을 넣어보았는데, wrong password!라는 문구가 뜨며 프로그램이 종료된다.

먼저 문자열을 입력 받는 곳을 찾아 살펴보았다.

역시 CMP문이 있었고 EAX의 주소와 EBP - 3C의 주소 값을 비교하는 것을 확인할 수 있었다.

해당 CMP문에 BP를 걸고 F9로 바로 실행시켜보았다.

이후 메시지창에 아까와 마찬가지로 주어진 name과 랜덤값 password를 작성하였다.

그러자 레지스터 값들이 변화하는 것을 알 수 있다. 이때 EAX값이 3039인데 3039는 현재 16진수인 값이므로 10진수로 변환해주면

내가 입력했던 랜덤값이 된다. 따라서 정답 시리얼 넘버는 EBP - 3C에 저장되어 있을 것이다.

이 때 EBP 는 70FF28이므로 70FF28 - 3C 값을 알아내야한다.

7405352 - 60 = 7405292 즉 16진수로 변환하면 70fEEC가 된다.

70FEEC로 가면 970DC6E4가 보인다. 이 때 리틀엔디안 방식으로 거꾸로 읽어주면 E4C60D97이 되는데

다음 값을 10진수로 변환해주면

3838184855가 된다. 이 값을 시리얼 넘버로 입력해주면 문제가 해결될 것 같다.

다시 프로그램을 실행하고 Name과 알아낸 패스워드를 입력하니 문제가 해결되었다.

정답 : 3838184855

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

UPX packing / unpacking  (0) 2022.11.22
[CodeEngn] Basic RCE L18  (0) 2022.11.17
[CodeEngn] Basic RCE L15  (0) 2022.11.10
[CodeEngn] Basic RCE L14  (0) 2022.11.08
[CodeEngn] Basic RCE L13  (0) 2022.11.08