Write Up/CodeEngn

[CodeEngn] Basic RCE L15

jxx_yxjx 2022. 11. 10. 18:44

Name이 CodeEngn일때 Serial을 구하시오

 

먼저 문제 파일을 다운로드 받고 패킹 여부등을 알아보기 위해 PEiD에 넣어보았다. CODE형식이라 별다른 언패킹 과정 없이 바로 디버거에서 실행시켰다.

F8키로 실행해보면 NAME과 SERIAL을 입력하는 창이 뜬다.

문제에서 Name이 CodeEngn일 때 시리얼 넘버를 구하라고 했으므로 일단 name은 알맞게 작성한 후 시리얼 값에는 아무 값이나 대입했다. 그러니 try again이라는 메시지 창과 함께 프로그램이 종료되었다.

해당 부분 코드를 찾기 위해 프로그램을 다시 실행한 후 우클릭 -> search for -> all referenced text strings를 살펴보았다.

찾은 아스키 값 위쪽에 분기문과 cmp가 보여 여기서 값을 비교한 후 옳고 그름을 판단할 것이라고 생각했다.

cmp에 bp를 걸고 다시 실행하였다.

이 때 name과 시리얼 넘버는 아까와 마찬가지로 name에는 CodeEngn을, serial 에는 1234(랜덤 값)을 넣어줬다.

분기문은 EAX값과 45B83C 값을 비교하고 있다. 또한 분기문을 진행시키면 우측에 EAX값이 뜨는데 이 값은

내가 랜덤으로 지정하여 넣어주었던 시리얼 넘버와 일치했다.

정답인 시리얼 넘버는 45B844에 있을 것이므로 아래 Hex dump address 에서 검색하여 6160인 것을 알아냈다. - 뒤에서 부터 읽는 리틀엔디안 방식 

끝으로 6160을 다시 10진수로 변환하는 작업을 해준다.

프로그램을 다시 실행하여 name과 시리얼 넘버를 작성해주면 해결된다.

시리얼 넘버를 구하라고 하였으므로 정답은 24928