상세 컨텐츠

본문 제목

[Write-up] CodeEngn Advance RCE 11

Reversing Write-Up/03.CodeEngn Advance

by RACC8N 2020. 2. 7. 21:26

본문

문제 : Serial이 94E7DB1B 일때 Name은 무엇인가
해당 Serial에 대해서 'Serial accepted' 메시지가 나와야 합니다.

 

풀이 : 

디버거를 켜보자.

 

문자열 검색으로 Serial을 만드는 함수 위치까지 찾을 수 있었다.

 

이 문제가 겁나 복잡한것이 40217B에 있는 저 값들을 이용하여 cmp 명령어로 각 경우마다 연산하는 방법이 다르다.

 

특히 여기서 4013AB와 4013BF가 중요한 함수이다.

 

4013AB는 쉽게 말해서 특정 메모리 [edx+0x402538] 에 값을 PUSH 해주는 함수이고,

 

4013BF는 특정 메모리 [edx+0x402538] 에 값을 POP 해주는 함수이다.

 

대충 이런식으로 하나하나 분석을 하여 알고리즘을 알아내는데 거의 이틀이란 시간이 걸렸다.

 

분석결과 두 가지 연산을 한다.

처음은 우선 입력한 Name을 받아와 다음과 같이 연산을하여 입력한 Name에대한 SUM값을 구한다.

 

다음은 SUM 값을 0xF 로 나눈 몫과 나머지로 연산을 하게 된다.

 

알고리즘을 알았으니 문제에서 주어진 Serial 값을 역으로 타고 가 Name의 Sum 값을 알아내 보자.

 

Name의 Sum값은 0x32B이다.

관련글 더보기

댓글 영역