Abex Crackme #3
Program review
Abex Crackme 3번째 문제이다.
프로그램을 동작해보자
확인 버튼을 클릭하면 Keyfile을 체크할거라고 한다.
확인 버튼을 눌렀더니 "파일을 찾을 수 없다" 라고 말한다.
x32dbg로 프로그램을 까보자
Debugging
프로그램을 x32dbg로 까면 이렇게 뜬다.
현재 위치한 곳은 main시작부분이다.
call <JMP.&createFileA>의 함수 부분에서 "Click OK to check for the keyfile"이라는 문자열이 나오면서 abex.l2c 파일이 있는지 검사한다.
만약 파일이 없으면 Error 메세지 창 부분으로 점프를 하고,
파일이 있으면 파일의 사이즈를 검사하는 함수인 call <JMP.&GetFileSize>로 간다.
따라서 이 프로그램을 정상 실행할 수 있도록 하는 방법은 두가지가 있다.
- 분기문을 조작
- abex.l2c파일을 생성
Solution #1 :: 분기문 조작
방법 1. Je crackme3.401075를 Jne로 바꾸어 에러 창으로 가지 않게 한 뒤,
CMP eax,12부분을 CMP eax,eax로 고친다.
Result
완료
Solution #2 :: 파일 생성
위 프로그램과 같은 경로에 abex.l2c파일을 만든다.
물론 안되겠지만 그리고 나서 프로그램을 돌려보자
찾은 파일이 유효하지 않는 keyfile이라고 뜬다.
앞서 말한 파일의 사이즈를 검사하는 함수가 있어서 거기서 걸린 모양이다.
따라서 파일 사이즈를 맞추던지, 분기문을 고치던지 해야할 것같다.
분기문은 앞서서 했으므로 파일 사이즈를 맞춰서 하도록 하겠다.
call 뒤에 CMP eax, 12인데 아마 call 함수로 시작된 함수의 리턴 값이 eax로 들어갔을 것이다.
파일 사이즈를 알아내는 함수였으므로 eax는 파일 사이즈를 나타내는 값일 것이다.
따라서 eax가 12가 되기 위해서 파일사이즈를 12가 되도록 해야한다.
EIP가 0x00401046일때 현재 파일에 아무 내용이 없으므로 eax가 0인 상태이다.
파일 사이즈를 늘려보자
1을 5개 썼다.
eax가 5가 됐다.
아싸 이제 1을 12개 넣자.이렇게 생각하면 바보다.
16진수이니까 1을 18개 넣어야한다.
Result
clear
'Write-up > Wargame' 카테고리의 다른 글
[Dreamhack wargame] Quiz: x86 Assembly 1 풀이 (2) | 2022.09.25 |
---|---|
Abex's Crackme #4 (1) | 2021.04.27 |
Abex Crack me #2.2 (0) | 2020.05.01 |
Abex Crack me #2.1 (0) | 2020.05.01 |
Abex Crack me #1 (0) | 2020.04.30 |