상세 컨텐츠

본문 제목

[Write-up] CodeEngn Basic RCE 16

Reversing Write-Up/02.CodeEngn Basic

by RACC8N 2020. 1. 20. 13:09

본문

문제 : Name이 CodeEngn일때 Serial을 구하시오

 

풀이 : 

프로그램을 실행시켜보았다.

 

디버거를 켜보자.

 

패킹되지않아 OEP를 바로 구할수 있었다.

 

문자열 검색을 해보자.

 

Good job과 Wrong password를 찾았다. 해당 위치로 가보자.

 

분기문 JNE 40163C로 진입할 수 있음을 확인하였다. 

 

바로 위의 cmp 명령어에서 Key값을 비교하기 때문에, [ebp-0x3c] 값을 확인해보자.

 

ebp-0x3c는 E4C60D97를 가리키고있으므로 이 값을 10진수로 바꾼 값이 Key임을 알 수 있다.

 

자 그럼 어떻게 Key값을 만드는지 확인해 보자.

 

Key값의 주소인 ebp-0x3c의 위치에 쓰는 부분을 찾았다. 이부분은 다음과 같은 연산을 한다.

 

1. Name의 문자열 개수를 받아온다. (CodeEngn=8)

2. ( 8 + 8 ) + 8 = 18

3. 18 * 2^2 = 60

4. 60 * 60 = 2400

5. 2400 * 60 = D8000

6. D8000 + 17 = D8017

7. D8017 * ACE80 = 91 (E4B8 8D80‬)

8. D8017 + E4B8 8D80 = E4C6 0D97‬ (Key)

 

Key값을 구했다. 

 

단순히 Name의 문자열 개수로 Key값을 만들기 때문에 CodeEngn이 아닌 다른 문자열 8짜리의 Name으로 해도 Key값은 같다.

관련글 더보기

댓글 영역