Information Security
[CodeEngn] Basic RCE L08, L09, L10 본문
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 |