본문 바로가기

Security Study/SWUFORCE

[리버싱] Crackme #5

230503 송보연


# crackme #5

- 인터넷에 나와있는 crackme5.exe 파일 이용. 어셈블리어로 작성된 코드라 매우 깔끔

- 크랙 연습 공개 프로그램 - Error 메세지 창을 OK창으로

인터넷에 나와있는 crackme5.exe파일을 Immunity Debugger로 열어서 일단 확인해보았다. F8을 누르면서 코드를 확인해보니

이렇게 시리얼 넘버를 입력하라는 창이 뜬다. 일단 아무거나 눌러봤다,

잘못된 시리얼 값을 입력하고 Check를 눌렀더니 에러창이 뜨고 곧 종료된다.

exe파일을 내려서 살펴보다보니 방금 뜬거같은 에러창과 OK창 생성 코드가 보인다. 

004010FC에서 EAX와 0을 비교해서 값이 같으면 00401117로 점프해서 성공창이 뜨는걸 알 수 있다. 

EAX는 함수의 리턴값이라고도 하는데, 이거 직전의 함수가 Istrcmpi라는 함수가 있는걸 볼 수 있다.

 

이건 생소해서 찾아봤다.

  • lstrcat : 어느 문자열말미에 다른 문자열을 결합하는 함수
  • lstrcmpi : 대소문자를 구분하여 두 문자열을 비교한다. 두 문자열을 비교한 결과를 리턴한다. / lstrcmp 함수와 동일하되 대소문자를 구분하지 않는다는 점만 다르다.

lstrcmpi (lstrcmp) 함수에서 비교하는 문자열이 같으면 0을반환, 다르면 1을 반환 => EAX에 들어감

 

이걸 누르고, 이 프로그램이 종료되기 전에 내려서 위에서 살펴본 코드를 다시 한번 봤더니, 내가 입력한 값이 String2에 들어간 걸 볼 수 있다.

String1 과 String2가 같아야 0을 반환하고, 이게 EAX에 들어가서 0과 비교한 후 맞아야 OK창이 뜨니까 입력값은 String1과 같아야 한다. L2C-57816784-ABEX 를 입력해주면 

OK창이 잘 뜨는걸 볼 수 있다!