-榮-

[CodeEngn] Advance RCE L14 본문

CodeEngn/Advance

[CodeEngn] Advance RCE L14

xii.xxv 2021. 4. 16. 16:27

● CodeEngn Advance RCE L14 문제

 

CodeEngn Advance RCE L14

 

◎ 파일 실행 화면

[그림 1] 파일 실행 화면 / 실패 화면 (Name : ABCD , Serial : NH6-0-0091008D0052)

 

◎ 패킹 및 난독화 여부 확인

[그림 2] exeinfo PE

 


 

● CodeEngn Advance RCE L14 분석 및 풀이

 

[그림 3] 디버거 - OllyDbg / 디버기 - 14.exe (Advance RCE L14 실행파일)

 

문자열 검색에서 [그림 1] 실패 화면의 "Invalid Registration Code"문자열을 찾으면 성공 문자열과 함께 바로 보입니다.

[그림 4] Search for > All referenced text strings

 

실패 문자열 주소로 이동하면 성공 문자열과 함께 분기점(0047F448)을 확인할 수 있습니다.

[그림 5] 분기 조건 및 분기점 확인

 

분기 조건의 파라미터를 확인하면 입력된 Serial의 숫자 부분과 Name으로 생성된 Serial 숫자를 비교하는 것을 확인할 수 있습니다.

분기 조건 앞의 CALL 00404B2C와 CALL 0047F0B8은 각각 입력된 Serial과 입력된 Name을 파라미터로 가집니다.

즉, 앞의 CALL 0047F0B8에서 Name으로 Serial을 만드는 것을 예상할 수 있습니다.

[그림 6] 분기조건 : EAX, EDX 비교

 

CALL 0047F0B8의 내부를 확인해 보겠습니다.

[그림 7] CALL 0047F0B8 내부

CALL 0047F0B8의 내부에는 Serial을 생성하는 3개의 반복문이 존재합니다.

1. Name의 길이를 늘려주는 반복문

[그림 8] Name의 길이를 늘려줌

2. 1에서 늘린 Name과 문자열(NH KeyGenMe6)의 합을 이어 붙이는 반복문 (1회 반복 결과 : 4byte)

[그림 9] Serial = 1에서 늘린 Name과 문자열(NH KeyGenMe6)의 합

3. 2에서 생성된 Serial의 앞의 12자리를 자르는 반복문

[그림 10] Serial = 2에서 생성된 Serial의 앞에서 12자리

 

Serial : NH6-0-0091008D0052을 만족하는 Name을 찾으려면 Serial의 숫자 부분에서 문자열을 빼주면 됩니다.

[그림 11] 문자열

 

[그림 12] 뺄셈

 


 

● CodeEngn Advance RCE L14 확인

 

[그림 12]의 값을 문자로 변환하면 'CE2'입니다.

[그림 13] Name 확인

 

[그림 14] Registereg Successfully

 

'CodeEngn > Advance' 카테고리의 다른 글

[CodeEngn] Advance RCE L15  (0) 2021.04.19
[CodeEngn] Advance RCE L11  (2) 2021.04.08
[CodeEngn] Advance RCE L10  (0) 2021.04.07
[CodeEngn] Advance RCE L09  (0) 2021.04.05
[CodeEngn] Advance RCE L08  (0) 2021.04.05