HackChang

[CodeEngn] Basic RCE L07 문제 풀이 본문

W4RG4M3/R3V3RS1NG

[CodeEngn] Basic RCE L07 문제 풀이

HackChang 2019. 11. 19. 23:01

L07 문제

Basic RCE L07

컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가

 

실행시키면 위와 같은 화면이 나오고, 체크버튼을 통해 인증을 하는 방식이다.

올리디버거를 통해 열어본다.

 

스트링 검색(우클릭 - Search for - All referenced strings)을 통해 문자열을 확인할 수 있었고, 

위에서 GetDlgItemTextA는 텍스트의 길이를 반환해준다.

해당주소에 BP(F2)를 걸고, F9를 눌러 실행을 한다.

 

BP에 걸려 해당주소까지만 실행이 되고, 실행창이 뜨면 CodeEngn을 적고 체크를 누른다.

F8을 눌러 올리디버거에서 한 줄씩 실행하다보면

EAX에 8이 담기는 것을 볼 수 있고, 그 다음으로 GetVolumeInformationA함수가 나오는데 이는 지정된 루트 디렉터리의 파일 시스템 및 볼륨에 대한 정보를 검색하는 함수이다. 

RootPathName = NULL이므로, C드라이브를 대상으로 검색한다. 검색에 성공하면 1을 반환하고, 실패하면 0을 반환한다.

성공적으로 검색한 것을 볼 수 있다.

하지만, 볼륨명에 아무것도 나오지 않는 문제가 발생했다.

검색을 통해 알아보던 중 로컬 디스크 (C:)는 이름을 지정해주지 않은 상태인 것을 알게되었다.

이름을 변경하고, 다시 실행해보았다.

정상적으로 볼륨명이 나오는 것을 볼 수 있었고,

 

해당 명령을 통해 문자(loca)를 2씩 더하는 것을 볼 수 있다.

 

해당 값을 보면 L2C-5781과 4562-ABEX는 고정이고,

nqecl부분이 변경되는 것을 볼 수 있고, 이를 strcmp를 통해 같으면 0을 반환하여 성공하는 메세지를 띄워준다.

따라서 CodeEngn으로 적용을 시켜보면 L2C-5781CodeEngn4562-ABEX인 것을 알 수 있다.

Comments