tmxklab
[CodeEngn] Advance RCE L03 본문
1. 문제
1) 문제확인
- Name에 "CodeEngn"을 입력하고 아무 Serial값을 쓰니 오른쪽 메시지 박스 창이 뜨게 된다.
2. 접근방법
패킹은 되어있지 않으므로 바로 분석해보자
3. 문제풀이
- 성공을 뜻하는 문자열 확인, 해당 문자열을 포함하는 변수를 통해 참조하는 함수를 따라가보자
- 최종적으로 sub_401392()에서 성공을 뜻하는 문자열을 출력하는 메시지 박스를 띄우지만 sub_401392()를 호출하는 부분은 없고 위 그림과 같이 DialogFunc()에서 해당 함수의 주소를 push하는 부분밖에 없다.
- 따라서, 아까 실패했을 때 출력되는 문자열을 참조하는 함수를 따라가보자, 왜냐하면 Name값과 Serial값을 비교하여 성공 또는 실패하는 로직이 있을 것이라고 추정되기 때문이다.
- 실패를 뜻하는 문자열을 담은 Text변수는 위 그림에서 마지막 MessageBoxA()에서 사용된다. 이제 이 부분을 디버깅하면서 상세히 분석해보자
Name값은 "CodeEngn" Serial값은 "1234"로 입력하고 디버깅하고 돌려보자
- GetDlgItemTextA()에서 Name값에 입력했던 "CodeEngn"을 가져와서 문자열 길이 8과 3을 비교한다. 만약 3이 아니면 즉, Name입력 값이 3글자가 아니면 실패를 뜻하는 문자열이 출력되는 메시지 박스가 뜨게 된다.
- 따라서, Name값을 3글자로 아무거나 주거나 아니면 eax값을 8로 변경하여 통과하자
- 통과한 이후에 또 다시 GetDlgItemTextA()를 통해 입력한 Serial값 "1234"를 0x403264에 저장한다.
- 마지막으로 입력한 Serial값이 저장된 0x403264와 0x403284와 비교하게 된다.
- 0x403284에는 "3265754874"가 저장되어 있는데 우리가 구해야되는 Serial값으로 추정된다.
- 그래서 확인하기 위해 0x403264에 저장된 "1234"를 "3265754874"로 변경해보자
- 변경 이후 계속 실행하게 되면 위 그림과 같이 성공을 뜻하는 메시지 박스가 뜨게 된다.
- 따라서 우리가 구해야 하는 Serial값은 "3265754874"임을 알 수 있다.
'War Game > CodeEngn' 카테고리의 다른 글
[CodeEngn] Advance RCE L05 (0) | 2021.02.17 |
---|---|
[CodeEngn] Advance RCE L04 (0) | 2021.02.17 |
[CodeEngn] Advance RCE L01 (0) | 2021.02.17 |
[CodeEngn] Basic RCE L20 (0) | 2021.02.04 |
[CodeEngn] Basic RCE L19 (0) | 2021.01.29 |
Comments