문제 정보

컴퓨터 C 드라이브의 이름이 CodeEngn 일 경우, 시리얼이 생성될 때 CodeEngn은 어떤 것으로 변경되는가

 

풀이 힌트

2-1. getvolumeinformationA

 

문제 풀이

더보기

3-1. 잘못된 시리얼 키를 입력했을 때, 출력되는 에러 "The serial you entered is not correct!" 문자열을 확인한다.

 

3-2. 해당 에러 메시지를 출력하는 주소를 확인한다.

 

3-3. 위에서 확인한 주소를 따라가면 [call <07.lstrcmpiA>] 함수 리턴 값으로 참/거짓을 판별하는 것을 볼 수 있다.

 

3-4. 해당 함수 호출 전 BP를 걸고 프로그램을 실행한다.

 

3-5. 시리얼 키로 test를 입력하였고 함수 호출 전 "test", "L2C-57816784-ABEX"  2개의 문자열이 매개변수로 전달된다.

 

3-6. "L2C-57816784-ABEX"를 입력하면 정상 결과가 출력되지만, 이 문제에서는 C 드라이브의 이름을 확인해야한다.

 

3-7. 코드를 쭉 살펴보니 드라이브의 정보를 확인하는 getvolumeinformationA 함수가 쓰임을 확인할 수 있었다. 

 

3-8. getvolumeinformationA 함수의 8개 매개변수 중, 2번째 인자 값에 드라이브의 이름이 들어가는데 마지막 매개변수가 코드 상 가장 위쪽에 위치하므로 아래에서 두번째인 40225C의 주소에 있는 값이 드라이브 명이라고 할 수 있다.

 

3-9. BP를 이용해 해당 함수가 실행되기 전 40225C의 주소에 있는 값을 CodeEngn으로 변경해서 실행한다. 그럼 strcat 함수를 통해 "CodeEngn"과 "4562-ABEX" 문자열이 합쳐지고, 이후 반복문을 통해 40225C에 저장된 네개의 문자열의 값에 +2를 한 문자열이 시리얼 키가 된다.

 

3-10. BP를 통해 자동계산된 시리얼 키는 "L2C-5781EqfgEngn4562-ABEX" 로 확인할 수 있다.

 

3-11. (정답) 입력된 드라이브 명 "CodeEngn"은 앞 4개의 문자열+2 값으로 변경되었으므로 답은 "EqfgEngn"이다.

복사했습니다!