CodeEngn Basic RCE L15 Write-Up
파일 링크: https://codeengn.com/challenges/
CodeEngn.com [코드엔진] - Challenges
코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.
codeengn.com
풀어보자.
Name, Seriatl을 잘못 입력하면 "Try again !" 문자열이 출력된다.
올리디버거로 파일을 실행하고 code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. "Try Again !" 문자열이 사용되는 루틴을 살펴보자.
"Try Again !" 문자열이 사용되는 루틴을 보면 함수 프롤로그가 있다. 이 곳에 브레이크 포인트를 설정하고 실행하면 Name, Serial을 입력할 수 있다.
0x00458831 주소의 CMP 명령어로 EAX 레지스터의 값과 메모리 0x45B844 주소의 값을 비교하고 같지 않으면 실패한다.
0x00458816 주소에서 0x00458760 함수를 호출하면 메모리 0x0045B844 주소에 어떠한 값이 저장된다. 즉, 0x00458760 함수가 Serial을 생성하는 함수임을 알 수 있다.
그리고 0x00407774 함수에 사용자가 입력한 Serial을 인자로 전달한다. 그리고 반환된 값은 0x4D2인데 이는 사용자가 입력한 "1234" 문자열을 10진수로 인식하고 16진수로 변환한 값이다.
그리고 이 값과 메모리의 0x0045B844 주소에 저장된 값 0x6160과 비교한다. 따라서 0x6160 값을 10진수로 변환한 값이 Serial이다.
Auth Key 값은 Serial이다.
'Wargame > CodeEngn Basic RCE' 카테고리의 다른 글
CodeEngn Basic RCE L17 Write-Up (0) | 2019.08.26 |
---|---|
CodeEngn Basic RCE L16 Write-Up (0) | 2019.08.26 |
CodeEngn Basic RCE L14 Write-Up (0) | 2019.08.20 |
CodeEngn Basic RCE L13 Write-Up (0) | 2019.08.20 |
CodeEngn Basic RCE L12 Write-Up (0) | 2019.08.20 |