-
lvl 15Wargame/CodeEngn Basic RCE 2019. 1. 3. 17:33
문제
Name이 CodeEngn일때 Serial을 구하시오
풀이
→ 프로그램을 실행한다.
→ PEiD 도구로 프로그램을 살펴본 결과, Delphi 프로그램으로 확인된다.
→ IDA 도구를 이용하여 디컴파일한 결과, Check it 버튼 시 실행되는 것으로 추측되는 함수를 찾을 수 있다. 따라서, 적절한 명령어에 bp를 설정한다. (함수명:_TForm1_Button1Click)
→ 디버깅을 진행하면, cmp eax, ds:dword_45B844 명령어에서 break되며, 이 때의 레지스터 값을 살펴본다. 여기서 사용자 입력 값과, 명령어 그리고 레지스터 값들의 관계를 분석하면서 진행한다.
→ 디버깅 시, 사용자 입력 값은 문제에서 주어진 값인 "CodeEngn" 값을 입력하고, 시리얼 값은 임의의 값인 "1234" 값을 입력한다.
→ cmp eax, ds:dword_45B844 명령어에서 break된 후 EAX 레지스터의 값은 "4D2"이며 해당 값은 사용자가 입력한 임의의 값 "1234"의 16진수임을 알 수 있다. 그렇다면, 사용자 입력 값과 ds:dword_45B844에 저장된 데이터와 비교하는 것을 알 수 있다.
EAX 레지스터: 사용자 입력 값
ds:dword_45B844: 체크하는 시리얼 값
→ ds:dword_45B844 공간에 저장된 값을 Trace하면 아래와 같다.
→ 6160h 값이 저장된 것을 확인할 수 있으며, 해당 값의 10진수 값은 아래와 같다.
→ 알아낸 시리얼 값을 입력하면 다음과 같은 성공메시지를 확인할 수 있다.
댓글