- Today
- Total
Phantom
Crackme – 3 본문
프로그램을 실행하니 클릭하여 키 파일을 체크하란다.
음….키 파일을 찾을 수 없단다.
그러면서 프로그램 종료…..
?!!!
고로 우리는 키 파일을 찾아야 한다는 것인데 역시 안을 들여다 봐야겠다.
이게 프로그램의 전체 모습이다.
처음 메시지박스함수 다음 CreateFileA함수의 인자 값들이 궁금하다.
그래서 msdn에 검색을 했는데…
CreateFileA("abex.l2c", 0x80000000, 0, 0, 3, 0x80, 0); 이것인데 뜻이 뭐냐하면
HANDLE WINAPI CreateFile(
_In_ LPCTSTR lpFileName,
_In_ DWORD dwDesiredAccess,
_In_ DWORD dwShareMode,
_In_opt_ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
_In_ DWORD dwCreationDisposition,
_In_ DWORD dwFlagsAndAttributes,
_In_opt_ HANDLE hTemplateFile
);
lpFileName : 열려있거나 생성된 파일 또는 장치의 이름 : abex.l2c
dwDesireAccess : 파일이나 장치의 요청된 접근 : 0x80000000 모르겠다.
dwShareMode : 파일이나 장치의 요청된 공유모드 : 0(열려있는 파일또는 장치로부터 다른 프로세스를 예방?한다. 공유를 안 한다는 뜻인 듯
lpSecurityAttributes : 파일의 보안 속성을 지정하는 SECURITY_ATTRIBUTES구조체의 포인터 : 0?,NULL? NULL이라면 디폴트 보안 설명자가 할당된다… 이건 무슨 뜻인지 모르겠다.
dwCreationDisposition : 파일을 생성할 것인지 열 것인지를 지정 : 3 ( OPEN_EXISTING – 이미 존재하는 파일을 연다, 파일이 없다면 에러를 리턴한다.
dwFlagsAndAttributes : 생성할 파일의 속성 또는 기타 오브젝트의 속성을 지정 : 0x80(FILE_ATTRIBUTE_NORMAL – 아무런 속성도 가지지 않는 파일을 만든다.)
hTemplateFile : 생성될 파일의 속성을 제공할 템플릿 파일 : 0? NULL?
결론은 파일을 열겠다는 것이다
파일을 열고 리턴 값을 검사한다. 리턴 값이 -1이라는 것은 CreateFile함수가 에러를 리턴 했다는 것이고 바로
에러 쪽으로 분기한다.
이제 다른 쪽의 분기도 살펴 보기 위해 abex.l2c파일을 만든다..
그리고 다시 디버깅을 한다.
그리고 GetFileSize함수로 파일의 크기를 구한 후, 파일이 0x12(18)바이트인지를 검사하고 분기를 한다.
18바이트가 아니라면 맞는 키가 아니라며 에러를 출력하고 18바이트라면 키 파일 이라며 성공 메시지를 출력하고 프로그램은 종료한다
'Pwnable > Crackme 처음 풀 때' 카테고리의 다른 글
Crackme – 6 (0) | 2016.03.01 |
---|---|
Crackme – 5 (0) | 2016.03.01 |
Crackme – 4 (0) | 2016.03.01 |
Crackme – 2 (0) | 2016.03.01 |
Crackme – 1 (0) | 2016.03.01 |