tmxklab

[CodeEngn] Advance RCE L03 본문

War Game/CodeEngn

[CodeEngn] Advance RCE L03

tmxk4221 2021. 2. 17. 12:03

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