일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- DebugBlocker
- Python
- IL코드
- OllyDbg
- Advanced안티디버깅
- 서비스프로세스
- UTF-16
- 서비스디버깅
- 리버싱핵심원리
- ImageSwitching
- 안티디버깅
- 디버깅
- PEImageSwitching
- CodeEngn
- PEImage
- 리버싱
- hxd
- Static안티디버깅
- 분석 보고서
- UTF-32
- x32dbg
- Self-Creation
- Visual Studio
- RedLine Stealer
- Exe2Aut
- CP949
- .net
- Dynamic안티디버깅
- JIT
- dotPeek
- Today
- Total
-榮-
[CodeEngn] Basic RCE L09 (+α StolenByte 옮기고 덤프 파일 만들기) 본문
● CodeEngn Basic RCE L09 문제
StolenByte란
- 훔친 바이트란 의미로 프로그램의 한 부분의 Code가 다른 부분으로 옮겨진 것을 말한다.
- 주로 패킹된 프로그램에서 볼 수 있다.
- 주로 옮겨지는 Code는 EP 부분의 Code들이며, 옮겨진 Code는 OEP로 향하는 JMP 명령어의 앞에서 PUSH 된다.
- 옮겨진 Code는 할당된 메모리 공간에서 실행되며, 언패킹을 해도 정상 실행되지 않는다.
StolenByte는 옮겨진 Code를 제자리로 옮기고 덤프, IAT 복구를 하면 정상 실행된다.
◎ 파일 실행 화면
◎ 패킹 및 난독화 여부 확인
● CodeEngn Basic RCE L09 풀이 및 답
UPX 패킹이므로 POPAD로 이동하면, POPAD 명령어 부분에서 옮겨진 것으로 보이는 문자열과 JMP 0040100C를 볼 수 있습니다.
[※참고]
다른 OEP를 찾는 방법은 CodeEngn Basic RCE L05의 "+α UPX 패킹 상태에서 OEP 찾는 법"
0040100C로 이동하면 NOP 12Byte와 0040100E CALL 0040109F를 볼 수 있으며, MessageBoxA의 부족한 Parameter는 Stack에서 확인이 가능합니다.
스택의 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)
[Dump debugged process]를 클릭하여 DUMP를 뜹니다. (Plugin)
EP를 StolenByte의 시작 부분으로 수정하고 Dump파일을 저장합니다.
생성된 Dump 파일을 디버거에 올려서 확인합니다.
'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 |