본문 바로가기
Rev/Write-up

Trollcat CTF - Solver

by zooonique 2021. 2. 17.
반응형

 

 

어려운 문제가 아니니까, 간단하게 풀이할 수 있다.

 

Key를 buf에 입력받고, sub_1200 함수를 통해 비교한다.

 

z3를 사용하는 문제이다. 왜 문제이름도 Solver인지 알 수 있다.

 

from z3 import *

# Creates solver
s = Solver()

# Creates an array of variables to solve for
flag = [BitVec('flag%i'%i,8) for i in range(0, 22)]

# checks that variables are in range
for i in range(0, 22):
    s.add(flag[i] >= 48)
    s.add(flag[i] <= 122)

# adds all the checks
s.add(flag[0] + flag[3] == 100)
s.add(flag[1] + flag[18] == 214)
s.add(flag[2] + flag[4] == 178)
s.add(flag[5] ^ flag[6] == 76)
s.add(flag[8] - flag[7] == 17)
s.add(flag[10] - flag[9] == 59)
s.add(flag[12] + flag[11] - flag[13] == 69)
s.add(flag[15] + flag[14] - flag[16] == 31)
s.add(flag[16] + flag[17] - flag[18] == 88)
s.add((flag[20] ^ flag[19]) ^ flag[21] == 69)

# print if we were able to solve or not
print(s.check())
print(s.model())
# gets the variables
m = s.model()

# initializes an empty dictionary
t = {}

# parses the model to dictionary
for a in str(m)[1:-1].split(','):
    t[a.split('=')[0].strip()] = a.split('=')[1].strip()

# creates the string from the variables
s =""
for i in [BitVec('flag%i'%i, 8) for i in range(0, 22)]:
    s += chr(int(t[str(i)]))

# prints the string
print(s)

반응형

'Rev > Write-up' 카테고리의 다른 글

Tenable CTF 2021 - Play Me  (0) 2021.02.24
Tenable CTF 2021 - Forwards from Grandma  (0) 2021.02.23
RaziCTF2020 - Protected Conditions  (0) 2021.01.29
RaziCTF2020 - Revme  (0) 2021.01.27
RaziCTF2020 - Easy Conditions  (0) 2021.01.25