본문 바로가기

Reversing/CTF

CodeEngn Basic RCE 07 문제 풀이

키젠 프로그램

해당 프로그램에서 메세지박스를 띄우는 주소로 이동해봅시다.

메세지박스 띄우는 부분

우선 내가 입력한 시리얼인 CodeEngn 문자열이 담기는 주소가 보입니다.

대충 보았을때 매개변수로 들어가는 걸 보아하니 또 문자열을 비교후 분기하는 내용 같습니다.

 

분기 코드

우선 lstrcmpiA 함수가 무슨 함수인지 구글에 검색해보았습니다.

 

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lstrcmpia

두 문자열을 비교하는 함수이며 반환값은

 

Return

문자열 크기를 비교하여 작으면 음수를 반환하고 크면 양수를 같으면 0을 반환하네요.

 

후에 반환값이 0인지 체크후 0이면 성공 문으로 가는 코드를 확인 할 수 있습니다.

그럼 해당 프로그램의 시리얼은 07.exe+2000 주소에 담긴 문자열이 시리얼이 되겠네요.

 

하지만 문제는 내 C 드라이브가 CodeEngn일떄 시리얼을 획득 하는 것입니다.

 

확인을 위해 C드라이브 명을 CodeEngn으로 변경했습니다.

시리얼이 담긴 모습

C드라이브가 CodeEngn일 경우 시리얼은 L2C-5781EqfgEngn4562-ABEX 가 되네요.

 

이제 L2C-5781EqfgEngn4562-ABEX 시리얼이 어떻게 추출되는지 확인해봅시다.

 

GetVolumeInformationA

위로 스크롤 해보니 GetVolumeInformationA 함수를 호출 하는것을 볼 수 있습니다.

해당 함수를 구글에 검색해봅시다.

 

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationa

지정된 디렉토리의 이름에서 부터 볼륨 정보를 가져오는 함수인 것 같네요.

들어가는 매개변수를 확인해봅시다.

 

https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getvolumeinformationa

들어가는 매개변수를 확인해봤을때 VolumeNameBuffer를 통해

드라이브 명을 가져옴을 알 수 있습니다.

 

그럼 2번째로 들어가는 매개변수인 VolumeNameBuffer인 주소

07.exe+225C 값에는 내 C드라이브 명이 들어간다는 애기가 됩니다.

 

내 드라이브명이 들어감
KERNEL32.lstrcat

후에 4562-ABEX와 CodeEngn 문자열이 KERNEL32.lstrcat  함수를 통과함으로써

07.exe+225C 주소의 값은 CodeEngn4562-ABEX로 바뀌는 것을 확인 할 수 있습니다.

 

문자열이 합쳐진 모습
볼륨명 변환 코드

후에 DL에 2를 넣고 메모리주소 07.exe+225C~07.exe+225F

주소의 값을 참조해 +1 연산 시키고 총 2회를 반복 후 07.exe+10AF로 점프하는 구문입니다.

 

후에 연산을 진행하면 1번째에 DpefEngn 로 변환되는 것을 볼 수 있고

 

2번째 연산 시에

 

EqfgEngn 로 최종적으로 변환되는 것을 확인했습니다.

 

이로써 내 C드라이브명인 CodeEngn가 EqfgEngn로 변환되어 시리얼로 등록됬다는 걸 알 수 있네요.

 

성공 메세지 출력

'Reversing > CTF' 카테고리의 다른 글

CodeEngn Basic RCE 09 문제 풀이  (0) 2022.05.08
CodeEngn Basic RCE 08 문제 풀이  (0) 2022.05.08
CodeEngn Basic RCE 06 문제 풀이  (0) 2022.05.07
CodeEngn Basic RCE 05 문제 풀이  (0) 2022.05.07
CodeEngn Basic RCE 04 문제 풀이  (0) 2022.05.07