코드엔진 Basic - 7번 문제 풀이

김왕구·2023년 7월 25일
0

CodeEngn

목록 보기
2/3

이번에 풀어볼 문제는 CodeEngn Basic 7번 문제입니다.

우선 문제를 살펴보아야 합니다.

Question

문제의 핵심은 컴퓨터 C 드라이브의 이름에 따라 시리얼 키가 생성되고, 이것의 이름이 CodeEngn일 경우 이 문자열이 어떤 것으로 변하는지 확인하는 것입니다.

  • 원활한 문제 풀이를 위해 C 드라이브의 이름을 "AAAA"로 변경해두었습니다.

지금부터 문제에서 제공된 프로그램을 살펴보겠습니다.

1. 동작 확인

07Program

위 사진과 같이 시리얼 키를 입력하는 입력창과 Check 버튼이 존재합니다.

Error!

만약 시리얼 키가 일치하지 않는다면, 위와 같은 MessageBox를 출력합니다.

2. 분석

Symbol

가장 먼저 이 프로그램에서 사용되는 주요 함수는 다음과 같습니다.

위 함수 중 lstrcatA 함수에 BP(Break Point)를 걸어 실행해보겠습니다.

lstrcat 함수의 결과는 C 드라이브의 이름인 "AAAA"와 문자열 "4562-ABEX"가 합쳐진 것을 볼 수 있습니다.

위 사진을 보면 dl의 값을 2로 설정하였고 ds40225C부터 40225F 주소의 값에 0x1을 더합니다. 결괏값으로 "AAAA4562-ABEX"에서 "CCCC4562-ABEX"로 변하였으므로 해당 코드는 문자열의 시작 주소인 0x0040225C부터 0x4 만큼 떨어진 주소0x0040225F에 각각 0x1 만큼 더하는 것을 2번 반복하는 작업을 합니다.

그 다음 다시 lstrcat 함수를 호출하여 두 문자열을 합쳐 "L2C-5781CCCC4562-ABEX"로 만듭니다.

lstrcat 함수가 종료되고 0x004010ED에서 사용자의 입력을 push하고 0x004010F7에서 생성된 시리얼 키를 push 한 뒤, lstrcmpiA 함수에서 두 문자열을 비교하여 일치할 경우, "Yep, you entered a correct serial!"MessageBoxA를 통해 출력합니다. 일치하지 않는다면 "The serial you entered is not correct!"MessageBoxA를 통해 출력합니다.

확인

3. 응용

분석 단계에서 코드의 전체적인 구조와 원리를 파악하였으니 문제의 핵심이었던 C 드라이브의 이름이 CodeEngn일 경우 이 문자열이 어떤 것으로 변하는지 확인하는 작업을 해보겠습니다.

이 프로그램은 C 드라이브의 이름을 가져와 C 드라이브의 이름 + "4562-ABEX"의 문자열로 만든 뒤, 합친 문자열의 시작 지점부터 0x4 만큼 떨어진 지점까지의 값을 0x1 만큼 2번 변경합니다.

변경된 문자열은 다시 한 번 "L2C-5781" + 변경된 문자열로 합쳐집니다.

따라서 만약 C 드라이브의 이름을 CodeEngn으로 변경하게 된다면

	C ---------------------> E
	o ---------------------> q
	d ---------------------> f
    e ---------------------> g
	Engn은 변경되지 않으므로 문제의 정답은 "EqfgEngn"

시리얼 키는 "L2C-5781EqfgEngn4562-ABEX"가 됩니다.


문제의 정답을 입력하면

Success!!가 출력되는 것을 확인할 수 있습니다!

다음 게시글은 CodeEngn Basic 8번 풀이로 돌아오겠습니다.

profile
시스템 보안과 운영체제 개발, Rust에 관심이 많은 학생

0개의 댓글