안녕하십니까. 저번에 작성했던 소스를 추가작성하여 프로그램을 동작시켜 봅시다.

먼저 소스를 보겠습니다.

아는 분의 조언으로 글꼴을 바꿨습니다. 혹시 원하는 글꼴이 있으시다면 바꿔드리겠습니다.

프로그램 동작을 위해 소스코드를 수정한 것이므로 WinMain에서는 수정한 것이 없습니다. WndProc함수를 봅시다.

- TCHAR regcodeStr[50]

사용자가 입력한 값을 저장시키기 위한 배열을 선언하였습니다.

- int Message_result

메세지박스로 인해 호출된 메세지의 결과값을 저장하기 위해 선언하였습니다.

WM_COMMAND부분을 봅시다.

- case IDM_PROGRAMM_EXIT1:

PostQuitMessage(0);

break;

이 IDM_PROGRAMM_EXIT1은 리소스 메뉴를 의미합니다. 이 상수값은 리소스 헤더파일에 정의되어 있습니다. 

좀 더 자세히 알아보기 위해 ResEdit로 살펴봅시다.

IDM_PROGRAMM_EXIT1는 Programm의 Exit를 의미하는군요.

즉 case IDM_PROGRAMM_EXIT1: 는 Exit를 눌렀을 때의 동작을 뜻하는 것을 알 수 있습니다.

그다음 밑의 코드내용을 보면 PostQuitMessage함수를 호출한다고 되어있습니다. 즉 프로그램을 종료시키라는 뜻입니다. 간단하지요?

- case IDM__ER1:

MessageBox(hWnd,L"VB5-CrackMe 1.0 by hackingboy [DCD]",

L"VB5-Crackme 1.0",MB_OK);

break;

IDM__ER1을 살펴봅시다.

?er의 ID라는 것을 알 수 있습니다. 원본에선 ?er를 누르면 메세지박스가 띄워집니다. 그래서 여기에서도 똑같이 띄웠습니다. 한 가지 주의하실 점이 있다면 메세지박스의 첫번째 인자에 hWnd를 넣어주어야 합니다. 만약 이 값이 NULL로 지정되어있으면 메세지박스가 중복으로 생성되기 때문입니다.

- case REGISTRIEREN:

Registrieren 버튼을 눌렀을 때의 동작입니다.

- GetWindowText(regcode,regcodeStr,11);

GetWindowText함수로 regcode에 적힌 문자를 11개만큼 가져와서 regcodeStr에 저장시킵니다. 가져오는 문자열에는 널값이 포함되어 있으니 실제로 가져오는 글자 수는 10개입니다. 

- if(lstrcmp(regcodeStr,L"2G83G35Hs2") == 0)

GetWindowText함수로 인해 저장된 regcodeStr의 문자열과 2G83G35Hs2랑 같은지 안같은지를 비교합니다. 두 문자열이 같으면 lstrcmp는 0을 반환합니다.

- Message_result = MessageBox(hWnd,L"Danke, das Passwort ist richtig !",

L"Gluckwunsch !",MB_ICONWARNING | MB_OKCANCEL);

두 문자열이 같을 경우 성공메세지를 출력합니다. 여기서 MB_ICONWARNING 인자가 쓰였는데 이 인자는 느낌표 아이콘을 메세지에 넣겠다는 뜻입니다. 그리고 MB_OKCANCEL을 인자로 주어 확인, 취소 버튼을 메세지에 넣었습니다. 어떤 버튼을 누르냐에 따라 반환값이 달라지므로 Message_result에 반환값을 넣었습니다.

- if(Message_result != 1)

PostQuitMessage(0);

Message_result의 값이 1이 아니면 프로그램을 종료합니다. MessageBox에서 확인 버튼을 누르면 반환값은 1이 됩니다. 즉 위의 if문은 확인버튼을 누르지 않았을 시 프로그램을 종료하라는 코드입니다. 실제로 오리지널 03.exe에서는 성공문자열에서 취소버튼을 누르면 프로그램을 종료합니다.

- else

MessageBox(hWnd,L"Error ! Das Passwort ist falsch !",

L"PASSWORT FALSCH !",MB_ICONERROR | MB_OK);

입력한 값이 정답과 다를 경우 실패 문자열을 출력합니다. MB_ICONERROR 인자는 X표 아이콘을 의미합니다.

- case Exit:

PostQuitMessage(0);

break;

Exit버튼을 눌렀을 때의 동작입니다. 당연히 종료하도록 코드를 작성하였습니다.

생각보다 간단하지요? 프로그램을 동작시켜 봅시다.

네 이것으로 포스팅을 마치겠습니다.

 


Posted by englishmath
,