안 쓰던 블로그
abex crackme 3번-keyfile채우기 본문
.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을 찾았다고 뜬다
'CTF > Reversing' 카테고리의 다른 글
리버싱-전역/지역 변수 초기화 (0) | 2020.09.01 |
---|---|
[리버싱] 메모리 구조, 함수 호출 과정, Stack Frame (0) | 2020.08.30 |
리버싱-분기문 우회 (0) | 2020.08.26 |
리버싱-실행 프로그램 변경 (0) | 2020.08.26 |
리버싱-PE분석 및 수정 (0) | 2020.08.26 |