-榮-

[CodeEngn] Basic RCE L11 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L11

xii.xxv 2021. 3. 24. 15:18

 

● CodeEngn Basic RCE L11 문제

 

CodeEngn Basic RCE L11

 

 

 

◎ 파일 실행 화면

 

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

 

 

 

패킹 및 난독화 여부 확인

 

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

 

 

 

[※참고]

CodeEngn Basic RCE L11와 CodeEngn Basic RCE L09의 파일은 같은 파일입니다.

자세한 분석은 CodeEngn Basic RCE L09를 참고하기.

 

 

 


 

● CodeEngn Basic RCE L11 풀이 및 답

 

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

 

Hardware BP를 걸고 실행[F9]합니다.

 

[그림 4] Hardware BP

 

실행[F9] 멈춘 코드에서 옮겨진 코드와 JMP 0040100C를 확인할 수 있습니다.

 

[그림 5] 옮겨진 Code 및 OEP 확인

 

 

0040100C로 이동하면 위의 NOP 12Byte와 0040100E CALL 0040109F 확인할 수 있습니다.

Stack에서 MessageBoxA의 부족한 파라미터를 확인 할 수 있습니다.

 

[그림 6] NOP 12Byte 및 Stack의 MessageBoxA 파라미터 확인

 

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

 

MessageBoxA 함수 정의(출처:MSDN)

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

 

 

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

 

[그림 7] StolenByte 옮기기

 

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

 

[그림 8] Dump debugged process

 

 

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

 

[그림 9] DUMP

 

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

 

[그림 10] 11_dump.exe

 

CodeEngn Basic RCE L11의 답은 OEP+StolenByte : 004010006A0068002040006812204000