CodeEngn Basic RCE L15 Write-Up

2019. 8. 20. 23:56
728x90
728x90
728x90

파일 링크: https://codeengn.com/challenges/

 

CodeEngn.com [코드엔진] - Challenges

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.

codeengn.com

[사진 1]

풀어보자.

 

 

[사진 2]

Name, Seriatl을 잘못 입력하면 "Try again !" 문자열이 출력된다.

 

 

[사진 3]

올리디버거로 파일을 실행하고 code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. "Try Again !" 문자열이 사용되는 루틴을 살펴보자.

 

 

[사진 4]

"Try Again !" 문자열이 사용되는 루틴을 보면 함수 프롤로그가 있다. 이 곳에 브레이크 포인트를 설정하고 실행하면 Name, Serial을 입력할 수 있다.

 

 

[사진 5]

0x00458831 주소의 CMP 명령어로 EAX 레지스터의 값과 메모리 0x45B844 주소의 값을 비교하고 같지 않으면 실패한다.

 

 

[사진 6]

0x00458816 주소에서 0x00458760 함수를 호출하면 메모리 0x0045B844 주소에 어떠한 값이 저장된다. 즉, 0x00458760 함수가 Serial을 생성하는 함수임을 알 수 있다.

 

 

[사진 7]

그리고 0x00407774 함수에 사용자가 입력한 Serial을 인자로 전달한다. 그리고 반환된 값은 0x4D2인데 이는 사용자가 입력한 "1234" 문자열을 10진수로 인식하고 16진수로 변환한 값이다.

그리고 이 값과 메모리의 0x0045B844 주소에 저장된 값 0x6160과 비교한다. 따라서 0x6160 값을 10진수로 변환한 값이 Serial이다.

 

 

[사진 8]

Auth Key 값은 Serial이다.

728x90
728x90

'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

+ Recent posts