안 쓰던 블로그

abex crackme 3번-keyfile채우기 본문

CTF/Reversing

abex crackme 3번-keyfile채우기

proqk 2020. 8. 26. 19:02
반응형

.exe파일을 실행하면 keyfile을 찾을 수 없다고 뜬다. 알맞은 키파일을 생성해서 성공 메시지를 띄우는 문제

(단, 코드 수정을 하지 않는다)

스터디 숙제로 제공된 파일이라 실제 문제와 이름 등이 약간 다를 수도 있습니다

 

F9로 실행시키면 Entry Point 00401000으로 이동하고, 그 아래 찾고자 하는 부분이 문자열 찾을 필요도 없이 바로 나온다

윈도우즈 API 함수들이 보이는데, MessageBox나 CreateFile, GetFileSize 등이 API함수다

 

프로그램이 시작되자마자 스택에 MessageBoxA에 함수에 들어갈 인자를 채우기 시작한다

push 0은 uType MB_OK

crackme라는 InCaption

keyfile찾으라는 Text

push 0으로 hWind

 

오른쪽 아래 스택이 FILO구조로 거꾸로 대입된 걸 확인한다

 

keyfile을 넣으라는 메시지 박스를 call한 뒤 abex.12c라는 파일을 읽어 온다

참고로 CreateFile은 이름은 저런데 create와 open 기능이 다 있다

 

abex.l2c파일이 존재하는지 확인한다

존재하지 않으면 eax가 FFFFFFFF로 바뀌고

cmp eax, FFFFFFFF 부분에서 비교를 하게 되는데, 지금은 파일이 없으므로 equal이 뜨고 JUMP를 하게 된다

어디로 가냐면 위에 사진에서는 짤렸지만 아래에 401075로 가서 파일이 없다는 메세지와 ExitPrecess로 프로그램 종료한다

여기서 조건 하나를 알 수 있다->abex.l2c파일이 필요하다

 

만약에 파일이 있다고 가정, je 부분을 통과한다

그러면 다음은 GetFileSize함수가 나온다

 

위에 push dword ptr ds:[4020CA], eax 부분에서 eax값을 4020CA의 값으로 복사해 두었다

je를 넘어간 뒤에 그 값을 GetFileSize에 인자로 스택에 넣고 abex.l2c 파일의 크기를 확인하고 eax에 대입한다

파일 크기는 cmp eax, 12로 비교를 진행하는데, HEX 12는 DEC 18이므로 파일 크기는 18바이트여야 한다

(18바이트=영어일 경우 18글자 한글일 경우 9자리)

이게 두 번째 조건이다

 

이제 두 조건에 맞게 파일을 만들어 준다. 같은 폴더에 넣어야 한다

 

이제 실행시키면 keyfile을 찾았다고 뜬다

 

반응형
Comments