CodeEngn Basic RCE L05 Write-Up
파일 링크: https://codeengn.com/challenges/
CodeEngn.com [코드엔진] - Challenges
코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.
codeengn.com
풀어보자.
프로그램을 실행하면 값 2개를 입력해서 등록할 수 있다.
값이 틀렸을 때 뜨는 메시지 박스의 문자열은 "Wrong ~~"이다.
올리디버거로 파일을 열어보면 PUSHAD 명령어로 레지스터 값을 스택에 저장한다.
Detect It Easy 도구로 파일을 보면 UPX로 패킹되어 있음을 알 수 있다.
따라서 PUSHAD 명령어를 수행하고 ESP 값에 하드웨어 브레이크 포인트를 설정하고 실행한다. 그러면 OEP로 점프하기 전에 POPAD 명령어가 수행되고 하드웨어 브레이크 포인터에 의해 중지될 것이다.
위와 같이 POPAD 명령어가 수행되고 0x00441270 주소로 점프할 때 중지된다.
0x00441270 주소의 루틴을 보니 함수 프롤로그가 보인다. 이 곳이 OEP이다. 덤프를 떠서 언패킹해보자.
OllyDumpEx 플러그인을 이용하자. Entry Point를 Image Base 값을 뺀 0x00041270 값을 입력하면 된다.
위와 같이 EntryPoint RVA 값이 0x00041270임을 알 수 있다.
다음으로 덤프뜨면서 IAT가 깨졌을 수 있기 떄문에 LordPE 도구로 IAT를 복구하면 된다. Rebuild PE 버튼을 클릭하여 리빌드하자.
그 다음 언패킹된 파일을 올리디버거로 열고 code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. "Registered User", "GFX-754-IER-954" 문자열도 사용됨을 알 수 있다.
"Wrong ~~" 문자열이 사용되는 루틴을 보면 "Registered User", "GFX-754-IER-954" 문자열을 0x00403B2C 함수를 호출하기 전에 EDX 레지스터에 저장한다. 딱 봐도 "GFX ~~" 문자열이 답이다.
위와 같이 입력하면 등록이 된다.
Auth Key 값은 위에서 입력했던 두 문자열 중 두 번째 값이다.
'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 |