문제 : 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값은 같다.
[Write-up] CodeEngn Basic RCE 18 (0) | 2020.01.20 |
---|---|
[Write-up] CodeEngn Basic RCE 17 (0) | 2020.01.20 |
[Write-up] CodeEngn Basic RCE 15 (0) | 2020.01.20 |
[Write-up] CodeEngn Basic RCE 14 (0) | 2020.01.20 |
[Write-up] CodeEngn Basic RCE 13 (0) | 2020.01.20 |
댓글 영역