abex` 4th crackme Write-Up

2019. 7. 17. 15:15
728x90
728x90
728x90

abex` 4th crackme.exe
0.02MB

사용 도구: 올리디버거 2.01

 

abex` 4th crackme(이하 원본파일)를 풀어보자.

 

먼저 원본파일을 실행시키면 다음과 같은 메세지 박스가 뜬다.

[사진 1]

Serial을 맞추는 프로그램이다. 그런데 어떤 값을 입력해봐도 'Registered' 버튼(이하 등록버튼)이 활성화가 되지 않았다.

디버깅을 통해 등록버튼을 활성화시키는 것인지 고정되어 있는 Serial을 입력하면 활성화가 되는 것인지는 모르겠다.

분석해보자.

 

 

[사진 2]

올리디버거로 원본파일을 실행하면 위와 같은 코드가 나온다. Visual Basic(이하 VB)으로 만들어진 파일임을 알 수 있다.

abex` 2nd crackme에서 VB를 접해봤는데 VB 함수가 익숙하지 않아서 어려웠다..

 

 

[사진 3]

먼저 메인함수를 찾기위해 사용되는 문자열들을 찾아봤다. 코드 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위 같은 창이 뜬다. 문자열이 두 번씩 보이는 것은 각각 초기화될 때와 사용될 때이다. 아랫 부분이 사용될 때의 문자열들이므로 아랫 부분의 문자열을 참조해보면 될 것 같다.

 

 

[사진 4]

문자열들을 참조하면 어떤 루틴을 찾을 수 있다. 해당 루틴의 함수 프롤로그에 브레이크 포인트(이하 BP)를 설정하고 실행하면 위와 같이 Serial을 입력하라고 뜬다. 하지만 어떠한 값을 입력해도 등록버튼이 활성화되지 않고 디버깅할 수 없었다.

 

 

[사진 5]

그리고 해당 루틴을 살펴보면 Serial을 맞췄을 때의 내용을 알려주는 코드들을 확인할 수 있었다. 하지만 실패했을 때의 문자열이나 별도의 코드가 없었다. 즉 Serial을 검사하는 루틴은 현재 루틴이 호출되기전에 수행되는 것이라고 생각하였다.

 

 

[사진 6]

Serial을 검사하는 루틴을 찾기 위해 사용되는 문자열들을 살펴봤지만 특이한 것은 발견하지 못했다. 그래서 어떤 함수들이 사용되는지 확인했다. 코드 섹션에서 우클릭 - Search for - All intermodular calls 기능을 클릭하면 위와 같은 창을 볼 수 있다. 위의 창에서는 원본파일에서 사용되는 함수들을 확인할 수 있는데 40230D 주소에서 __vbaStrCmp 함수가 사용되는 것을 알 수 있다. __vbaStrCmp 함수가 어떤 기능을 하는지는 모르겠지만 함수 이름에 "Cmp"가 들어가고 C언어에서 strcmp() 함수가 문자열을 비교하는 것을 알고 있었기 때문에 __vbaStrCmp 함수가 문자열을 비교하는 함수라고 가정하였다.

 

 

[사진 7]

__vbaStrCmp 함수가 사용되는 루틴 함수의 프롤로그에 BP를 설정하고 실행하자 Serial을 입력하는 창이 떴다. 그리고 문자를 입력하자 디버깅을 할 수 있었다.

 

 

[사진 8]

그리고 __vbaStrCmp 함수를 호출하기 전에 인자 2개를 전달하는데 내가 입력한 값 "12"와 "2170425"를 전달한다. 원본파일을 여러번 실행해봤는데 해당 값 "2170425"는 고정된 값이었다.

 

 

[사진 9]

원본 파일에 [사진 8]에서 확인한 값 "2170425"를 입력하면 등록버튼이 활성화되고 버튼을 클릭하면 위와 같이 메시지 박스가 뜨는 것을 볼 수 있다.

 

*후기

VB는 너무 어렵다.

728x90
728x90

'Wargame > abex` crackme' 카테고리의 다른 글

abex` 5th crackme Write-Up  (0) 2019.07.17
abex` 3rd crackme Write-Up  (0) 2019.07.17
abex` 2nd crackme Write-Up  (0) 2019.07.17
abex` 1st crackme Write-Up  (2) 2019.07.13

+ Recent posts