-榮-

[CodeEngn] Basic RCE L09 (+α StolenByte 옮기고 덤프 파일 만들기) 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L09 (+α StolenByte 옮기고 덤프 파일 만들기)

xii.xxv 2021. 3. 23. 20:25

 

● CodeEngn Basic RCE L09 문제

 

CodeEngn Basic RCE L09

 

StolenByte란

  • 훔친 바이트란 의미로 프로그램의 한 부분의 Code가 다른 부분으로 옮겨진 것을 말한다. 
  • 주로 패킹된 프로그램에서 볼 수 있다.
  • 주로 옮겨지는 Code는 EP 부분의 Code들이며, 옮겨진 Code는 OEP로 향하는 JMP 명령어의 앞에서 PUSH 된다.
  • 옮겨진 Code는 할당된 메모리 공간에서 실행되며, 언패킹을 해도 정상 실행되지 않는다.

 

StolenByte는 옮겨진 Code를 제자리로 옮기고 덤프, IAT 복구를 하면 정상 실행된다.

 

 

◎ 파일 실행 화면

 

[그림 1] 파일 실행 화면 및 확인 버튼 클릭 후 화면

 

 

패킹 및 난독화 여부 확인

 

[그림 2] PEiD - UPX 패킹 확인

 

 


 

● CodeEngn Basic RCE L09 풀이 및 답

 

[그림 3] 디버거 - OllyDbg / 디버기 - 09.exe (Basic RCE L09 실행파일)

 

 

UPX 패킹이므로 POPAD로 이동하면, POPAD 명령어 부분에서 옮겨진 것으로 보이는 문자열과 JMP 0040100C를 볼 수 있습니다.

 

[※참고]

다른 OEP를 찾는 방법은 CodeEngn Basic RCE L05의 "+α UPX 패킹 상태에서 OEP 찾는 법"

 

[그림 4] 옮겨진 Code 및 JMP 0040100C 확인

 

 

0040100C로 이동하면 NOP 12Byte와 0040100E CALL 0040109F를 볼 수 있으며, MessageBoxA의 부족한 Parameter는 Stack에서 확인이 가능합니다.

 

[그림 5] NOP 12Byte 및 Stack의 MessageBoxA Parameters 확인

 

스택의 MessageBoxA Parameters는 큰 주소부터 작은 순서로 uType, IpCaption, IpText 파라미터입니다.

 

MessageBoxA 함수 정의(출처:MSDN)

int MessageBoxA(
  HWND   hWnd,
  LPCSTR lpText,
  LPCSTR lpCaption,
  UINT   uType
);

 

따라서 CodeEngn Basic RCE L09의 답은 6A0068002040006812204000이다.

 

 

 

CodeEngn Basic RCE L09에서 구하라는 StolenByte는 찾았습니다.

추가로 StolenByte를 제자리로 옮기고 덤프 파일을 만들어 봅시다.

 


 

+α StolenByte를 제자리로 옮기고 덤프 파일 만들기

 

 

[그림 4]에서 찾은 옮겨진 코드를 [그림 5]의 NOP 부분으로 옮겨 적습니다. (StolenByte 12Byte / NOP 12Byte)

 

[그림 6] StolenByte 옮기기

 

[Dump debugged process]를 클릭하여 DUMP를 뜹니다. (Plugin)

 

[그림 7] Dump debugged process

 

EP를 StolenByte의 시작 부분으로 수정하고 Dump파일을 저장합니다.

 

[그림 8] DUMP

 

 

생성된 Dump 파일을 디버거에 올려서 확인합니다.

 

[그림9] 09_Dump.exe

 

 

'CodeEngn > Basic' 카테고리의 다른 글

[CodeEngn] Basic RCE L11  (0) 2021.03.24
[CodeEngn] Basic RCE L10  (0) 2021.03.24
[CodeEngn] Basic RCE L08  (0) 2021.03.23
[CodeEngn] Basic RCE L07  (0) 2021.03.23
[CodeEngn] Basic RCE L06  (0) 2021.03.21