-榮-

[CodeEngn] Basic RCE L12 (+α PEView 주소 변환) 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L12 (+α PEView 주소 변환)

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

 

● CodeEngn Basic RCE L12 문제

 

CodeEngn Basic RCE L12

 

 

◎ 파일 실행 화면

 

[그림 1] 파일 실행 화면

 

 

패킹 및 난독화 여부 확인

 

[그림 2] PEiD

 

 


 

● CodeEngn Basic RCE L12 풀이

 

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

 

 

성공 문자열이 있는지 검색해봅니다.

 

[그림 4] 성공 문자열 확인

 

0040108B로 이동하면 성공을 알리는 MessageBoxA 함수와 함께 분기점과 GetDlgItemInt 함수가 보입니다.

 

[그림 5] GetDlgItemInt 함수와 분기점, 성공 MessageBoxA 함수

 

GetDlgItemInt 함수 정의(출처:MSDN)

UINT GetDlgItemInt(
  HWND hDlg,
  int  nIDDlgItem,
  BOOL *lpTranslated,
  BOOL bSigned
);

[그림 6] GetDlgItemInt Parameters

 

GetDlgItemInt 함수는 입력받은 정수 값을 반환해주는 함수입니다.

 

실행[F9]을 하고, "1234"를 입력하면 GetDlgItemInt 함수가 4D2를 반환합니다.

 

[그림 7] GetDlgItemInt 반환 값 확인

 

"1234"를 16진수로 변환하면 "4D2"입니다.

 

[그림 8] 16진수 변환 값

 

분기 조건을 확인하면 입력받은 값의 16진수와 "7A2896BF"를 비교하는 것을 볼 수 있습니다.

 

[그림 9] 분기 조건

 

Key 값은 "7A2896BF"를 10진수 변환한 값일 것입니다.

 

[그림 10] 10진수 변환 값

 

 


 

● CodeEngn Basic RCE L12 확인 및 답

 

 

[그림 11] Key 확인

 

 

이제 성공 메시지 대신 Key 값이 MessageBox에 출력되도록 overwrite 합시다.

 

먼저 HexEdit에서 열었을 때 overwrite 할 위치를 찾습니다.

 

MessageBox의 Text 문자열은 [0040353B]에 위치합니다.

 

[그림 12] MessageBox의 Text 문자열 위치 확인

문자열의 HexEdit에서 열었을 때 문자열의 위치를 찾아봅시다.

 

Image Base : 00400000

Section Alignment : 00001000

 

0040353B은 data sectoin에 존재합니다.

 

[그림 13] PEView IMAGE_OPTIONAL_HEADER

 

RVA : 00003000

Pointer ro Raw Data : 00000800

 

찾으려는 Text 문자열의 위치는 (0040353B - 00400000 - 00003000+ 00000800 =) 00000D3B에 있을 것입니다.

 

[그림 14] PEView IMAGE_SECTION_HEADER .data

 

00000D3B위치에 Text 문자열이 있는지 확인해봅시다.

 

[그림 15] 00000D3B 위치의 문자열

 

HxD에서 해당 위치의 문자열을 Key로 overwrite합니다.

 

[그림 16] 문자열을 Key로 변경

 

변경된 파일을 확인합니다.

 

[그림 17] overwrite 성공

 

 

CodeEngn Basic RCE L12의 답은 Key 값 + overwrite 주소 영역 = 20494803830D3B0D45

 

 


+α PEView 주소 변환

 

PEView는 pFile, pView, RVA, VA를 지원해주기 때문에 위의 문제는 VA로 전환하는 것으로 쉽게 찾을 수 있습니다.

 

[그림 18] pFile

 

[그림 19] VA

 

하지만 리버싱 공부를 목적으로 하고 있다면 RVA to RAW를 하는 방법을 알고 할 수 있도록 공부하는 것이 중요합니다.

 

 

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

[CodeEngn] Basic RCE L14  (0) 2021.03.25
[CodeEngn] Basic RCE L13  (0) 2021.03.25
[CodeEngn] Basic RCE L11  (0) 2021.03.24
[CodeEngn] Basic RCE L10  (0) 2021.03.24
[CodeEngn] Basic RCE L09 (+α StolenByte 옮기고 덤프 파일 만들기)  (0) 2021.03.23