본문 바로가기
CTF

[SECCON Beginners CTF 2022] CoughingFox

by skyepodium 2022. 6. 5.

1. 개요

제곱수 검사 문제

 

2. 분석

그냥 거꾸로 돌리면 되겠지 싶었는데 shuffle로 순서를 바꾸어 놓았습니다.

 

그럼 어떻게 맞출까 생각하다가 제곱수 여부를 검사해서 넣기로 결정했습니다

from random import shuffle

flag = b"ctf4b{XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}"

cipher = []

for i in range(len(flag)):
    f = flag[i]
    c = (f + i)**2 + i
    cipher.append(c)

shuffle(cipher)
print("cipher =", cipher)

 

3. exploit

# 1. init
cipher = [12147, 20481, 7073, 10408, 26615, 19066, 19363, 10852, 11705, 17445, 3028, 10640, 10623, 13243, 5789, 17436, 12348, 10818, 15891, 2818, 13690, 11671, 6410, 16649, 15905, 22240, 7096, 9801, 6090, 9624, 16660, 18531, 22533, 24381, 14909, 17705, 16389, 21346, 19626, 29977, 23452, 14895, 17452, 17733, 22235, 24687, 15649, 21941, 11472]
n = len(cipher)
res = [0 for _ in range(n)]

# 2. loop
for c in cipher:
    # 2중 for 문으로 제곱수 여부를 검사합니다.
    for i in range(n):
        v = (c - i) ** 0.5
        if v == int(v):
            r = chr(int(v - i))
            res[i] = r

print("".join(res))
# ctf4b{Hey,Fox?YouCanNotTearThatHouseDown,CanYou?}

'CTF' 카테고리의 다른 글

[EZCTF] I made a blog!  (0) 2022.06.05
[SECCON Beginners CTF 2022] BeginnersBof  (0) 2022.06.05
[SECCON Beginners CTF 2022] Quiz  (0) 2022.06.05
[SECCON Beginners CTF 2022] Util  (0) 2022.06.05
[BSidesSF CTF] Sequels: A New Bug  (0) 2022.06.05