일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 서비스디버깅
- Dynamic안티디버깅
- Self-Creation
- 안티디버깅
- x32dbg
- OllyDbg
- Python
- Advanced안티디버깅
- 서비스프로세스
- PEImageSwitching
- ImageSwitching
- UTF-16
- JIT
- UTF-32
- RedLine Stealer
- DebugBlocker
- Exe2Aut
- CP949
- .net
- IL코드
- CodeEngn
- 디버깅
- Visual Studio
- hxd
- dotPeek
- Static안티디버깅
- PEImage
- 리버싱핵심원리
- 분석 보고서
- 리버싱
- Today
- Total
-榮-
[CodeEngn] Basic RCE L15 본문
● CodeEngn Basic RCE L15 문제
◎ 파일 실행 화면
◎ 패킹 및 난독화 여부 확인
● CodeEngn Basic RCE L15 분석 및 풀이
실패 문자열이 있는지 검색해봅니다.
실패 문자열의 위치로 이동하면 위에서 분기 조건(00458831)과 분기점(00458837)을 볼 수 있습니다.
분기 조건을 보면 CALL 00407774의 반환 값과 [45B844]의 값을 비교하고 있습니다.
즉, CALL 00407774에서 입력한 Serial 값을 암호화(?)하고 Name(CodeEngn)으로 만든 Serial 값([45B844])과 비교합니다.
CALL 00407774 내부로 Step Into[F7]들어가봅시다.
함수 내부에서 핵심은 00407796의 CALL 00402974입니다.
CALL 00402974 내부로 Step Into[F7]들어가봅시다.
CALL 00402974의 내부 핵심코드 흐름
00401383 내부 핵심코드 설명 | 설명 및 예시 |
1. TEST bl, bl (입력 Serial이 Null인지 확인) |
2. 입력된 Serial의 길이만큼 반복 ex. while(bl != null) 1) 16진수를 10진수로 변환 ex. 31 (10진수 : 1) - 30 = 1 2) 입력 Serial이 숫자가 아니면 오류 MessageBox 출력 ex. [그림 11] 3), 4) 10진수를 입력받은 자리 수에 맞추어 16진수로 변환 ex. eax' = eax'' * 5 / eax = eax' * 2 이므로 eax = eax'' * 10 5) 최종적으로 입력받은 Serial Key를 16진수가 eax에 존재 6) 입력된 Serial을 하나씩 가져옴 ex. Serial이1000이면 eax = 31 (10진수 : 1) |
Serial 값에 문자열 입력 시 오류 화면이 뜹니다.
CALL 00407774는 입력 Serial 값을 16진수로 변환하는 함수입니다.
분석 내용이 맞는지 입력 Serial : 1234 이 16진수로 "4D2"가 맞는지 확인해 봅니다.
이제 [그림 7]의 내용으로 6160h의 10진수가 Serial Key라는 것을 알 수 있습니다.
● CodeEngn Basic RCE L15 확인 및 답
'CodeEngn > Basic' 카테고리의 다른 글
[CodeEngn] Basic RCE L17 (0) | 2021.03.26 |
---|---|
[CodeEngn] Basic RCE L16 (0) | 2021.03.26 |
[CodeEngn] Basic RCE L14 (0) | 2021.03.25 |
[CodeEngn] Basic RCE L13 (0) | 2021.03.25 |
[CodeEngn] Basic RCE L12 (+α PEView 주소 변환) (0) | 2021.03.24 |