[reversing.kr] Easy Crack
Easy_CrackMe.exe라는 실행파일 하나가 주어진다.
이 입력칸에 들어갈 password를 찾으면 되는 문제
디버거로 문자열을 찾아내면 될 것 같다.
프로그램에 어떤 문자열이 포함되어 있는지는 디버거에서 우클릭 후 [Search for] - [All referenced text strings]를 선택하면 된다.
역시.. 쉽지 않다
문자열이 바로 나오진 않았음
수상한 건 왜 있는지 모르겠는 5y랑
아마 성공문이 있을 위치 같은 Congratulation!!이다.
일단 Congratulation 위치로 가보기
위의 묶음이 성공 메시지 박스 출력 부분이고 아래가 실패 메시지 박스 출력 부분이다.
EAX에 들어가는 값을 비교해서 점프하는 것 같아 토글을 걸어놓고 실행해봤다.
...쉬운 문제였으면 메시지 박스 분기 구문 직전에서 비교 key가 대놓고 나올 텐데 그렇진 않더라
그래서 그냥 처음부터 뜯어보기로 했음
함수가 시작되는 부분이다. 사진은 안 찍었는데 'userinput'을 입력한 상태임
진행을 하다보면 내가 입력한 'userinput'이 언젠가는 스택에 드러날 거고... 그것과 어떤 주소를 비교하면 그게 key 값이 저장된 주소일 거라는 생각이었다.
userinput이 드러난 순간은 저 코드였다. [ESP+4]에 userinput이 저장되어 있고
[ESP+5]와 61을 비교하고 있다.
의아한 건 [ESP+4]부터 시작되는데 두 번째 글자인 [ESP+5]를 비교한다는 거임...
61은 아스키 코드로 'a'이다.
그리고 중요한 부분!! Compare 뒤에 오는 JNZ는 값이 같지 않으면 점프하라는 의미인데
00401135는 틀린 문자열을 입력했을 때 메시지박스가 출력되는 부분이다.
userinput의 두 번째 자리와 a가 같지 않으면 오류 메시지박스를 출력한다는 건데,
이 말은 곧 key값의 두 번째 자리가 a라는 것임
실제로 uaerinput으로 넣었더니 해당 구문을 피할 수 있었다.
그 다음으로 본 건 이 부분...
아스키 5y와 어떤 값을 비교하고, 같지 않으면 에러 메시지 구문으로 보내버린다.
아마 5y가 key 값의 일부이고 어떤 파트에서 일치하는 건지 살피면 될 듯
좀 야매긴 한데 스택에 들어올 때 앞자리 두 개가 떼지고 들어오길래
ua5yinput으로 넣어봤더니 통과됐다.
3,4번째 자리를 비교하는 게 맞았나봄
다음으로 볼 건 R3versing 부분이다.
사진 맨 아래에 있는 JNZ 문에서 에러 메시지로 이동하게 되는데 그 사이에 스택에 대놓고 비교하는 부분은 없다.
대신 레지스터에서 값을 비교한다.
빨간색 밑줄 그어진 부분이 key 값을 불러온 부분(ESI)이고
EAX 레지스터에 userinput이 들어온다.
ua5yR3versing
이 부분에서 빙글빙글 돌면서 한 자리씩 비교한다. R3versing을..
마지막으로 이 부분!!
[ESP+4]와 아스키 45를 비교한다.
그리고 [ESP+4]는 userinput의 첫 번째 자리이다.
E는 아스키 45이므로, key값의 첫 번째 자리가 E임을 알 수 있다.
최종 key : Ea5yR3versing
성공~