WarGame/CodeEngn

[CodeEngn] 코드엔진 - Basic RCE 7 -

문제

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


해결

프로그램은 단순하다. 한가지 UserForm을 받아서 판정하는 실행프로그램이다. 바로 디버거로 만나보자

MessageBoxA 파라미터의 Error!위쪽에 문제와 연관되는 함수가 보인다. 0x00401099에 GetVolumeInformationA라는 함수가 보이는데, API를 조금 보고오자 Fileapi.h에 정의되어 있는 함수다.

 

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

 

GetVolumeInformationA function (fileapi.h) - Win32 apps

Retrieves information about the file system and volume associated with the specified root directory.

docs.microsoft.com

BOOL GetVolumeInformationA(
  LPCSTR  lpRootPathName,		// root디렉토리를 가르키는 String이 있는 pointer
  LPSTR   lpVolumeNameBuffer,		// 지정된 볼륨의 이름을 저장하는 버퍼를 가르키는 pointer
  DWORD   nVolumeNameSize,		// volume name Buffer의 길이
  LPDWORD lpVolumeSerialNumber,	
  LPDWORD lpMaximumComponentLength,
  LPDWORD lpFileSystemFlags,
  LPSTR   lpFileSystemNameBuffer,
  DWORD   nFileSystemNameSize
);

적당히 주석도 달아보았다. 우리의 프로그램은 다음과 같이 동작한다.

 

그러니 강제로 0040225C에 CodeEngn을 넣어보자

마지막 비교분기(0x4010F7)에서 우리의 입력은 L2C-5781EqfgEngn4562-ABEX과 비교된다. 즉 CodeEngn은 EqfgEngn으로 변환된다.