상세 컨텐츠

본문 제목

[Write-up] CodeEngn Advance RCE 10

Reversing Write-Up/03.CodeEngn Advance

by RACC8N 2020. 2. 6. 10:57

본문

문제 : Serial이 WWWCCCJJJRRR 일때 Name은 무엇인가
Hint 1 : 4글자임
Hint 2 : 정답으로 나올 수 있는 문자열 중 (0~9, a~z, A~Z) 순서상 가장 먼저 오는 문자열

 

풀이 : 

Name과 Serial을 입력하는 프로그램이다. 

 

문자열 검색하여 해당 위치로 이동하였다. 

 

cmp eax,0xc명령어로 Serial은 0xC자리 문자열임을 알 수 있다. 

 

밑으로 내려가면 ebp-0xA5와 0x0을 비교하는데 이 조건을 만족해야 성공 메세지를 띄울 수 있다. 

 

ebp-0xA5에 하드웨어 BP를 걸어보자.

 

401FBF에서 al 값을 ebp-0xA5에 넣는것을 확인할 수 있다. 

 

여기서 al을 결정하는 값을 찾기위해 call 40144C로 stepinto 해보자.

 

함수가 끝나기 직전에 ebp-0xc4값을 eax로 넣어주는 것을 알 수 있다.

 

ebp-0xc4에 하드웨어 BP를 걸고 다시 실행시켜보자.

 

ebp-0xc4값은 ebp-0x10c로부터 쓰여지는것을 알 수 있다.

 

ebp-0x10c에 하드웨어 BP를 걸어보자.

 

ebp-0x10c의 값은 ebp-0x69로부터 쓰여진다.

 

ebp-0x69에 하드웨어 BP를 걸어보자.

 

cmp eax, 0x5를 하여 5보다 작거나 같을경우에는  ebp-0x69에 0x0 값을 넣지 않는 것을 확인할 수 있다.

 

그러면 eax가 어디서 오는지를 알아보자.

 

eax는 ebp-0x78와 ebp-0x7c를 sub한 값이 온다. 

 

ebp-0x78은 해당 부분에서 값이 변경되며,

 

ebp-0x7c는 해당 부분에서 값이 변경된다. 둘 다 같은 함수 call 401406로 인해 값이 변경되는것 같다. 

 

해당 함수를 분석해보자.

 

ebp-0x78을 조작하기 직전의 함수는 

 

AJXGRFV6BKOW3Y9TM4S2ZU I70H5Q81PDECLNAJXGRFV6BKOW3Y9TM4S2ZU I70H5Q81PDECLNAJXGRFV6BKOW3Y9TM4S2ZU I70H5Q81PDECLN

 

다음과 같은 문자열을 첫번째 인자로, 그리고 두번째 인자는 Serial 값으로 입력한 BBBBCCCCDDDD의 첫번째 자리 B가 들어가는 것을 알 수 있다.

 

리턴값은 2D로 10진수로 45이다. 이 숫자의 의미는 위의 문자열에서 45번째 있음을 의미한다. 

 

두번째 함수는 ebp-0x7c를 조작한다. 이부분은 첫번째인자로 아까와 같은 문자열과 두번째 인자로 Name에 입력한 AAAA의 첫번째 자리 A가 들어간 것을 알 수 있다.

 

리턴값은 25로 해당 문자열의 37번째 자리에 A가 있음을 알 수 있다.

 

A는 0번째에도 나오지만 두번째로 나오는 A가 37번째 자리에있다.  Serial값에서도 B의 두번째로 나오는 위치가 45임을 알 수 있다.

 

Serial의 첫번째 자리 값의 위치와 Name의 첫번째 자리 값의 위치의 차를 구해서 5보다 크면 ebp-0x69에 0을 넣게된다.

 

ebp-0x69에는 0이 들어가면 안되므로 두 값의 차이는 5보다 작거나 같아야한다.

 

Name은 4글자, Serial은 12글자이므로 Name 1글자당 Serial 3글자와 비교하는 것을 확인할 수 있다.

 

즉 Name이 ABCD이고, Serial이 123456789ABC 일경우 A(123) B(456) C(789) D(ABC) 이렇게 비교하게 된다.

 

Serial 값이 WWWCCCJJJRRR라 했을 때, Name으로 올 수 있는 값들을 알아보자.

W는 V 6 B K 0 3 Y 9 T M 이 올 수 있다. 여기서 Hint 2 : 정답으로 나올 수 있는 문자열 중 (0~9, a~z, A~Z) 순서상 가장 먼저 오는 문자열 을 이용하면 3이 된다.

C는 1이 오게된다.

 

이렇게 나머지도 확인하면 31A6이 된다.

 

관련글 더보기

댓글 영역