Information Security

[CodeEngn] Basic RCE L08, L09, L10 본문

INTERLUDE/Reversing

[CodeEngn] Basic RCE L08, L09, L10

sohexz 2023. 5. 4. 19:58

https://ch.codeengn.com/

 

CodeEngn.com [코드엔진]

코드엔진은 국내 리버스엔지니어링 정보공유를 위해 2007년 부터 리버스엔지니어링 컨퍼런스 및 세미나, 워크숍을 현업 실무자들과 함께 운영하고 있는 비영리 커뮤니티입니다.

ch.codeengn.com

 

OEP란?

Original Entry Point: 패킹된 파일의 실제 프로그램 시작 부분(원본 코드의 Entry Point)

 

UPX 패킹의 특징

[ PUSHAD ~ POPAD ] 명령어 내부에서 압축해제 코드가 실행 되고 [ POPAD ] 명령어 실행 후 [ JMP ] 명령어를 통해 OEP로 이동

 

파일의 형태를 알아보자

UPX1으로 패킹되어 있음을 알 수 있다.

 

PUSHAD를 F8로 실행 후 바뀐 ESP에 대한 dump를 확인해주자

 

Breakpoint를 걸어준 뒤 F9를 눌러 따라가보면 JMP를 찾을 수 있다

 

해당 줄에 들어가보자

제일 먼저 나오는 01012475가 OEP임을 알 수 있다

StolenByte란?

패킹된 프로그램에서 코드의 일부를 OEP로 점프하기 이전에 숨기는 것을 의미

 

<StolenByte를 적용하는 이유>

패킹을 풀 때는 OEP를 찾아서 덤프를 뜸

하지만 StolenByte가 적용된 프로그램은 OEP이전에 코드의 일부가 있음

따라서 OEP를 찾아서 덤프를 떠도 프로그램이 정상적으로 실행되지 않음

-> StolenByte를 적용하여  언패킹을 방해할 수 있음

 

빨간 박스 안에 있는 PUSH 부분을 다 합함

 

6A0068002040006812204000

 

문제 파일 형태를 알아보자

ASPack이라는 것으로 패킹되어 있는 것을 확인할 수 있음

 

POPAD 서치

PUSHAD 1줄 실행 후 맨 위에 스택 주소( ESP)에서 우클릭-> follow in dump 누르고

dump 부분에서 bp -> hardware, on access -> dword 누르고 f9 하면 popad쪽으로 실행됨

이후 Ctrl+a 하면 깨진 코드 복구됨

00445834이 OEP인 것을 알 수 있음

 

덤프 따는 것부터 다시

'INTERLUDE > Reversing' 카테고리의 다른 글

[CodeEngn] Basic RCE L13, L14  (0) 2023.05.14
[CodeEngn] Basic RCE L11, L12  (0) 2023.05.09
[CodeEngn] Basic RCE L06, L07  (0) 2023.03.30
[CodeEngn] Basic RCE L04, L05  (0) 2023.03.28
[CodeEngn] Basic RCE L02, L03  (0) 2023.03.23