CodeEngn Basic RCE L12 Write-Up
파일 링크: https://codeengn.com/challenges/
CodeEngn.com [코드엔진] - Challenges
코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 비공개 워크숍을 현업 실무자들과 함께 운영하고 있습니다. 리버스엔지니어링이라는 하나의 큰 주제로 소프트웨어 보안에 대한 다양한 시각과 연구주제에 대한 정보공유를 추구하고 있으며, 상업적 이익 없이 작은 예산으로 운영하고 있어 큰 예산으로 운영하는 다른 컨퍼런스에 비해 여러 가지로 부족 할 수 있습니다.
codeengn.com
풀어보자.
Key 값으로 1234를 입력하고 Check 버튼을 클릭하면 아무것도 뜨지 않는다. 문제에 나와있듯이 올바른 Key를 입력해야 성공메시지를 볼 수 있다.
올리디버거로 파일을 실행하면 EP에서 바로 밑에 성공 메시지가 보인다. MessageBoxA 함수를 호출하기전에 CMP 명령어로 EAX 레지스터의 값과 0x7A2896BF 값을 비교한다.
Key 값으로 100을 입력했더니 EAX 레지스터에 0x64 값이 저장된다. 0x64는 10진수 100을 16진수로 표현한 것이다. 즉, 입력된 Key 값을 16진수로 변환한 후 0x7A2896BF 값과 비교하고 같으면 성공 메시지를 확인할 수 있다.
0x7A2896BF 값을 10진수로 변환하면 2049480383이다.
위와 같이 성공 메시지 박스를 볼 수 있다.
HxD 도구로 파일을 열면 바로 성공 메시지가 하드코딩되어 있는 것을 확인할 수 있다. 내용 부분을 Key 값으로 변조하면 사용되는 영역은 0x0D3B ~ 0x0D45이다.
Auth Key 값은 Key 값과 [사진 6]에서 확인한 사용되는 영역이다.