Hacking/Reversing / / 2019. 12. 2. 11:37

Abex's Crackme #5 분석

 

분석


앞 부분은 win32의 폼을 만드는 과정과 text를 입력받습니다.

 

저는 그냥 켜서 나오는 text(Enter your serial)를 그대로 입력 하였습니다.

 

그림1. text를 가지고 노는 첫 부분

그리고 0040106C에 오면 

 

GetDlgItemTextA()

GetVolumeInformationA()

lstrcatA()

를 순서대로 호출한다.

 

간단하게 말하자면

1. GetDlgItemTextA()는 우리가 입력한 문자열을 00402324에 저장하고 문자열의 길이를 반환한다. (필자의 경우 Enter your serial)

 

2. GetVolumeInformationA()는 자신의 로컬디스크의 정보를 가져온다. (시리얼, 디스크볼륨네임 등)

 

3. lstrcatA()는 문자열 결합 함수이다. 004225C라는 주소에 저장되어있는 문자열과 "4562-ABEX"를 합쳐서 다시 (0040225C) 저장.

(필자의 경우 볼륨네임이 Null이기때문에 아까 GetVolumeInformationA에서 받아온 문자열이 null이기때문에 

결론적으로는 0040225C에 "4562-ABEX"만 저장이 됨.)

 

그림2. 두번째 부분

나오는 함수는 lstrcmpiA()이다. 문자열을 서로 비교하는 함수이다. 마지막에 인풋값과 정답을 비교하여 리턴하는 듯.

 

4. 반복문을 수행한다. (004010AD ~ 004010CD)

40225C에 저장되어 있는 4자리의 값을 1씩 증가시키는 반복을 2번 실행한다.

 

5. "L2C-5781" + ""을 수행 (첫번째 lstrcatA())

 

6. 아까 2씩 증가시킨 값과 "L2C-5781"를 문자열 결합. (두번째 lstrcatA())

그림3. 그림상에는 끝까지 진행이 하고 진행을 했기 때문에 이렇게 뜸..

 

7. 마지막으로 결합한 값("L2C-57816784-ABEX")과 우리가 입력한 값("Enter your serial")이라는 값을 비교한다.

 

8. 시리얼 키를 L2C-57816784-ABEX입력하면 답이 맞다고 나온다.

그림5. 정답

 


궁금점?


 

그림6. EP부분
그림7. 어떠한 연산을 하는 부분

serial알고리즘이 등장하기전에 핸들러를 가지고오고 다이얼로그 박스 text함수를 호출하고 00401056이라는 주소로 넘어가서 어떠한 연산을 2번(?) 수행한다.

 

이 연산이 정확히 뭘 하는 행동인지 몰라서 일단 textbox와 폼을 만드는 연산이라고 생각을 하긴 했지만 정확히 몰라서 찝찝하다..

 

저 연산 뒤에 JE SHORT crackme5.0040106C를 타고 serial알고리즘이 시작된다.

  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유