Write-up

[reversing.kr] Easy_CrackMe writeup

ch4rli3kop 2018. 1. 8. 01:42
반응형

문제를 분석해보자면, 

무언가를 입력하는 창이 뜨고, 그 창에 적당한 값을 입력해주면, 해당 값에 맞는 결과를 내뱉어주는 형식입니다.

일단 아무 글자를 넣어본 결과 Incorrect 라는 창을 볼 수 있었습니다.

그렇다면, 우리는 우선 저 Incorrect 라는 창을 보지 않을 수 있는 경로를 찾아봐야겠습니다.

바이너리를 분석해서 Incorrect 경로와 관련이 있는 분기문 중에서도, 입력한 값과 연관이 있는 분기문들을 찾아보았습니다. 각각의 조건들에서,

string[0] == 'E'

string[4:] == "R3versing"

string[2:4] == "5y"

string[1] == 'a'

들을 확인할 수 있었습니다.

정리해보면, 다음과 같습니다.

#string은 창에 입력한 문자열입니다.

string[0] == 'E'

string[1] == 'a'

string[2:4] == '5y'  # string[2], string[3]

string[4:] == 'R3versing'  # strcmp는 뒤에 널문자까지 체크해서 "R3versing"의 뒤에 문자가 더 와서는 조건식을 피할 수 없습니다.


여담으로, 위와 같은 방법으로도 조건을 알아낼 수 있지만, 21세기의 최첨단 기술로 바이너리를 분석해보면

위와 같이 조건문을 바로 확인해 볼 수 있습니다.


아무튼 결과적으로 "Ea5yR3versing" 을 입력해보면, 다음과 같은 결과를 얻을 수 있습니다.

flag = "Ea5yR3versing"


후기)

21세기는 참 좋은 것 같습니다.


반응형