상세 컨텐츠

본문 제목

[Write-up] CodeEngn Basic RCE 14

Reversing Write-Up/02.CodeEngn Basic

by RACC8N 2020. 1. 20. 10:42

본문

문제 : Name이 CodeEngn 일때 Serial을 구하시오
(이 문제는 정답이 여러개 나올 수 있는 문제이며 5개의 숫자로 되어있는 정답을 찾아야함, bruteforce 필요)

 

풀이 : 

프로그램을 실행시키면 다음과 같다.

 

디버거를 켜서 분석해보자.

 

Hardware BP를 이용해 OEP위치로 가보자.

 

 OEP를 찾았다. bp를 걸고 문자열 검색을 해보자.

 

Key가 틀렸을 경우 나오는 문자열을 찾았다. 해당 위치로 가보자.

 

JNE 401353분기를 통과해야만 성공 MessageBox를 얻을 수 있다.

 

분기문의 조건은 cmp eax, esi이며, eax는 우리가 입력한 key값이고 esi가 real key값임을 예상할 수 있다.

 

바로 위에서 push esi를 하기 때문에 push esi 명령어 위에서 esi 값에 대한 setting 해줄 것 이다.

 

확인해보자.

 

회색 박스 부분이 esi값을 설정해주는 부분이다. 분석해보자.

 

먼저 xor esi, esi명령으로 esi를 0으로 초기화 해준다.

 

그리고 Name 길이 만큼 Loop를 도는데, Name의 글자 하나씩에 대해 다음과 같은 연산을 한다.

 

ESI = ESI + ( C * C ) + (C / 2) - C       // ( C o d e E n g n ) 8번 반복.

 

따라서 Real Key값은 Name에 따라 값이 바뀌게 된다. 

 

CodeEngn의 Key값은 76193임을 알 수 있다.

 

관련글 더보기

댓글 영역