Hacking/[Reversing]IOLI CrackMe

IOLI CrackMe 0x01

양선규 2023. 4. 9. 18:46
728x90
반응형

IOLI CrackMe 0x01 입니다.

 

 

password를 요구한다

 

저번 레벨과 마찬가지로 password를 알아내는 문제입니다.

 

 

main 함수가 보인다

 

r2 -d crackme0x01 -> radare2 프로그램 디버깅 모드로 문제파일 실행

aaaa -> 프로그램 분석

afl -> 함수목록 출력

 

특별히 보이는 함수는 main 뿐입니다. main함수 기준으로 분석해 보도록 합시다.

 

 

main 함수

 

pdf @ main

 

main 함수입니다.

 

 

프로그램 구조

 

8400, 8407 : 프로그램 시작 문자열 출력

840c, 8413 : "Password: "문자열 출력

8426 : 사용자로부터 입력받는 부분

842b : 어떤 숫자 2개를 비교하고 있음

8432 : 점프구문, 앞의 비교구문에서 두 값이 동일할 경우 지정된 위치로 점프함

 

대략 이런 구조입니다. 제가 봤을땐 842b 부분의 cmp dword [var_4h], 0x149a  명령어가 눈에 띄는데요.

비교하는 값이 대체 무엇인지 확인해 봅시다.

 

 

breakpoint 설정

 

비교구문이 있는 위치에 breakpoint를 설정하였고, 프로그램 시작 후 password로 1234 를 입력하였습니다.

 

 

break가 걸려있음

 

"b"가 보이시나요? breakpoint를 의미하는 문자열입니다.

이제 var_4h 위치의 값과 0x149a 의 값을 확인해 봅시다.

 

 

ebp-0x4

 

main함수 위쪽을 보시면, var_4h 위치는 ebp-0x4 의 위치와 같다는 걸 알 수 있습니다.

 

 

ebp-0x4 위치

 

px명령어를 이용하여 ebp-0x4 위치부터 20바이트 만큼을 16진수 형태로 출력하였습니다.

d204 보이시나요? 저게 값입니다.

little endian 방식으로 저장되어 있으므로, 2개씩 끊어 반대로 읽어 줍시다.

0x04d2 입니다.

 

 

1234

 

0x04d2는 10진수로 1234였습니다.

아까 우리가 입력했던 password가 저장되어 있던 것입니다.

 

 

5274

 

비교대상 값은 5274였습니다.

우리가 입력한 password와 5274를 비교하는 것입니다.

 

 

je

 

비교한 이후 je명령어가 있는데요. je는 Zero Flag 값이 1일 경우 지정된 위치로 점프합니다.

cmp 비교구문은 두 값이 같을 경우 Zero Flag를 1로 셋팅합니다.

따라서 password가 일치할 경우 점프하게 되는 것입니다.

 

 

password ok

 

점프되는 부분입니다. Password OK 문자열을 출력합니다.

 

 

Invalid Password

 

반대로 점프하지 못한 부분입니다. Invalid Password 문자열을 출력하네요.

 

이제 우리가 알아낸 5274를 프로그램을 실행하여 직접 입력해 봅시다.

 

 

radare2 종료

 

q 명령어로 radare2를 종료해 줍시다.

 

 

clear

 

예상대로 password는 5274였고, Password OK :) 문자열이 출력되었습니다.

cmp 명령어에서 비교되는 값을 직접 확인하여, password를 알아낼 수 있었습니다.

728x90
반응형

'Hacking > [Reversing]IOLI CrackMe' 카테고리의 다른 글

IOLI CrackMe 0x02  (0) 2023.04.09
IOLI CrackMe 0x00  (0) 2023.04.09
IOLI CrackMe 0x03  (0) 2023.04.08