크랙미(CrackMe) 풀이 _abexcm1.exe
Crackmes
Difficulty between 1 2 3 4 5 6 and 1 2 3 4 5 6
crackmes.one
해당 사이트에서 크랙미를 다운받았다.
다운 받은 파일을 압축 해제하고 x64에 넣어보았다.
그랬더니 x32를 쓰라고 친절하게 알려주었다.
이후 다시 x32에 해당 파일을 디버깅해주었다.
파일을 가지고 드래그 앤 드롭을 해주면 저절로 디버깅해준다.
이제 문제가 열렸으니 문제를 풀어볼 차례이다.
위에 있는 실행 버튼을 계속 누르다보면 위와 같이 알람창이 뜬다.
알람창에 확인 버튼을 누르니 다음처럼 에러가 떴다.
해당 알람창 부분을 찾아보기 위해 참조 찾기 → 모든 모듈(문자열)에 들어가보았다.
그랬더니 알람창에 뜨는 문구를 비롯해서 해당 문제를 해결하면 나오는 문구까지 있는 것 같다.
그래서 해당 부분으로 가기 위해 ok, I really think that your HD is a CD-ROM! :p로 더블 클릭을 통해 이동해보았다.
해당 부분을 보니 abexcm1.402064를 푸시해주면 해당 문제가 풀리는 거 같았다.
→ 라고 생각하였지만 블로그를 보니깐 402064 주소의 내용을 스택에 저장하고 있는 뜻이었다.
해당 코드를 자세히 보니 분기문으로 이루어져있고, 친절하게 어디로 점프가 되는지 알려주고 있다.
그렇다면 해당 문제를 풀기 위해서는 00401026 주소를 거친다면 원하는 문구의 알람을 볼 수 있을 거 같았다.
또한, 0040103B로 가게 된다면 안된다는 것도 알 수 있었다. (점프를 통해 OK라는 문구가 안 뜸.)
+) je : 비교 후 점프
+) jmp : 무조건 점프
점프문을 통해 가야하므로 점프문 바로 위에 있는 코드를 확인해보았다.(00401024)
cmp eax, esi 라고 적혀있는 것으로 보아 eax와 esi가 같을 때 성공으로 점프하는 코드이다.
해당 문제를 푸는 방법은 2가지가 있는데 첫번째로는 eax값과 esi 값을 똑같게 만들어주거나 je 점프문을 비교 후 점프가 아닌 무조건 점프로 바꿔주면 해결되는 문제이다.
후자의 방법을 선택하였다.
00401026 주소에 어셈블리 코드를 수정하여주었다. (je → jmp)
제대로 바꿔주면 위 사진처럼 제대로 인코딩되었다는 문구가 뜬다.
+) 블로그에서 본 내용인데 je와 jmp 모두 Opcode의 크기가 1바이트여서 코드 수정에 영향이 없다고 한다.
바꿔준 후 다시 실행하면 아래와 같이 성공하였다는 알람이 뜬다.
1번 풀이 끝!