abex crackme3 파일을 일단 실행해보자. 어떤 게 나올까?
일단 첫 실행은 이거고 확인을 누르면
이 창이 나온다. Error가 나왔다?? 그러면 Error 말고 다른 창이 있을거라고 추측할 수 있다.
이제 디버거를 키고 F9를 누르자.
그럼 바로 우리가 실행파일을 눌렀을때 나온 창을 뜨게하는 MessageBoxA 함수가 나온다.
그리고 커서를 아래로 내려보면서 혹시 MessageBoxA가 혹시 금방 나오는지 찾아보자.
위에 세개의 MessageBoxA 함수가 나왔다. 우리가 처음 봤던 MessageBoxA는 세번째 함수다. 두번째 MessageBoxA 함수도 에러가 나왔다.??(좀 의아한 점이다) 그래서 우리는 Well done!인 첫번째 MessageBoxA가 나오도록 우리는 조종해야 한다.
CMP나 TEST 같은 비교문을 통해 JMP할 것으로 예상되니 CMP나 TEST를 찾아보도록 하자.
CMP가 두개나 나왔다. 음??? 일단 첫번쨰 CMP EAX, -1에 break point를 걸고 재실행 해보겠다.
레지스터 창을 보면 Z flag가 1이다.
고로 JE 뒤에 있는 00401075 주소로 간다는 소리다.
제일 간단한 방법은 00401075를 Well done! MessageBoxA의 처음인 0040104B로 바꾸면 바로 된다.
이렇게 Well done! 을 바로 띄울 수 있다.
하지만 우리는 좀 다르게 가 볼 것이다.
Z flag가 1인 것을 이용하기 위해 JE를 JNZ로 바꿔보자. (JNZ는 Z flag가 0일 때만 JMP한다.)
엇!? 우리가 아까 의아해 했던 두번째 MessageBoxA함수에 있는 것이 나왔다.
즉, 이 문제에 CMP가 두 개나 있던 이유가 있던 것이다.
JMP문을 두개나 바꿔야 Well done!으로 갈 수 있다.
CMP EAX,12아래에 JNZ가 있는데 CMP EAX,12에서 F8을 눌러보면 Z flag가 0이 되는 것을 볼 수 있다. 우리는 바로 아래에 Well done!을 가야하기 때문에 JNZ대신 JE로 바꿔서 JMP문을 타지 않도록 한다. JNZ를 JE로 바꾸면 Well done! 창을 볼 수 있다.
'reversing > abex crackme' 카테고리의 다른 글
abex crackme #2 (0) | 2018.12.25 |
---|---|
abex crackme#1 (0) | 2018.12.24 |