일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 서비스프로세스
- 분석 보고서
- 서비스디버깅
- Visual Studio
- CP949
- 리버싱핵심원리
- CodeEngn
- Self-Creation
- DebugBlocker
- Dynamic안티디버깅
- IL코드
- PEImageSwitching
- OllyDbg
- dotPeek
- ImageSwitching
- 안티디버깅
- 리버싱
- 디버깅
- JIT
- PEImage
- Advanced안티디버깅
- Python
- Static안티디버깅
- RedLine Stealer
- x32dbg
- hxd
- UTF-32
- .net
- UTF-16
- Exe2Aut
- Today
- Total
-榮-
[CodeEngn] Basic RCE L14 본문
● CodeEngn Basic RCE L14 문제
◎ 파일 실행 화면
◎ 패킹 및 난독화 여부 확인
● CodeEngn Basic RCE L14 풀이
OEP를 찾아서 이동합니다.
[※참고]
UPX 패킹에서 OEP를 찾는 법은 CodeEngn Basic RCE L05의 "+α UPX 패킹 상태에서 OEP 찾는 법"
"You Have Enter A Wrong Serial, Please Try Agian" 메시지 박스를 봤을 때, MessageBoxA 또는 MessageBoxW 함수를 사용한 것이라 생각됩니다.
[Search for > All intermodular calls]에서 MessageBox 관련 함수를 찾아 BP를 걸고 실행[F9] 했을 때, 실패하는 MessageBox 함수의 위에 분기점과 분기 조건이 있을 거라 예상됩니다.
[※참고]
Found intermodular calls에 BP 관련은 CodeEngn Basic RCE L03의 "+α 함수를 알고 있다면..."
Name : CodeEngn / Serial : 12345 일 때, 실패 MessageBoxA 함수 위치를 찾았습니다.
실패 메시지 박스 함수 위에 성공 메시지 박스 함수와 분기점으로 보이는 0040133C와 분기 조건으로 보이는 0040133A을 볼 수 있습니다.
코드를 보았을 때, ESI와 입력 Serial 또는 입력 Serial을 사용하여 CALL 00401383에서 만든 반환 값과 POP ESI를 비교하는 것이 분기 조건으로 보입니다.
POP ESI가 PUSH ESI의 값과 같은 것을 보아 CALL 00401383에서 사용하는 파라미터는 입력 Serial만 일 것으로 판단됩니다.
또한, Name(CodeEngn)에 대응하는 Serial 값을 암호화(?)한 값은 000129A1이며, 12345를 암호화(?)하면 00003039를 가진다는 것을 알 수 있습니다.
CALL 00401383에서 Step into[F7]를 하여 함수 내부를 살펴봅시다.
CALL 00401383의 내부 흐름
00401383 내부 코드 설명 | 반복문 설명 및 예시 |
1. eax = 입력 Serial 길이 (lstrlenA 함수) |
5. 입력된 Serial의 길이만큼 반복 ex. for (int i = ecx; i > 0; i--) 1) 입력된 Serial을 하나씩 가져옴 ex. Serial이1000이면 eax = 31 (10진수 : 1) 2) 16진수를 10진수로 변환 ex. 31 (10진수 : 1) - 30 = 1 -1. 10진수를 입력받은 자리 수에 맞추어 16진수로 변환 ex. 1 * A를 3번 반복 = 1000의 16진수 4) 최종적으로 입력받은 Serial Key를 16진수로 변환 ex. ebx = 3E8 (10진수 : 1000) |
CALL 00401383이 입력받은 Serial 값을 16진수로 변환하는 함수라는 것을 알아내었습니다.
CALL 00401383의 분석이 맞는지 입력 값 : 12345 / 반환 값 : 3039로 확인해 봅시다.
CodeEngn Basic RCE L14의 답은 ESI 00129A1를 10진수로 변환했을 때의 값입니다.
● CodeEngn Basic RCE L14 확인
'CodeEngn > Basic' 카테고리의 다른 글
[CodeEngn] Basic RCE L16 (0) | 2021.03.26 |
---|---|
[CodeEngn] Basic RCE L15 (0) | 2021.03.25 |
[CodeEngn] Basic RCE L13 (0) | 2021.03.25 |
[CodeEngn] Basic RCE L12 (+α PEView 주소 변환) (0) | 2021.03.24 |
[CodeEngn] Basic RCE L11 (0) | 2021.03.24 |