반응형

07.exe
0.01MB

 


 

위의 사진은 EP 코드이다.

 

 

문자열 찾기 기능을 이용하면 위와 같이 나온다.

 

 

401099 주소에 BP를 걸고 F9 키로 실행하면 위와 같이 창이 나오는데, slayslay라고 입력하고 Check를 누른다.

 

 

그러면 EIP가 401099에서 멈춘다.

 

4010A8 주소의 lstrcatA() 함수에 의해 4023F3 주소에 있는 "4562-ABEX" 문자열과 40225C 주소에 있는 공백이 합쳐진다.

 

 

4010A8 주소의 lstrcatA() 함수의 실행 결과로 위와 같이 "4562-ABEX" 문자열이 40225C 주소에 저장된다.

 

 

그리고 위와 "4562-ABEX" 문자열의 앞부분인 숫자 부분을 1씩 증가를 두 번하여 6784로 변경한다.

 

 

그리고 4023FD 주소의 "L2C-5781" 문자열을 402000 주소로 이어붙이고

 

 

"6784-ABEX" 문자열을 "L2C-5781" 문자열 뒤에 이어 붙인다.

 

 

그리고 나서 내가 입력한 값과 "L2C-57816784-ABEX" 문자열을 비교하여 같으면 401117 주소로 점프하여 성공했다는 문자열을 띄우고, 같지 않으면 401101 주소로 가서 실패했다는 문자열을 띄운다.

 


풀이

 

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

BOOL GetVolumeInformationA(
  [in, optional]  LPCSTR  lpRootPathName,
  [out, optional] LPSTR   lpVolumeNameBuffer,
  [in]            DWORD   nVolumeNameSize,
  [out, optional] LPDWORD lpVolumeSerialNumber,
  [out, optional] LPDWORD lpMaximumComponentLength,
  [out, optional] LPDWORD lpFileSystemFlags,
  [out, optional] LPSTR   lpFileSystemNameBuffer,
  [in]            DWORD   nFileSystemNameSize
);

 

Windows 64bit에서의 함수 인자는 스택에 넣을 때 함수 인자의 가장 마지막에 위치하는 인자

즉, 맨 오른쪽 인자부터 스택에 넣기 때문에 어셈블리어에서 맨 위에 있는 push 명령어부터 nFileSystemNameSize, lpFileSystemNameBuffer, lpFileSystemFlags 인자이다.

 

어셈블리어에서 위 -> 아래 순으로 할 때 40225C 주소가 볼륨 이름이 들어가는 저장 공간이고, 401094 주소가 볼륨의 시리얼 번호가 저장될 공간이다.

 

 

GetVolumeInformationA() 함수 실행 후 40225C 주소에 볼륨 이름이 저장되는데, 4010A8 주소의 lstrcatA() 함수가 실행되면 40225C 주소의 볼륨 이름 뒤에 4023F3 주소의 "4562-ABEX" 문자열이 이어붙여지게 된다.

 

 

C 볼륨의 이름을 codeengn으로 바꾼 후 디버거를 재실행한 뒤 실행한다.

 

 

GetVolumeINformationA() 함수가 실행되고 나면 40225C 주소에는 볼륨 이름이 들어간다.

 

 

4010A8 주소의 lstrcatA() 함수가 실행되고 나면 40225C 주소에는 볼륨 이름 + "4562-ABEX" 한 결과가 들어간다.

 

 

그리고 나서 맨 앞 4자리를 2씩 증가시킨 값으로 변경하고

 

 

"L2C-5781" 문자열과 변경시킨 "eqfgengn4562-ABEX" 문자열이 합쳐진다.

 

그래서 최종적으로는 "L2C-5781eqfgengn4562-ABEX" 문자열이 된다.

 

그러므로 문제의 답은 아래와 같다.

eqfgengn

 

반응형

'전쟁 > codeengn' 카테고리의 다른 글

[codeengn] Basic RCE 09  (0) 2022.07.28
[codeengn] Basic RCE 08  (0) 2022.07.28
[codeengn] Basic RCE 06  (0) 2022.07.28
[codeengn] Basic RCE 05  (0) 2022.07.25
[codeengn] Basic RCE 04  (0) 2022.07.24

+ Recent posts