Wargame/abex` crackme

abex` 5th crackme Write-Up

0xe82de_ 2019. 7. 17. 17:12
728x90
728x90
728x90

abex` 5th crackme.exe
0.01MB

사용 도구: 올리디버거 2.01

 

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

 

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

[사진 1]

serial을 입력하고 Check 버튼을 클릭하면 결과를 알려주는 메시지 박스가 뜨고 원본파일이 종료된다.

 

 

[사진 2]

올리디버거로 원본파일을 실행하면 위와 같은 루틴을 확인할 수 있다. 해당 루틴에선 [사진 1]에서 확인했던 serial을 입력하도록 하는 창을 실행한다.

 

 

[사진 3]

코드 섹션에서 우클릭 - Search for - All referenced strings 기능을 클릭하면 위와 같이 원본파일에서 사용되는 문자열을 확인할 수 있다.

 

 

[사진 4]

문자열을 참조하면 위와 같은 루틴이 나온다. 40106C 주소에 브레이크 포인트(이하 BP)를 설정하고 실행하면 serial 입력 창이 뜨고 serial을 입력하면 디버깅을 진행할 수 있다. 나는 serial 값으로 "TEST" 문자열을 입력하였다.

 

 

[사진 5]

먼저 GetDlgItemTextA 함수를 실행하면 내가 입력한 serial 문자열의 길이를 반환해준다.

EAX 레지스터에 "TEST" 문자열의 길이 4가 저장된 것을 확인할 수 있다.

 

참고: https://jade9reen.tistory.com/33

 

GetDlgItemTextA Function

https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-getdlgitemtexta GetDlgItemTextA function (winuser.h) Retrieves the title or text associated with a control in a dialog box. docs..

jade9reen.tistory.com

 

 

[사진 6]

그 다음 GetVolumeInformationA 함수가 나오는데 이 함수는 지정된 루트 디렉터리의 파일 시스템 및 볼륨에 대한 정보를 검색한다. Root가 NULL로 설정되어 있기때문에 원본파일이 위치한 C드라이브에 대해 검색할 것이다. 그리고 검색을 성공하면 1을 반환한다. EAX 레지스터에 값 1이 반환된 것을 확인할 수 있다. 또한 4010A3 주소에 "WINDOWS" 문자열이 생기는데 이는 검색한 드라이브의 이름을 나타낸다. 즉, 내 컴퓨터의 C드라이브의 이름이 "WINDOWS"로 되어있다.

 

 

[사진 7]

그 다음 lstrcat 함수로 "WINDOWS" 문자열 뒤에 "4562-ABEX" 문자열을 붙여서 "WINDOWS4562-ABEX" 문자열을 만든다. 그리고 앞의 네 글자에 값 2를 더해 "YKPFOWS4562-ABEX" 문자열을 만든다.

 

 

[사진 8]

그 다음 "L2C-5781" 문자열을 "YKPFOWS4562-ABEX" 문자열 앞에 붙여서 "L2C-5781YKPFOWS4562-ABEX" 문자열을 만든다. 그리고 내가 입력한 serial "TEST"와 비교한 후 같으면 성공했다는 내용의 메시지 박스 함수를 호출한다.

즉, serial은 "L2C-5781YKPFOWS4562-ABEX"이다.

 

 

[사진 9]

 

*후기

api 공부를 더 해야겠다.

728x90
728x90