일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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안티디버깅
- Advanced안티디버깅
- CodeEngn
- IL코드
- ImageSwitching
- hxd
- CP949
- 분석 보고서
- Self-Creation
- OllyDbg
- x32dbg
- UTF-16
- Exe2Aut
- Visual Studio
- RedLine Stealer
- Python
- 디버깅
- JIT
- dotPeek
- UTF-32
- PEImageSwitching
- 서비스디버깅
- PEImage
- 리버싱
- .net
- DebugBlocker
- Static안티디버깅
- 리버싱핵심원리
- Today
- Total
-榮-
[CodeEngn] Advance RCE L04 Serial 생성 분석 본문
[※참고]
이 글은 CodeEngn Advance RCE L04의 Serial 생성 부분을 분석한 글로 CodeEngn Advance RCE L04 풀이의 일부분입니다.
CodeEngn Advance RCE L04은 CodeEngn Advance RCE L04을 참고해 주세요.
● CodeEngn Advance RCE L04 풀이 中 Serial 생성
[Search for > All intermodular calls]에서 Serial 생성을 하기 위한 Name을 읽어오는 GetDlgItemTextA 함수에 BP를 걸고 실행[F9]합니다.
각각의 GetDlgItemTextA 함수에서 읽어오는 값을 확인합니다.
각각의 GetDlgItemTextA 함수 Buffer 주소 내용 확인
00401114는 CodeEngn Advance RCE L04에서 성공/실패 MessageBox 함수가 있었던 함수의 시작 부분입니다.
GetDlgItemTextA 함수로 Name과 Serial을 읽어온 후 바로 CALL 00401114가 있는 것을 보니 CALL 00401114 내부에 입력받은 Name으로 Serial을 만드는 코드가 있을 것입니다.
CALL 00401114에서 Step Into[F7]를 하여 내부로 들어가 코드를 살펴봅니다.
◎ CALL 00401114 내부 Serial 생성 흐름
CALL 00401114 내부 Serial 생성 흐름 설명 | 설명 및 예시 |
[00401115 ~ 00401125] 각 GetDlgItemTextA 함수의 반환 값이 0 인지 확인 [00401127 ~ 00401152] 1. esi, ecx, edx 초기화 (0) 2. edx = 0Ah 3. [반복문] 1) MOVZX eax, [ecx+004030C0] 2) eax = eax + 1 3) eax = eax + edx 4) esi = esi + eax 5) ecx = ecx + 1 6) edx = edx * ecx 7) edi = edx 8) edi = edi * esi 9) CMP ecx, [00403100] |
[00401115 ~ 00401125] Name과 Serial이 제대로 입력되었는지 확인 [00401127 ~ 00401152] 1) eax = 입력받은 Name 문자 하나씩 대입 ex. eax = 43('C') //Name : CodeEngn , 반복문 1회차 5) 6)에서 곱셈에 사용되지만 ecx가 1)에서 다음 문자를 가지고 올 때도 사용된다. 8) 최종적으로 생성된 Serial은 edi에 있다. 9) [00403100]에는 Name을 읽어온 GetDlgItemTextA의 반환 값이 있다. 즉, 이름의 수만큼 반복되도록한다. ex. Name : CodeEngn / [00403100] : 08 |
반복문에서 생성된 Serial을 "LOD-%lu-%lX" 형식으로 만들면 CodeEngn Advance RCE L04의 답이 나온다. wsprintfA 함수를 실행하면 반복문에서 생성된 Serial의 "LOD-%lu-%lX" 형식을 [00403104]에서 확인할 수 있다.
(%lu : 부호없는 10진수로 4바이트 / %lx : 16진수로 4바이트)
'CodeEngn > Advance' 카테고리의 다른 글
[CodeEngn] Advance RCE L06 (0) | 2021.04.02 |
---|---|
[CodeEngn] Advance RCE L05 (0) | 2021.04.02 |
[CodeEngn] Advance RCE L04 (0) | 2021.04.02 |
[CodeEngn] Advance RCE L03 Serial 생성 분석 (0) | 2021.03.31 |
[CodeEngn] Advance RCE L03 (0) | 2021.03.31 |