CodeEngn Basic RCE L03 Write-Up
파일 링크: https://codeengn.com/challenges/
CodeEngn.com [코드엔진] - Challenges
코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.
codeengn.com
풀어보자.
파일을 실행하면 Nag 창이 뜨고 Regcode를 입력해서 등록할 수 있다. 문자열들은 독일어 같다.
올리디버거로 파일을 실행하면 Visual Basic 프로그램임을 알 수 있다.
디버거에서 쭉 실행하면 Nag 창이 뜬다. 이 때 디버거에서 (F12) 단축키로 중지시킨 후 (Alt+F9) 단축키를 누른다. 그리고 Nag 창의 확인 버튼을 클릭하면 Nag 창을 띄우기 위해 호출되었던 함수 바로 다음 명령어에서 중지된다.
위와 같이 0x00402CFE 주소의 CALL 명령어에 의해 Nag 창이 뜬 것이다.
그리고 스크롤을 위로 올리면 함수 프롤로그와 Nag 창 메시지 박스의 상단 문자열을 확인할 수 있다. 즉, 이 루틴이 Nag 창을 띄우는 루틴이다.
따라서 함수 프롤로그의 PUSH EBP 명령어를 RETN 명령어로 패치하면 이 루틴은 바로 종료되고 위와 같이 Nag 창이 없어질 것이다.
code 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 사용되는 문자열들을 확인할 수 있다. [사진 4]에서 확인했듯이 Regcode가 틀렸을 때의 문자열도 확인할 수 있다.
password 값으로 "test" 문자열을 입력하고 파일을 실행하자. 그리고 "Error! ~~" 문자열이 사용되는 루틴을 보면 vbaStrCmp 함수로 내가 입력한 "test" 문자열과 "2G83G35Hs2" 문자열을 비교한다.
따라서 Regcode 값은 2G83G35Hs2이다.
Auth Key 값은 위에서 비교한 함수 이름이다.