-榮-

[CodeEngn] Basic RCE L15 본문

CodeEngn/Basic

[CodeEngn] Basic RCE L15

xii.xxv 2021. 3. 25. 20:44

 

● CodeEngn Basic RCE L15 문제

 

 

CodeEngn Basic RCE L15

 

 

◎ 파일 실행 화면

 

[그림 1] 파일 실행 화면

 

[그림 2] Wrong Serial

 

 

패킹 및 난독화 여부 확인

 

[그림 3] PEiD

 

 


 

● CodeEngn Basic RCE L15 분석 및 풀이

 

[그림 4] 디버거 - OllyDbg / 디버기 - 15.exe (Basic RCE L15 실행파일)

 

실패 문자열이 있는지 검색해봅니다.

 

[그림 5] 실패 문자열 확인

 

실패 문자열의 위치로 이동하면 위에서 분기 조건(00458831)과 분기점(00458837)을 볼 수 있습니다.

 

[그림 6] 분기 조건 및 분기점

 

분기 조건을 보면 CALL 00407774의 반환 값과 [45B844]의 값을 비교하고 있습니다.

즉, CALL 00407774에서 입력한 Serial 값을 암호화(?)하고 Name(CodeEngn)으로 만든 Serial 값([45B844])과 비교합니다.

 

[그림 7] 분기 조건 값

 

CALL 00407774 내부로 Step Into[F7]들어가봅시다.

 

[그림 8] CALL 00407774

 

함수 내부에서 핵심은 00407796의 CALL 00402974입니다.

CALL 00402974 내부로 Step Into[F7]들어가봅시다.

 

[그림 9] CALL 00402974

 

[그림 10] CALL 00702974 내부 핵심코드

 

CALL 00402974의 내부 핵심코드 흐름

00401383 내부 핵심코드 설명 설명 및 예시

1. TEST bl, bl (입력 Serial이 Null인지 확인)
2. [반복문]
     1) bl = bl -30
     2) 입력 Serial이 숫자인지 확인 (CMP/JA 명령어)
     3) eax = eax + eax * 4 (eax = eax * 5)
     4) eax = eax + eax (eax = eax * 2)
     5) eax = eax + ebx
     6) bl =
입력 Serial의 Byte
     7) 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 값에 문자열 입력 시 오류 화면이 뜹니다.

 

[그림 11] Serial 값에 문자열 입력 시 오류

 

CALL 00407774는 입력 Serial 값을 16진수로 변환하는 함수입니다.

분석 내용이 맞는지 입력 Serial : 1234 이 16진수로 "4D2"가 맞는지 확인해 봅니다.

 

[그림 12] 분석 내용 확인

 

이제 [그림 7]의 내용으로 6160h의 10진수가 Serial Key라는 것을 알 수 있습니다.

 

 


 

● CodeEngn Basic RCE L15 확인 및 답

 

 

[그림 13] 6160h의 10진수

 

[그림 14] Serial Key 확인

 

 

 

 

'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