외로운 Nova의 작업실

리버싱 입문 - 4(crackme4.exe) 본문

Computer App Penetesting/Reversing

리버싱 입문 - 4(crackme4.exe)

Nova_ 2022. 12. 10. 19:31

안녕하세요. 이번시간에는 crackme4.exe 문제를 풀어보도록 하겠습니다. 아래 문제 파일을 올려두도록 하겠습니다.

crackme4.exe
0.02MB

 

 

- 문제 인식

먼저 실행시켜보도록 하겠습니다.

serial 번호를 넣으라고하고 밑에 Registered 부분의 버튼이 활성화가 되어있지 않은 모습을 확인할 수 있습니다. 일단 serial번호를 아무거나 넣어보겠습니다.

registered 버튼이 활성화가 되지 않은걸 확인할 수 있습니다. 아무래도 알맞는 serial 번호를 넣어야 Register 버튼이 활성화될 것 같다는 걸 알 수 있습니다. 그러면 이제 리버싱을 해서 serial 번호를 알아내보도록 하겠습니다.

 

- 리버싱

 

일단 어떤 함수가 있는지 한번 확인해보겠습니다. cntl + f를 눌러 PUSH EBP를 검색해보겠습니다.

첫번째 함수 00401E10 주소에 있는 것으로 확인됩니다. F2를 눌러 브레이크 포인트를 넣겠습니다. 다음 함수를 찾아보겠습니다.

두번째 함수 004020E0 주소에 있는 것을 확인할 수 있습니다. 브레이크 포인트를 걸고 또 찾아보겠습니다.

세번째 함수 00402280 주소에 있는 것으로 확인됩니다. 브레이크 포인트를 걸고 다음으로 넘어가려했지만 이제 함수는 더이상 없는 것으로 확인됩니다. 정리해보자면,

  • 00401E10 - 첫번째 함수
  • 004020E0 - 두번째 함수
  • 00402280 - 세번째 함수

이제 한번 F9를 눌러 프로그램을 실행시켜보겠습니다.

그랬더니 004020E0 2번째 함수에서 브레이크되는 것을 확인할 수 있습니다. 아마 2번째 함수는 처음 시작할때 윈도우를 만드는 함수인 것같습니다. 계속해서 F9를 눌러보겠습니다.

그랬더니 serial 윈도우 창이 뜨는 것을 확인할 수 있습니다. 이제 serial에 아무거나 입력해보겠습니다.

그랬더니 00402280 주소에서 브레이크 되는 것을 확인할 수 있습니다. 세번째 함수인데, 이 함수는 serial에 키보드를 입력하는 순간순간 계속 실행되는 함수인 것으로 확인됩니다. 그럼 첫번째 함수는 Registered 버튼을 누르면 실행되는 함수라고 추측할 수 있을 것 같습니다. 그렇다면 어떤 함수를 분석해야할까요? 아무래도 세번째 함수가 serial을 계속 검증하는 함수이니 세번째 함수를 분석해보겠습니다. serial에 아무거나 입력하고 step over로 하나씩 살펴보면,

0040230D 주소부분에 call __vbaStrCmp 명령줄을 확인할 수 있습니다. 아무래도 우리가 입력한 serial을 진짜 serial과 비교하는 명령줄인걸로 생각됩니다. 이때들어가는 인자값을 보면 push eax, push ecx인것으로 보아 eax에 있는 문자열과 ecx에 있는 문자열을 비교하는 것으로 생각됩니다. 이때 eax에는 11(임의로 임력한 serial번호)이고, ecx에는 2203980이 들어가 있는 것을 확인할 수 있습니다. 아무래도 우리가 입력한 값이 223980이면 registered 버튼이 활성화 될것이라고 가정할 수 있습니다. 그렇다면 223980을 입력해보겠습니다.

2203980을 입력했더니 Registered 버튼이 활성화 되는 것을 확인할 수 있습니다. 한번 Registered 버튼을 눌러보겠습니다.

그랬더니 남은 첫번째 함수 00401E10 함수가 실행되는 것을 확인할 수 있습니다. F9를 눌러 실행시켜보도록 하겠습니다.

잘했다고 어떻게 풀었는지 메일로 보내달라고 하는 군요.

 

- Crack

call __vbaStrCmp 명령의 인자는 EAX(우리가 넣은 serial)과 ECX(진짜 serial)입니다. 이걸 ECX를 두번 넣는다면 serial은 항상 일치할것입니다. PUSH EAX를 PUSH ECX로 변경하겠습니다.

이후 실행시켜보겠습니다.

Registered 버튼이 활성화되는 것을 볼 수 있습니다. 저장후에 파일을 남기겠습니다.

crackme4(cracked).exe
0.02MB

 

 

 

 

- 후기

serial을 어떻게 만드는지 알고싶었습니다. 그래서 분석해보면  004021D7주소의 vbaStrVarMove 함수 이후에 serial값이 저장된다는 사실을 알게되었습니다. 하지만 함수를 step into로 파고들었지만 알아내기는 쉽지 않았습니다.

Comments