CodeEngn Basic RCE L05 Write-Up

2019. 8. 18. 22:58
728x90
728x90
728x90

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

 

CodeEngn.com [코드엔진] - Challenges

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

codeengn.com

[사진 1]

풀어보자.

 

 

[사진 2]

프로그램을 실행하면 값 2개를 입력해서 등록할 수 있다.

 

 

[사진 3]

값이 틀렸을 때 뜨는 메시지 박스의 문자열은 "Wrong ~~"이다.

 

 

[사진 4]

올리디버거로 파일을 열어보면 PUSHAD 명령어로 레지스터 값을 스택에 저장한다.

 

 

[사진 5]

Detect It Easy 도구로 파일을 보면 UPX로 패킹되어 있음을 알 수 있다.

 

 

[사진 6]

따라서 PUSHAD 명령어를 수행하고 ESP 값에 하드웨어 브레이크 포인트를 설정하고 실행한다. 그러면 OEP로 점프하기 전에 POPAD 명령어가 수행되고 하드웨어 브레이크 포인터에 의해 중지될 것이다.

 

 

[사진 7]

위와 같이 POPAD 명령어가 수행되고 0x00441270 주소로 점프할 때 중지된다.

 

 

[사진 8]

0x00441270 주소의 루틴을 보니 함수 프롤로그가 보인다. 이 곳이 OEP이다. 덤프를 떠서 언패킹해보자.

 

 

[사진 9]

OllyDumpEx 플러그인을 이용하자. Entry Point를 Image Base 값을 뺀 0x00041270 값을 입력하면 된다.

 

 

[사진 10]

위와 같이 EntryPoint RVA 값이 0x00041270임을 알 수 있다.

 

 

[사진 11]
[사진 12]

다음으로 덤프뜨면서 IAT가 깨졌을 수 있기 떄문에 LordPE 도구로 IAT를 복구하면 된다. Rebuild PE 버튼을 클릭하여 리빌드하자.

 

 

[사진 13]

그 다음 언패킹된 파일을 올리디버거로 열고 code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. "Registered User", "GFX-754-IER-954" 문자열도 사용됨을 알 수 있다.

 

 

[사진 14]

"Wrong ~~" 문자열이 사용되는 루틴을 보면 "Registered User", "GFX-754-IER-954" 문자열을 0x00403B2C 함수를 호출하기 전에 EDX 레지스터에 저장한다. 딱 봐도 "GFX ~~" 문자열이 답이다.

 

 

[사진 15]

위와 같이 입력하면 등록이 된다.

 

 

Auth Key 값은 위에서 입력했던 두 문자열 중 두 번째 값이다.

728x90
728x90

'Wargame > CodeEngn Basic RCE' 카테고리의 다른 글

CodeEngn Basic RCE L07 Write-Up  (0) 2019.08.18
CodeEngn Basic RCE L06 Write-Up  (0) 2019.08.18
CodeEngn Basic RCE L04 Write-Up  (0) 2019.08.18
CodeEngn Basic RCE L03 Write-Up  (0) 2019.08.18
CodeEngn Basic RCE L02 Write-Up  (0) 2019.08.18

+ Recent posts