문제 바이너리를 ida로보면 함수가 엄청 커서 헥스레이가 안된다. 근데 어셈을 보면 단순히 인풋을 1바이트씩 비교하는 로직이 반복된다.
이 때 인풋을 비교할 때 단순하게 1바이트를 비교하는 경우랑 인풋값이랑 특정 값을 xor해서 비교하는 연산 두가지 케이스로 나뉜다.
위 케이스에 맞춰서 비교하는 값들을 파이썬으로 대충 구해 쭉 출력해보면 플래그가 나온다.
solve.py
f = open("C:\Users\Administrator\Downloads\\secu","r")
contents = f.read().split("\n")
flag = ""
for i in xrange(len(contents)):
if "cmp" in contents[i]:
if "rbp" in contents[i]:
tmp = contents[i-1].split(',')
xorValue = tmp[1].replace(" ","").replace("h","")
tmp = contents[i].split(',')
result = tmp[1].split('h ;')
result = chr(int("0x" + result[0].replace(" ", "").replace("h", ""), 16)^int("0x"+xorValue,16))
flag += result
else:
tmp = contents[i].split(',')
result = tmp[1].split('h ;')
result = chr(int("0x"+result[0].replace(" ","").replace("h",""),16))
flag += result
start = flag.find("securinets")
end = flag[start:].find("}")+1
print "[*]Find Flag = "+flag[start:start+end]
[*]Find Flag = securinets{automating_everything_is_the_new_future}
'CTF > Writeup' 카테고리의 다른 글
Codegate 2019 Open CTF Reversing Write up (2) | 2019.04.02 |
---|---|
b00t2root CTF 2019 Web Writeup (0) | 2019.03.31 |
Securinets CTF Quals 2019 Web Writeup (0) | 2019.03.25 |
TAMUctf 19 Obfuscaxor (0) | 2019.03.22 |
Pico CTF 2018 keygen-me-2 (0) | 2019.03.22 |