Hacking/[Reversing]IOLI CrackMe

IOLI CrackMe 0x00

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

IOLI CrackMe 0x00 입니다.

리버싱 연습하기 좋은 문제이며, 0x00 부터 0x09 까지 있습니다.

 

 

문제

 

0x00 문제를 실행해 보았습니다.

Password 입력을 요구해서 "1234"를 입력하였으나 인증에 실패했습니다.

리버싱을 통해, Password값을 알아내야 합니다.

 

 

radare2 사용

 

r2 : radare2 프로그램 실행 명령어

-d : 디버깅 모드로 실행

 

리버싱엔 radare2 프로그램을 사용하겠습니다.

 

 

함수목록

 

aaaa 명령어로 프로그램 분석 후, afl 명령어로 함수 리스트를 출력하였습니다.

눈에 띄는 함수가 main 밖에 없군요. main함수를 기준으로 분석해 보도록 하겠습니다.

 

 

main 함수

 

pdf @ main

 

main 함수입니다. 분석해 보도록 합시다.

 

 

출력 부분

 

이 부분을 보시면, 프로그램 실행 시 출력문이 저장된 부분이란 것을 알 수 있습니다.

오른쪽 ;(세미콜론)이후 주석 부분을 보시면 더 쉽게 파악할 수 있습니다.

 

 

입력, 비교구문

 

이후 scanf 함수를 이용해 뭔가를 입력받고 있고,

strcmp 함수를 이용해 값을 비교하고 있습니다.

[esp] 값과 250382 값을 비교하는군요. ( [esp] 같이 대괄호로 감싸진 것은 주소를 의미함 )

 

2행을 보시면 var_18h의 위치정보를 eax에 대입하고 있는데, 이후 eax값을 [esp]에 대입하고 있으므로

 

결과적으로 var_18h 주소에 저장된 값과 "250382" 를 비교한다고 볼 수 있겠네요.

var_18h 에 뭐가 저장되어 있길래 "250382" 와 비교하는 걸까요?

 

 

breakpoint 설정

 

var_18h 부분의 값을 알아보기 위해 적절한 위치에 db명령어로 breakpoint를 설정하고, dc 명령어로 프로그램을 실행하였습니다. password는 1234를 입력해 주었습니다.

 

 

breakpoint

 

입력을 받은 후 var_18h 값을 eax에 대입하는 부분에 breakpoint를 걸었습니다.

이제 값을 확인해 보도록 합시다.

 

 

ebp-0x18

 

맨 윗부분을 보시면, var_18h 위치는 ebp-0x18위치의 정보와 동일하다는 걸 알 수 있습니다.

 

 

34333231

 

px명령어로 해당 위치부터 20바이트만큼의 값을 16진수로 출력했습니다.

0x34333231 값이 저장되어 있습니다. 이걸 10진수로 바꿔보겠습니다.

( little endian 방식이므로 2개씩 끊어 반대로 읽어야 합니다 )

 

 

"1234"

 

? 명령어로 다양한 변환형태를 출력할 수 있습니다.

보이시나요? 0x34333231은 string(문자열)형태로 "1234" 였습니다.

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

 

결과적으로, strcmp함수를 이용해 우리가 입력한 1234와 250382를 비교하는 것이었습니다.

 

 

비교구문 이후 진행

 

strcmp함수로 비교를 진행하면, 두 값이 같을 경우 "0" 을 출력합니다.

이후 test eax, eax 명령으로 인해 eax and eax 연산이 실행되고, Zero Flag 값이 "1"로 설정됩니다.

( test는 and 연산을 의미하고, 연산결과가 0일 경우 Zero Flag가 1로 설정됨 )

그리고 je 명령을 통해 점프하는데, je는 Zero Flag 값이 "1"일 경우만 점프합니다.

 

그러니까, 우리가 올바른 password를 입력했을 경우 점프하는 겁니다.

 

 

점프한 위치

 

이곳이 점프하는 위치입니다.

password가 올바를 경우, Password OK 문자열을 출력하고 있네요.

 

 

점프하지 않은 위치

 

점프하지 않은 위치입니다. ( password가 틀렸을 때 )

유효하지 않은 password라고 출력하고 있습니다.

 

 

이제 아까 알아낸 "250382"를 프로그램을 실행하여 입력해 보겠습니다.

 

 

radare2 종료

 

q 명령어로 radare2를 먼저 빠져나와 줍시다

 

 

clear

 

250382를 입력하여 예상대로 문제를 해결할 수 있었습니다.

728x90
반응형

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

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