code 영역 우클릭 > search for > All referenced Text string
wrong word!!! 가 있는 걸보니 앞 부분에서 입력값을 검사하는 것 같다.
더블 클릭으로 따라 들어간 뒤 위로 스크롤하다 보면 GetDlgItemTextA 함수가 있는데, 아마도 여기서 키를 가져오는 것 같다. 그렇다면 함수에 브포를 걸고 프로그램을 실행시켜 보았다.
당연하게 입력폼이 뜨고, 아무 문자열이나 넣어서 ok를 누르면 F7을 통해 GetDlgItemTextA로 들어갈 수 있다.
해당 함수에 들어가서 계속 F7, F8을 누르며 따라가다가 다음과 같은 문자열을 발견했다.
4011CA에서는 내가 입력한 값이 stack에 lea 되고,
4011CE에서는 키값으로 보이는 문자열 infinity가 stack에 lea 된다.
이때, crackme3을 실행시켜서 infinity를 입력하면 'maxmin'이 반환된다. 아직 맞는지 알 수 없으니 계속해서 진행해보겠다.
키값을 비교하기 시작한다. 비교되는 값이 i이고, 동일하지 않으니 점프되어 wrong word!!!를 반환한다.
그럼 이제 infinity를 입력한 뒤에 실행해보았다.
키값을 가져오고 스택에 넣고 넣고 파란색으로 선택된 곳에서 키값 비교를 한다.
값이 동일하니 점프되지 않고 계속해서 수행한다.
한글자 한글자 수행하면서 앞의 글자들이 지워지는데... 마지막엔 eax값이 0이 되나? 하고 추측해보았다.
함수를 빠져나오니 정말로 eax값이 0이었고,
4011DE에서 점프가 이루어지지 않아 maxmin이라는 문자열이 ecx에 들어감을 알 수 있었다.
이대로 쭉 실행하면
위의 문자열이 반환되고 코드 실행이 끝이 난다.
'System & Reversing > 실습' 카테고리의 다른 글
[CrackMe#4] test.exe 루틴 분석 및 풀이 (0) | 2023.03.31 |
---|---|
[Crackme#2] CrackMe2.exe 루틴 분석 및 풀이 (1) | 2023.03.19 |
[CrackMe#1] Abex' crackme1 풀이 (0) | 2023.03.13 |