프로그램을 실행하면 위의 사진과 같이 Enter your serial 문구와 함께 serial 키를 입력하라고 한다.
일단 아무런 값도 넣지 않고 “Enter your serial” 문구 그대로 Check 버튼을 누르면 serial 값이 맞지 않다고 한다.
x32dbg로 실행 파일을 로드한 뒤 EP를 보면 위의 사진과 같다.
F8 키로 한줄 한줄 실행하다보면 40101D 주소의 call 명령에서 Enter your serial 문구와 창이 뜬다.
Check 버튼을 누르면 위의 사진과 같은 창이 뜨는데 이어서 확인 버튼을 누르면
40101D 주소의 call 명령어 다음 줄의 명령어가 실행되고 401024 주소의 call 명령어를 진행하면 프로그램이 종료된다.
그렇다면 40101D 주소의 call 명령어 실행에서 메시지 박스가 띄워지므로 40101D 내부로 들어가서 명령어를 본다.
40101D 주소의 call 명령어 내부로 들어오면 위의 사진과 같이 뜬다.
DialogBoxParamA, wsprintfA, MessageBoxA, GetDlgItemTextA 함수들로 jmp 명령어들이 보이고 그 밑으로 eax 레지스터에 al의 값을 더하는 것으로 보인다.
F8 키로 일일히 봐도 되지만, 문자열 찾기 기능을 이용한다.
상단 메뉴바를 보면 위의 사진과 같이 나와있는데 오른쪽 부분에 “Az” 라는 아이콘이 있다.
해당 아이콘을 누르면 문자열 찾기 기능을 사용할 수 있다.
“Az” 아이콘을 눌러 문자열 찾기 기능을 사용하면 위의 사진과 같이 프로그램 내의 문자열들이 보인다.
문자열들 중 “Error!”, “The serial you entered is not correct!”, “Well Done!”, “Yep, you entered a correct serial!” 문구가 있다.
Error를 더블클릭해 이동해보면
위의 사진을 참고해보면 401103 주소로 화면이 이동된다.
401103 주소에 BreakPoint를 설정해두고 F4 키로 401103 주소까지 실행한다.
(중간에 창이 뜨는데 Check 버튼을 눌러준다.)
풀이
참고)
serial key를 입력하는 문제들은 입력한 serial 값이 일치한지 일치하지 않은지에 대한 문구를 띄우는 부분 이전에 프로그램 내에 있는 정해진 serial 값과 사용자가 입력한 serial 값을 비교하는 부분이 있다.
위의 참고를 바탕으로 스크롤을 올려 401103 주소 위의 코드들을 보면 4010F7 주소에 lstrcmpiA 함수를 호출하는 명령이 있다.
이는 strcmp(string compare)이라는 이름에서 알 수 있듯이 문자열을 비교하는 함수이다.
즉, 사용자가 입력한 문자열과 프로그램 내에 있는 serial 값과 비교하여 일치한지 확인하는 것이다.
그러면 위의 사진에서 4010ED 주소와 4010F2 주소 오른쪽 주석 부분을 보면 “Enter your serial”과 “L2C-57816784-ABEX” 문자열이 있다.
“Enter your serial” 는 사용자가 입력한 값이고, “L2C-57816784-ABEX” 문자열은 프로그램 내에 저장된 serial 값이다.
quiz2_abexcm5.exe를 실행하고 “L2C-57816784-ABEX”를 입력한 뒤 Check 버튼을 누르면
일치한 serial 값을 입력했기 때문에 위의 사진과 같은 창이 뜬다.
'전쟁 > crackme' 카테고리의 다른 글
Crackme #7 (0) | 2022.06.22 |
---|---|
crackme #6(ReWrit's Crackme#1) (0) | 2022.06.21 |
abex' crackme #4 (0) | 2022.06.14 |
abex' crackme #3 (0) | 2022.06.14 |
abex' crackme #2 (0) | 2022.06.05 |