반응형

abex' crackme3.exe
0.01MB

 

 

keyfile을 확인하기 위해 OK(확인) 버튼을 클릭하라고 한다.

 

 

 

OK 버튼을 클릭하면 파일을 찾을 수 없다고 뜬다.

 

그리고 확인 버튼을 클릭하면 메시지 박스는 종료된다.

 


분석

 

Crackme 3의 Entry Point이다.

 

EP 코드 시작부분부터 바로 “abex’ 3rd crackme” 문자열이 있다.

 

 

F8 키로 한줄한줄 진행하다보면 40102A 주소에 CreateFileA API가 있는데, 아무래도 넘겨지는 인자를 보아하니 파일의 이름은 abex.l2c인 것 같다.

 

 

CreateFileA API의 반환값이 담긴 eax의 값을 4020CA 주소에 넣는다.

 

그리고는 eax와 “FFFFFFFF”를 비교하는데 같으면 401075 주소로 분기한다.

 

401075 주소 부분은 Error 메시지 박스를 띄우는 부분으로 파일을 못 찾았을 때 보이는 문구이다.

 

즉, 첫 번째 조건은 abex라는 이름의 l2c 확장자를 가진 파일이 생성되어야 한다.

 

 

CreateFileA API의 반환값이 들어있는 eax의 값과 “FFFFFFFF”가 일치하지 않아야 401037 주소의 조건 분기를 실행하지 않고 401039 주소의 명령이 수행된다.

 

즉, abex.l2c 파일이 있다면 401039 주소의 명령이 실행되는 것이다.

 

조건 분기가 실행되지 않고 잘 넘겨졌다면 스택에 0을 저장하고, 4020CA에 있는 값 즉, CreateFileA API의 반환값이 담긴 eax의 값을 스택에 저장한다.

(이 때 eax와 4020CA에 있는 값은 FFFFFFFF가 아닌 값이 들어가있다.)

 

그리고는 GetFileSize API를 호출하는데 GetFileSize API의 반환값이 담긴 eax의 값이 12h(=18)와 같아야 40104B 주소로 넘어가 “well done!” 문자열과 키 파일을 찾았다는 문구의 메시지 박스를 출력하고 401088 주소로 jump 하여 종료된다.

 

만약 GetFileSize API를 호출 후 eax에 담긴 값이 12h(=18)과 다르면 401060 주소의 Error 메시지 박스가 뜨는데, 메시지 박스 내용은 “찾은 파일은 유효한 키파일이 아니다” 이다.

 

즉, 두 번째 조건은 파일의 사이즈가 12h(=18byte)여야 한다는 것이다.

 


풀이

 

조건 1. abex.l2c라는 파일이 있어야 한다.

 

조건 2. abex.l2c 파일의 크기는 12h(=18byte)여야 한다.

 

 

메모장을 열어 ‘a’ 문자를 18개 적어준다.

 

 

“메뉴” → “다른 이름으로 저장”을 눌러 위와 같이 파일 이름은 “abex.l2c” / 파일 형식은 모든 파일로 지정한다.

 

경로는 crackme3 실행 파일과 동일한 위치로 지정해야 한다.

 

 

두 가지 조건을 모두 만족하는 파일이 만들어졌으므로 crackme3 실행파일을 실행한다.

 

 

그러면 위와 같이 yep, key file found 메시지박스가 뜬다.

 


check

 

 

두 가지 조건을 만족하는 파일을 생성 후 crackme3 실행 파일을 디버거에 로드시켜본다.

 

 

 

CreateFileA API 호출 후 eax의 값은 FFFFFFFF가 아닌 2A0이 들어있다.

 

 

그렇기에 401034 주소의 cmp 명령의 결과로 ZF 플래그는 0이고, 그러므로 je 명령어는 실행되지 않고 다음 명령으로 넘어간다.

 

이렇게 조건 1번은 만족되어 패스됐다.

 

 

 

다음으로 GetFileSize API 호출 후 eax 값은 12이기 때문에 401046 주소의 cmp 명령의 결과로 ZF 플래그는 1이고, 그러므로 조건 2번도 만족되어 jne 명령은 실행되지 않고 다음 명령으로 넘어가 “Yep, keyfile found!” 문구가 있는 메시지 박스를 출력한다.

반응형

'전쟁 > crackme' 카테고리의 다른 글

crackme #6(ReWrit's Crackme#1)  (0) 2022.06.21
abex' crackme #5  (0) 2022.06.14
abex' crackme #4  (0) 2022.06.14
abex' crackme #2  (0) 2022.06.05
abex' crackme #1  (0) 2022.06.05

+ Recent posts