IOLI CrackMe 0x02 입니다.
리버싱을 통해, 프로그램 password를 알아내야 하는 문제입니다.
저는 리버싱을 위해 radare2 프로그램을 사용하겠습니다.
radare 실행 후 aaaa 명령어로 프로그램을 분석해 주었습니다.
함수목록입니다. 특별한 함수는 보이지 않아 main 기준으로 분석하겠습니다.
main함수 입니다.
위쪽에서 프로그램 실행 시 문자열을 출력하고 있고,
844e 부분에서 var_ch 위치의 값과 eax값을 비교하고 있습니다.
8451 부분에선 두 값이 일치할 경우, 점프하지 않고 그대로 진행하고 있습니다. (일치하지 않으면 지정된 위치로 점프)
두 값이 일치할 경우의 프로그램 진행입니다.
Password OK 문자열을 출력하고 있는데요, 이것을 보아 위쪽 cmp 비교구문은 올바른 password를 입력했는지 확인하는 부분인 것 같습니다. 정확히 어떤 값과 비교하는지 확인해봅시다.
비교구문 위치에 breakpoint를 설정하여 프로그램을 실행시킨 후, eax와 var_ch 값을 확인하겠습니다.
breakpoint를 설정한 후, dc명령어로 프로그램을 실행하였습니다.
입력한 Password는 1234 입니다.
자, breakpoint에서 잘 멈춰주었습니다. cmp 명령어로 두 값을 비교하기 직전인 상태인데요.
지금 저 두곳에 어떤 값이 들어있는지 확인해봅시다.
dr은 레지스터 값을 확인하는 명령어입니다.
eax에는 우리가 프로그램 실행 시 password값으로 입력했던 1234 였습니다.
그렇다면 이것과 비교되는 값인 var_ch가 password 일 것 같은데요?
main함수 위쪽을 확인하면, var_ch의 위치는 ebp-0xc 라는 것을 확인할 수 있습니다.
242b 05 보이시나요? 저게 ebp-0xc 부분의 값입니다.
다만, little endian으로 저장되어 있기 때문에 2개씩 끊어서 반대로 읽어야 합니다.
즉, 0x052b24 입니다.
var_ch 값은 338724 였군요!
이제 이 값이 password인지 확인해 봐야겠죠? 직접 입력해 봅시다.
q 명령어로 일단 radare2를 종료해 줍니다.
예상대로 password는 338724였습니다!
'Hacking > [Reversing]IOLI CrackMe' 카테고리의 다른 글
IOLI CrackMe 0x01 (0) | 2023.04.09 |
---|---|
IOLI CrackMe 0x00 (0) | 2023.04.09 |
IOLI CrackMe 0x03 (0) | 2023.04.08 |